我在 ubuntu 19.10 上有一个简单的 udev 规则
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/hdparm -B 127 -S 120 /dev/%k"
我有 2 个可以应用此功能的驱动器
# lsblk -d -o name,rota
NAME ROTA
loop0 0
loop1 0
loop2 0
loop3 0
sda 1
sdb 1
sdc 0
sdd 1
nvme0n1 0
启动后,我检查磁盘
# hdparm -B /dev/sda
/dev/sda:
APM_level = 127
# hdparm -B /dev/sdd
/dev/sdd:
APM_level = 254
#
我不太明白为什么它不应用于/dev/sdd
.我能够从 shell 执行该命令,并且运行/dev/sdd
良好。
还可以通过以下方式触发规则:
udevadm trigger /dev/sdd
正确执行命令。
关于如何调试这个问题有什么想法吗?
附言。/dev/sdb
不支持APM属性,难道udev因为hdparm失败而停止执行?在这种情况下我该如何跳过/dev/sdb
呢?
更新:
在尝试了相当多的时间并制作了一个 shell 脚本来记录它的输出之后,hdparm
它的输出看起来像是hdparm
显示驱动器已更新。但是当我检查驱动器设置时,它们没有被应用!
所以,现在我已经在中设置了设置/etc/hdparm.conf
/dev/sda {
apm = 127
spindown_time = 120
}
/dev/sdb {
spindown_time = 120
}
/dev/sdd {
apm = 127
spindown_time = 120
}
现在所有设置都已应用
也许不如使用规则那么优雅,udev
但它确实有效!