Answers:
我遇到了同样的问题,这里的解决方案都不符合我的需求。使用cron实际上是一种解决方法,而不是解决方案,udev规则在连接/断开电源时运行,但在挂起/恢复之后不运行,并且pm-utils
在例如关闭笔记本电脑的盖子时在Fedora 19中默认不再使用。
由于systemd
现在负责挂起/休眠,因此我认为处理这种情况的唯一正确方法是创建一个systemd
在引导后和从挂起中恢复运行的单元。
笔记:
/dev/disk/by-id/...
代替/dev/sda
,您始终可以确保获得正确的磁盘(sda,b,c取决于内核检测到它们的顺序)ExecStart
行,因此可以配置多个磁盘这是我写的单元:
[Unit]
Description=Silence HD
After=suspend.target
[Service]
Type=oneshot
# Disable automatic head parking for the main disk
ExecStart=/sbin/hdparm -B 254 /dev/disk/by-id/ata-ST3250824AS_4N127FD1
# Enable automatic spin down after 30 seconds for the second, infrequently used disk
ExecStart=/sbin/hdparm -S 6 /dev/disk/by-id/ata-ST31000528AS_BVP5H5X1
[Install]
WantedBy=suspend.target basic.target
将该文件另存为/etc/systemd/system/hdsilence.service
,然后使用以下命令启用它:
systemctl enable hdsilence.service
systemctl daemon-reload
通过创建自己的systemd服务或将命令添加到/etc/rc.d/rc.local,可以使系统在引导过程中运行命令。
如果希望在睡眠/休眠后每次唤醒系统时运行该命令,则可以在/etc/pm/sleep.d/中添加一个以2位数字开头的脚本,请查看/ usr / lib64 /中的其他脚本。 pm-utils / sleep.d(假设x86_64)了解更多信息。基本上,它根据进入的状态采用一个参数。如果要使用与插入时相比不同的电池电源操作,则可能还需要在同一父目录中的power.d /中添加一些登录名。
creating your own systemd service
你可以说得更详细点吗?我没有/etc/rc.d/rc.local文件。
/etc/rc.d/rc.local
文件只是一个shell脚本,请创建该文件并确保其可执行文件。
对于使用交流电/电池运行时的不同设置,我可以通过一个简单的udev
规则来完成,例如
/etc/udev/rules.d/98-apmsettings.rules
:
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/hdparm -B 128 /dev/sda"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/hdparm -B 254 /dev/sda"
这将设置apm
到254
当笔记本电脑插上电源并分别128
拔掉电源插头。另外,即使从挂起状态恢复后,它也应始终有效。
hdparm
的/usr/sbin
,所以调整的路径。
我有相同的磁盘(和相同的问题)。我愚蠢但可行的解决方案:我已将其放入/etc/crontab
:
-*/5 * * * * root hdparm -B 254 /dev/sda