长话短说Linux下有没有办法知道哪个文件访问导致硬盘旋转?
完整故事我的笔记本电脑有一个 NVME 磁盘,其中包含操作系统和我的主目录,以及一个旋转硬盘,其中包含第二个主目录,我用它来存储不适合 NVME 的批量数据。我相信这是一种常见的安排。
这种布局的好处之一是,当我不处理需要旋转磁盘上的文件的项目时,磁盘本身可以旋转下来,从而节省能源、电池时间、噪音等。这种情况经常发生。
然而,即使我当时所做的事情与存储在那里的数据没有明确的联系,硬盘也会时不时地旋转。它仍然是我所做的操作的结果,而不是 cron 脚本或其他东西的结果,因为它仍然是我做某事(例如打开应用程序)的结果。但是,我看不到打开该应用程序应该产生对旋转磁盘的访问,知道哪个文件应该在那里。所以我想更多地了解发生的事情,这证明了上述问题的合理性。
答案1
编辑一段时间后我发现有一个很好的实用程序叫做fatrace
这使一切变得更容易,因为您不必弄乱服务和设备:只需调用fatrace
,您就会看到所有文件访问的日志。如果您只想查看某个设备,仅查看grep
其安装点,或者将 dir 更改为安装点并使用该-c
标志。
auditd
可用于监控Linux系统调用,并且支持根据涉及的设备进行过滤。以下说明适用于 Debian 系统,但其他系统可能非常相似。
首先安装并启动auditd
:
# apt-get install auditd
# service auditd start
然后找到您要监控的设备的主设备号和次设备号,/dev/sda
在我的例子中:
# ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 feb 17 09:58 /dev/sda
所以8是大调,0是小调。最后,创建并auditd
规则如下:
# auditctl -a always,exit -F devmajor=8 -F devminor=0
现在看看/var/log/audit/audit.log
,所有文件访问都将被记录。这可能有助于找出哪个进程导致硬盘旋转。
该日志可能非常详细,并且可能很快就会填满磁盘。完成后,您可以关闭auditd
:
# service auditd stop