hdparm.conf 设置似乎没有在启动时运行

问题描述 投票:0回答:7

我试图让我的硬盘在启动后旋转,因为我只是偶尔使用它进行备份和长期存储。我运行的是 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 ubuntu-17.10
7个回答
3
投票

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
详情

在 Ubuntu 20.04 LTS 中,

/usr/lib/hdparm/hdparm-functions

 中存在一个错误,
/usr/lib/udev/hdparm
 用于解析 
/etc/hdparm.conf
udev/hdparm
 脚本调用 
hdparm_options()
 中的 
hdparm/hdparm-functions
 来解析配置文件,并期望将生成的命令行参数打印到 stdout。但是,
hdparm_options()
 永远不会写入标准输出,除非在配置文件中找不到请求的磁盘,在这种情况下,它会回显默认命令行参数。


2
投票
这是一篇旧帖子,但 timdiels 的回答帮助我调查了 Slax/Debian 9 上的相同问题。事实证明,

/lib/hdparm 中的任意脚本会完全基于是否覆盖某些设置(-S 和 -B)设备使用主电源或电池供电。 您需要更改 hdparm-functions 脚本来防止这种情况。


1
投票
注意:基于我使用 Debian Stretch (deb9u1) 的经验。这可能并不完全适用于您的发行版。

不确定是否可以省略

=

,尝试:

/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


0
投票
如果您有 USB 磁盘,可能是这样的:

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”。


0
投票
奔跑

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 }
    

0
投票

/usr/lib/hdparm/hdparm-functions

中存在一个错误,它无法正确处理像
/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4ZAL35H
这样的磁盘名称。解决方案是使用常规磁盘名称,例如 
/dev/sda
。但这并不理想,因为磁盘名称可能会更改。


0
投票
发布这个答案,因为我无法以我目前的声誉评论TainToTain的答案: 事实证明,编辑

/usr/lib/hdparm/hdparm-functions

 的解决方法也修复了“Raspberry Pi OS”(Debian 12)上的问题。有什么想法,需要做什么,以便有一天可以在上游解决这个问题?

© www.soinside.com 2019 - 2024. All rights reserved.