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


10

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

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

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

回答:


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でもうまく動作します。ありがとうございました!
Jakob

これにより、/ etc / hdparm.confに変更が加えられなくなりますか?
domih

@domih:私の知る限り、hdparm.confはDebianのものであり、Fedoraではサポートされていません。
Krzysztof Adamski

6

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

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


1
creating your own systemd serviceもっと具体的にできますか?/etc/rc.d/rc.localファイルがありません。
ピート

1
systemdにドキュメントが systemdにサービスユニットの構文を説明しています。/etc/rc.d/rc.localファイルには、単にシェルスクリプトは、それを作成し、必ずその実行可能にしています。
jsbillings 2013年

3

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"

これは、ラップトップが接続されているときと接続されていないときにそれぞれ設定さapmれます。また、一時停止から再開した後でも、常に機能するはずです。254128


1
そのままコピーするのが好きな人のために、新しいリリースにはhdparm/usr/sbinあるので、パスを調整してください。
ローマ

2

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

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

これは単に12秒ごとにドライブにアクセスしませんか?私はその線に沿って何かを考えましたが、ドッキングを解除したときにある程度の睡眠が欲しいです。
ピート

5分ごと。システムの電源状態をチェックするラッパースクリプトを記述できます。
Hauke Laging 2013年

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.