我是NAS的所有者,运行一些Linux发行版。它带有一个Web管理前端,在这里我可以管理多种服务,用户权限以及何时进入睡眠状态。我的问题是,由于某种原因,当NAS进入睡眠状态后,硬盘驱动器将在几分钟后再次打开。然后它将旋转一段时间,然后再次入睡。这一直持续下去。
我该如何确定原因呢?我对Linux非常陌生,但是我设法获得了root访问权限,并且现在有了SSH连接。
我是NAS的所有者,运行一些Linux发行版。它带有一个Web管理前端,在这里我可以管理多种服务,用户权限以及何时进入睡眠状态。我的问题是,由于某种原因,当NAS进入睡眠状态后,硬盘驱动器将在几分钟后再次打开。然后它将旋转一段时间,然后再次入睡。这一直持续下去。
我该如何确定原因呢?我对Linux非常陌生,但是我设法获得了root访问权限,并且现在有了SSH连接。
Answers:
inotify-tools是执行此操作的简单方法。他们的站点上有几个示例可以满足您的要求(有关基本示例,请参见inotifywatch示例)。
尝试跑步iotop
?我发现它过去很有用。
另一个技巧:使用Systemtap,systemtap网站上有许多探测脚本,足以找到罪魁祸首。
在另一种情况下,
如果要找出导致磁盘旋转的进程,可以通过设置标志来收集信息/proc/sys/vm/block_dump
。设置此标志后,Linux将报告发生的所有磁盘读写操作,以及对文件所做的所有块弄脏。这样就可以调试为什么磁盘需要旋转,并可以延长电池寿命。block_dump的输出将写入内核输出,并且可以使用“ dmesg”来检索它,或者查看您的syslog kern工具以获取调试消息的目的地。通常,应该为/var/log/debug
。当您使用block_dump并且内核日志记录级别还包括内核调试消息时,您可能希望关闭klogd,否则将记录block_dump的输出,从而导致磁盘活动通常不存在。
您需要告诉内核通知您对磁盘的所有读/写操作,然后您需要查看该信息。
所以:
# sync
# echo 1 > /proc/sys/vm/block_dump
# dmesg -c | grep '/dev/sda'
sync
将所有未完成的写入刷新到磁盘,以便您仅看到新的读取或写入。
dmesg -c
显示内核消息并清除它们(否则,每次运行dmesg时,您也会看到旧消息)。
grep
过滤dmesg的输出以查找您感兴趣的磁盘的活动。用实际设备替换/ dev / sda。
我通常使用类似的方法来降低磁盘的速度,然后检查其何时再次旋转:
# sync
# hdparm -y /dev/sda
# while true; do hdparm -C /dev/sda ; sleep 600 ; done
的while
循环检查磁盘活性/空闲状态每次10分钟。当您看到它启动时,运行dmesg
上面的行以查看whodunnit。