all*_*llo 14 linux power-management hard-disk
我有一个硬盘,它应该在 30 或 60 分钟后自动进入待机状态。
我试过(3分钟测试):
# hdparm -S 36 /dev/sda
/dev/sda:
setting standby to 36 (3 minutes)
Run Code Online (Sandbox Code Playgroud)
它不起作用,即使超过 5 分钟没有访问。现在我想到了一些访问数据的过程,所以我测试了
# hdparm -y /dev/sda
/dev/sda:
issuing standby command
Run Code Online (Sandbox Code Playgroud)
驱动器进入待机状态并保持休眠状态,因为您可以查找
# hdparm -C /dev/sda;date
/dev/sda:
drive state is: standby
Run Code Online (Sandbox Code Playgroud)
触摸挂载点中的某个文件将它唤醒,正如您所期望的那样。
为什么自动挂起不起作用?据我了解,只要没有访问权限,它甚至应该关闭独立于操作系统的硬盘驱动器。
我正在运行 ubuntu 18.04 并且遇到了同样的问题。感谢@allo 的回答,我发现这smartd
确实是原因。
默认情况下,/etc/smartd.conf
配置如下:
DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/martd-runner
Run Code Online (Sandbox Code Playgroud)
这将自动扫描所有驱动器并定期轮询它们(此操作会启动磁盘)(默认为 30 分钟,可更改)。尽管-n standby
smartd 部分会跳过停转的磁盘,但问题是:如果 smartd 轮询间隔比磁盘的“停转后”时间短,那么 smartd 将始终轮询磁盘 BEFORE 它有机会旋转-下来,因此磁盘永远不会进入待机模式。
如果磁盘的“spindown timeout”比 smartd 的轮询间隔短,则磁盘将在 smartd 轮询之前降速,之后 smartd 将跳过该磁盘而不启动它。如果磁盘被其他工具(如 )(手动)降速hd-idle
,那么 smartd 也会跳过它。
更改 smartd 轮询间隔更长的一种方法是在/etc/default/smartmontools
以下内容中编辑此行:
smartd_opts="--interval=1800"
Run Code Online (Sandbox Code Playgroud)
例如,1800 是 30 分钟,使其 10800(3 小时)足够长。并且不要忘记重新启动它们:
DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/martd-runner
Run Code Online (Sandbox Code Playgroud)