我如何知道是什么在启动我的驱动器?

我如何知道是什么在启动我的驱动器?

我已经在我的 Linux 服务器的一个驱动器上启用了“spindown”,这个驱动器只能由 BitTorrent 客户端访问 - 这意味着,当我没有运行 torrent 时,其他任何东西都不应该访问磁盘并将其从 spindown 中唤醒(对吗?)。

但是有什么东西让磁盘每隔 15 分钟左右旋转一次。我该如何追踪这个罪魁祸首?

谢谢您的反馈!

答案1

您可以查看http://samwel.tk/laptop_mode/。虽然此页面主要不是讨论您的问题,但它提供了一个很好的整体描述,说明了 IO 的工作原理和想法,以及如何通过关闭磁盘来使其静音。

针对您的问题的简短回答:

echo 1 > /proc/sys/vm/block_dump

它将在系统日志中生成如下消息:

7 月 23 日 10:04:05 locutus 内核:ls(5224):读取 dm-4 上的块 7340136
7 月 23 日 10:04:05 locutus 内核:ls(5224):读取 dm-4 上的块 4335136
7 月 23 日 10:04:05 locutus 内核:ls(5224):读取 dm-4 上的块 15505568
7月23日 10:04:05 locutus 内核:ls(5224):读取 dm-4 上的块 7340160
7 月 23 日 10:04:05 locutus 内核:ls(5224):读取 dm-4 上的块 7340168

我使用了一个简单的 ls 命令

注意:在执行此操作之前,请确保您的系统日志记录已关闭或写入 ramdisk(类型:tmpfs),因为(引用):“您的系统可能会进入反馈循环,其中 syslogd 会导致磁盘活动,这会导致内核输出,这会导致 syslogd 进行更多的磁盘活动”

我建议将 /tmp 安装为 ramdisk,然后设置将日志记录到 /tmp/syslog。在 /etc/fstab 中执行此操作(并重新启动)即可:

无 /tmp tmpfs 默认值,大小=256M 0 0

答案2

在 Linux 中,最近的fanotify系统调用启用了一个名为fatrace它可以告知整个系统或特定分区中哪个进程正在访问哪个文件。这绝对是我最喜欢的工具:

deluged(6542): R /usr/share/GeoIP/GeoIP.dat
rsyslogd(1737): W /var/log/syslog
rsyslogd(1737): W /var/log/kern.log

答案3

我一直在使用iotop找出正在使用该驱动器的程序。从网站上看,您必须拥有“Linux 内核 ≥ 2.6.20,并启用 TASK_DELAY_ACCT 和 TASK_IO_ACCOUNTING 选项”。

听起来你只对某个特定驱动器感兴趣。你可以考虑编写一个脚本,定期使用 lsof 或 fuser 检查对该驱动器/分区的访问权限。

答案4

你应该能够使用Linux 审计在驱动器的挂载点上添加监视,然后在事件发生后使用 ausearch 监视日志以找出读取或写入的文件(如果有)以及执行该操作的进程,审计可以监视任何文件系统上的读取、写入、执行和属性更改(只要您的系统支持它 - 它应该是)。

相关内容