我试图让我的硬盘在启动后旋转,因为我只是偶尔使用它进行备份和长期存储。我运行的是 Ubuntu 17.10。
我已经搜索了一段时间,发现我可以编辑 hdparm.conf 文件以包含以下内容:
command_line {
sudo hdparm -S 1 /dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H
}
我还尝试了它的各种变体,带有缩进,没有“command_line”选项,而是直接完成了:
/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H {
spindown_time 1
}
到目前为止,这些都没有奏效。 我已禁用驱动器的“启动时安装”选项。
最令我困惑的是,当我跑步时
sudo hdparm -S 1 /dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H
磁盘将在 5 秒后旋转,就像它应该做的那样。
那么,是否有可能在启动时不应用 hdparm-conf 设置,如果是,我该如何修复它?
Ubuntu 20.04 LTS 有一个错误,导致命令行参数无法正确返回。 修复方法是将 hdparm_options()
中
/usr/lib/hdparm/hdparm-functions
函数的末尾更改为:
if [ -n "$OPTIONS" ]; then
echo $OPTIONS
return 0
elif [ -n "$DEFAULT" ]; then
echo $DEFAULT
return 0
fi
详情/usr/lib/hdparm/hdparm-functions
中存在一个错误,
/usr/lib/udev/hdparm
用于解析
/etc/hdparm.conf
。
udev/hdparm
脚本调用
hdparm_options()
中的
hdparm/hdparm-functions
来解析配置文件,并期望将生成的命令行参数打印到 stdout。但是,
hdparm_options()
永远不会写入标准输出,除非在配置文件中找不到请求的磁盘,在这种情况下,它会回显默认命令行参数。
/lib/hdparm 中的任意脚本会完全基于是否覆盖某些设置(-S 和 -B)设备使用主电源或电池供电。 您需要更改 hdparm-functions 脚本来防止这种情况。
不确定是否可以省略
=
,尝试:
/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H {
spindown_time = 1
}
请注意,即使在注释中,您也可以使用缩进,所以这也应该没问题:
/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H {
# Sleep after 5 sec (unit = 5 sec)
spindown_time = 1
}
要检查它是否已运行,请查看是否可以在
sudo journalctl -u systemd-udevd
中找到有关 hdparm 的任何内容。您可以尝试的另一件事是检查
hdparm -B /dev/yourdisk
,如果不支持,请尝试添加
apm =
;没错,留空。此 hack 导致它调用
hdparm -B ...
而不是默认的
hdparm -B254 ...
。如果添加
=
无法修复问题,您可以通过编辑
/lib/udev/hdparm
来调试问题(先复制它,以便稍后恢复原始版本)。将部分输出重定向到
>> ~root/hdparm.log 2>&1
,并特别添加回显以查看每个
$OPTIONS
使用的
$DEVNAME
。
/lib/udev/hdparm
是 udev 运行的脚本,可能是在它发现新设备时运行的。它是异步执行的,因此如果您要重新启动并且有多个磁盘,日志消息可能会相互“中断”。您无需重新启动即可测试,尝试一下
DEVNAME=/dev/...YOURDISK sudo /lib/udev/hdparm
。
https://bugs.launchpad.net/ubuntu/+source/hdparm/+bug/515023
具体来说,我必须在 /lib/hdparm/hdparm-functions 中编辑 hdparm_try_apm() :
hdparm_try_apm()
{
return 0
...
这不是一个很好的解决办法,非常脆弱(实际上这整件事对我来说似乎有点脆弱!)相反,我会尝试 udev 脚本
请参阅:
https://unix.stackexchange.com/questions/28548/how-to-run-custom-scripts-upon-usb-device-plug-in
此外,我注意到以下几点:
apm)
if ! hdparm_is_on_battery; then
hdparm_set_option -B$VALUE
fi
;;
apm_battery)
if hdparm_is_on_battery; then
hdparm_set_option -B$VALUE
fi
所以请确保这不会让您困惑,IE,您可能还想设置“apm_battery”。
hdparm -B /dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H
查看APM(高级电源管理)是如何配置的。根据手册页(请参阅-B
参数的描述),较低的值允许更积极的电源管理,而较高的值对应于更高的性能。值 128 到 254 不允许降速。在我的机器上,该值默认为 254。以下配置应确保您的磁盘在 5 秒后停止旋转:
/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H {
apm = 1
spindown_time = 1
}
/usr/lib/hdparm/hdparm-functions
中存在一个错误,它无法正确处理像
/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H
这样的磁盘名称。解决方案是使用常规磁盘名称,例如
/dev/sda
。但这并不理想,因为磁盘名称可能会更改。
/usr/lib/hdparm/hdparm-functions
的解决方法也修复了“Raspberry Pi OS”(Debian 12)上的问题。有什么想法,需要做什么,以便有一天可以在上游解决这个问题?