我买了一台新的 HD(WD5000BPVT),不幸的是它每 5-8 秒就会尝试休眠一次。不仅咔嗒声很明显,而且 1 秒的启动时间在日常使用中增加了非常明显的延迟。
我发现hdparm -B 254 /dev/sda
将禁用非常短的睡眠,但我不知道如何在每次驱动器开机时强制执行此设置。和“电源管理首选项”应用dconf-editor
程序均对高清设置不执行任何操作。我没有任何/etc/hdparm
路径/etc/acpi
。 MATE 是窗口管理器。
在 Fedora 19 上,如何在驱动器激活时强制运行此命令?
答案1
我遇到了同样的问题,这里的解决方案都不适合我的需求。使用 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
答案2
您可以通过创建自己的 systemd 服务或将命令添加到 /etc/rc.d/rc.local 来让系统在引导期间运行该命令。
如果您希望每次运行该命令唤醒sleep/hibernate后的系统,可以在/etc/pm/sleep.d/中添加一个以2位数字开头的脚本,查看/usr/lib64/pm-utils/sleep.d中的其他脚本(假设x86_64)更多细节。基本上,它需要一个参数,具体取决于它要进入的状态。如果您想在电池电源上与插入电源时进行不同的操作,您可能还需要在同一父目录中的 power.d/ 中添加一些登录信息。
答案3
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
拔出时。此外,即使从挂起状态恢复后,它也应该始终有效。
答案4
udev 规则在插头事件上运行良好,但为了从挂起恢复后获得正确的行为,我需要这样的东西/etc/pm/sleep.d
:
#!/bin/sh
case "${1}" in
resume|thaw)
if grep -q 1 /sys/class/power_supply/ADP1/online; then
/usr/sbin/hdparm -B 254 /dev/sda
else
/usr/sbin/hdparm -B 128 /dev/sda
fi
;;
esac