引导和恢复后如何在Fedora 19上运行hdparm命令?


10

我购买了新的HD(WD5000BPVT),不幸的是,它每5-8秒尝试睡眠一次。不仅可以听到喀哒声,而且1秒的旋转时间在日常使用中会增加非常明显的延迟。

我发现hdparm -B 254 /dev/sda它将禁用非常短暂的睡眠,但是我不知道每次驱动器开机时如何执行此设置。在dconf-editor和“电源管理首选项”应用程序都这样做没什么关于HD的设置。我没有任何/etc/hdparm/etc/acpi路径。MATE是窗口管理器。

在Fedora 19上,如何在驱动器激活时强制执行此命令?

Answers:


12

我遇到了同样的问题,这里的解决方案都不符合我的需求。使用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

在Fedora 20上也可以很好地工作。谢谢!
雅各布2014年

因此,这会使对/etc/hdparm.conf的更改过时吗?
domih

@domih:据我所知hdparm.conf是Debian的事情,Fedora不支持它。
Krzysztof Adamski

6

通过创建自己的systemd服务或将命令添加到/etc/rc.d/rc.local,可以使系统在引导过程中运行命令。

如果希望在睡眠/休眠后每次唤醒系统时运行该命令,则可以在/etc/pm/sleep.d/中添加一个以2位数字开头的脚本,请查看/ usr / lib64 /中的其他脚本。 pm-utils / sleep.d(假设x86_64)了解更多信息。基本上,它根据进入的状态采用一个参数。如果要使用与插入时相比不同的电池电源操作,则可能还需要在同一父目录中的power.d /中添加一些登录名。


1
creating your own systemd service你可以说得更详细点吗?我没有/etc/rc.d/rc.local文件。
皮特2013年

1
systemd文档解释了systemd服务单元的语法。该/etc/rc.d/rc.local文件只是一个shell脚本,请创建该文件并确保其可执行文件。
jsbillings

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"

这将设置apm254当笔记本电脑插上电源并分别128拔掉电源插头。另外,即使从挂起状态恢复后,它也应始终有效。


1
对于那些谁喜欢逐字复制,新版本拥有hdparm/usr/sbin,所以调整的路径。
罗马,

2

我有相同的磁盘(和相同的问题)。我愚蠢但可行的解决方案:我已将其放入/etc/crontab

-*/5  * * * *   root  hdparm -B 254 /dev/sda

这不是每12秒访问一次驱动器吗?我考虑过类似的事情,但是在断开连接时,我有点想睡觉。
皮特

每五分钟一班。您可以编写一个包装器脚本来检查系统的电源状态。
Hauke Laging

1

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.