我正在寻找一些可以logging非系统磁盘唤醒时间的小脚本或应用程序。
我无法确定哪个应用程序或脚本唤醒了我的非系统驱动器(在我使用它之前必须睡着)。 我已经设置了noatime标志,试图使用powertop和iotop来确定哪个应用程序可以阻止它进入睡眠 – 但没有结果。
所以我的计划是设置这个驱动器睡着(hdparm -Y),看看它在什么时候定期醒来。
感谢您的任何build议。
为了找出哪些文件正在被访问(这可能有助于缩小负责的进程),你可以尝试使用inotifywatch ,它可以设置recursion观察目录下的目录。 请务必阅读手册页中关于在大型树上使用--recursive的警告。
当一个文件系统事件发生在那个树的一个目录中时,它被logging并输出到一个表中。 您可以使用--timeout来限制手表处于活动状态的时间。
如果结果一致,则可以对该目录中的文件运行非recursion监视来缩小特定文件的范围。
您可以使用hdparm -C随时获取磁盘的电源模式状态。 这是一个能给你时间的脚本:
while true; do state=`hdparm -C /dev/sda|grep "^ drive"|cut -c 19-` echo `date` $state sleep 1 done
用sudo运行脚本,因为hdparm需要root权限。 你可以将echoredirect到某个文件,例如:
echo `date` $state >> /tmp/sda_state
当然,更改你正在监视的磁盘(我使用/dev/sda )到你想要的和sleep间隔,比如sleep 120 ,每两分钟查询一次。
但是,这并不能给你唤醒驱动器的过程。
由于一些错误,您可能会遇到上述问题:
如果您在使用hdparm -C时遇到问题,请尝试以下操作:
smartctl -i -n standby /dev/sda|grep "^Power mode"
按照man smartctl ,在-n standby运行时, smartctl不应该唤醒驱动器。 注意这里也有一些错误:
所以试着看看它是否工作。
看到这个Ubuntu的错误报告 ,如何跟踪(和一个可能的原因)。
简短的回答: auditctl -w /dev/sdX -p rwa和udisks
我不能回答你的问题,但我想指出一个可能很有趣的细节:几个sata hdd有一个跳线来设置它们在默认情况下处于睡眠状态(控制器必须发送一个sata命令来唤醒磁盘。 [并非所有的控制器都可以这样做])。
跳线已经设置好了吗?
坝
在Linux上,您可以使用新的fatrace实用程序,该实用程序logging每个文件的访问权限,并告诉您哪个进程负责:
更多信息在这里:
http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/
它使用自linux kernel 2.6.37以来的Linux fanotify API ( 更多细节 )。
fatrace截至2014年7月没有被大多数发行版包装(最近进入debiantesting,因此应该在'jessie'中发布),但是易于从源代码安装。