web-dev-qa-db-ja.com

起動後にhdparmコマンドを実行してFedora 19で再開するにはどうすればよいですか?

残念ながら5-8秒ごとにスリープしようとする新しいHD(WD5000BPVT)を購入しました。クリックノイズが非常に聞こえるだけでなく、1秒のスピンアップ時間により、日常の使用において非常に顕著なレイテンシが追加されます。

hdparm -B 254 /dev/sdaは非常に短いスリープを無効にすることがわかりましたが、ドライブの電源がオンになるたびにこの設定を適用する方法がわかりません。 dconf-editorアプリと「Power Management Preferences」アプリは、どちらもHD設定に関して何もしません。 /etc/hdparmまたは/etc/acpiパスがありません。 MATEはウィンドウマネージャです。

Fedora 19では、ドライブがアクティブ化されたときにこのコマンドを強制的に実行するにはどうすればよいですか?

10
Pete

私は同じ問題を抱えていましたが、ここでの解決策はどれも自分のニーズに合いませんでした。 cronの使用は実際には回避策であり、解決策ではありません。udevルールは、電源が接続/切断されたときに実行されますが、一時停止/再開後には実行されません。たとえば、ふたを閉じると、Fedora 19では_pm-utils_がデフォルトで使用されなくなります。ラップトップ。

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
_
12

独自のsystemdサービスを作成するか、コマンドを/etc/rc.d/rc.localに追加することで、システムに起動中にコマンドを実行させることができます。

wakeスリープ/休止状態の後にシステムを実行するたびにコマンドを実行する場合は、2桁で始まるスクリプトを/etc/pm/sleep.d/に追加し、他のスクリプトを確認します。詳細については、/ usr/lib64/pm-utils/sleep.d(x86_64を想定)のスクリプト。基本的に、それはそれが入っている状態に応じてパラメータを取ります。プラグイン時と比べてバッテリー電源で異なる動作をしたい場合は、同じ親ディレクトリのpower.d /にログインを追加する必要があるかもしれません。

6
jsbillings

AC /バッテリーで実行する場合のさまざまな設定については、単純な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に設定されます。また、サスペンドから再開した後でも、常に機能するはずです。

3
don_crissti

私は同じディスク(そして同じ問題)を持っています。私の愚かですが実用的な解決策:私はそれを/etc/crontab

-*/5  * * * *   root  hdparm -B 254 /dev/sda
2
Hauke Laging

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
1
rob