硬盘不会自动待机

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)

触摸挂载点中的某个文件将它唤醒,正如您所期望的那样。

为什么自动挂起不起作用?据我了解,只要没有访问权限,它甚至应该关闭独立于操作系统的硬盘驱动器。

meu*_*euh 7

请注意,即使命令通过,某些驱动器也不会实现此功能。您可能还需要使用 将高级电源管理级别降低到 127 或更低hdparm -B 127 /dev/sda。从手册页:

-B 获取/设置高级电源管理功能...值 1 到 127(允许降速)和值 128 到 254(不允许降速)。

如果一切都失败了,您可以编写一个小脚本来轮询/proc/diskstats/sys/block/sda/stat读取设备上的读/写次数,如果它们在几分钟内没有改变,则明确地将驱动器置于待机状态。请参阅hd-idle实用程序。

  • 使用``hdparm -B 127`` 它可以工作。 (3认同)

mo-*_*han 6

我正在运行 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 standbysmartd 部分会跳过停转的磁盘,但问题是:如果 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)


all*_*llo 5

实际问题是smartd,它会定期检查设备的值,即使它处于待机模式。

我通过不时禁用smartd和运行测试来解决它smartctl