我有一个 24/7 全天候运行的基于 Debian Jessie 的无头家庭服务器,它有一个大的 1TB SSD 用于操作系统和我所有经常访问的文件。同样的系统在一个 SnapRAID 阵列中有 4 个更大的硬盘驱动器。这些主要用于存档不常访问的蓝光,并希望这些驱动器在待机状态下保持转速下降,除非我真正读取或写入它们。它们都被格式化为 ext4 并在启用 noatime 和 nodiratime 的情况下安装。
因此,即使没有进程或程序应该以任何直接方式定期访问这些驱动器,硬盘驱动器也会不断从待机状态启动。它似乎与提供 gui 文件浏览器的图形程序有关,甚至与 Chromium 类似。如果我什至不浏览这些驱动器,我认为这些过程只需获取可用驱动器的列表即可启动硬盘。很像blkid。问题是,很难确定其根本原因,因为这些进程实际上都没有在这些驱动器上读取或写入文件系统,因此实际上没有文件正在更改或被触及。是否有某种我可以填充的缓存或缓冲区来防止这些程序仅通过获取可用磁盘列表来启动硬盘驱动器?老实说,这让我发疯了,因为即使没有直接访问文件系统,我也找不到一种可靠的方法来保持这些磁盘的转速下降。
更新:感谢斯蒂芬的回答,我能够将磁盘活动跟踪到gvfs和udisks。当这些进程实际上没有被访问以对文件系统进行任何真正的 I/O 时,这些进程坚持唤醒处于待机状态的磁盘,这真是令人遗憾。到目前为止,我只是卸载了它们,知道它会从 PCManFM 等中删除一些功能。
您可以使用blktrace(在 Debian 中可用)来跟踪给定设备的所有活动;例如
sudo blktrace -d /dev/sda -o - | blkparse -i -
Run Code Online (Sandbox Code Playgroud)
要不就
sudo btrace /dev/sda
Run Code Online (Sandbox Code Playgroud)
将显示 上的所有活动/dev/sda。输出看起来像
8,0 3 51 135.424002054 16857 D WM 167775248 + 8 [kworker/u16:0]
8,0 3 52 135.424011323 16857 I WM 209718336 + 8 [kworker/u16:0]
8,0 3 0 135.424011659 0 m N cfq496A / insert_request
Run Code Online (Sandbox Code Playgroud)
第五列是进程标识符,最后一列在有进程名时给出进程名称。
您还可以存储跟踪以供以后分析;blktrace包括许多分析工具,例如上述blkparse和btt。blktrace是一个非常低级的工具,因此首先找出导致活动的原因可能并不那么容易,但是在包含的文档(查看/usr/share/doc/blktrace您是否安装了 Debian 软件包)和blktrace论文的帮助下,它应该是可能的找出导致旋转的原因。