非常に積極的な電源管理機能を備えたハードドライブがあります。ロードサイクルが重大なレベルに上昇するのを防ぐために、udevルールを作成しました。
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="TOSHIBA MK2555GS", RUN+="/usr/bin/hdparm -B 200 /dev/%k"
問題は、ノートブックをスリープモードで起動するとルールが実行されないことです。したがって、次のシステムサービスがあります。
[Unit]
Description=root resume actions
After=suspend.target
[Service]
Type=simple
ExecStart=/bin/hdparm -B 200 /dev/sda
[Install]
WantedBy=suspend.target
私はExecStart
コマンドが/bin/udevadm trigger --subsystem-match="block"
。このコマンドを手動で実行すると、電源管理は正しく調整されますが、systemdサービスでは機能しません。これを行う方法はありますか?ところで、私はアーチLinuxを使用しています
答え1
/usr/lib/systemd/systemd-sleep
hdparmを実行するスクリプトを置くことができます。/dev/disk/by-uuid/
代わりにhdparmを使用できます/dev/sda...
または試してみてください/bin/sh -c "/bin/hdparm -B 200 /dev/disk/by-uuid/XY"
答え2
私はほぼ同じ状況にあり、Googleでの有名性systemd udevadm trigger
とそのようなドライブのとんでもないデフォルトを飼いならす方法の一般的な要約のため、この質問に詳細を追加したいと思いました。
私のWestern Digital Blueハードドライブが自慢して非生産的で、反SMARTの健康、パワーを持っていることに気づいたときごみナンセンスはデフォルトで有効になっており、OPとほぼ同じプロセスに従いました。ファームウェア機能を無効にしましたが、次のコマンドを使用してAPMおよびスタンバイ機能も無効にする必要がありましたhdparm
。これら3つがないと、蔓延した負荷サイクルが引き続き発生します。
最初の違いは、デバイスが追加hdparm.rules
(起動)時にのみ呼び出されるように設定されているため、udevadm trigger
指示しないと機能しないことです。どのを追加してアプリケーションを起動します--action=add
。これは、回復中にHDを取り外す/再接続することを効果的にシミュレートします。これがまさに私が必要なものです。
しかし、私はOPのような混乱udevadm trigger
に陥っている理由hdparm rule
。systemd service
- 私たちのシステムでは、ユニットファイルがそれを知らないので、
service
実行可能ファイルの場所を明示的に指定する必要があります。ExecStart /bin/udevadm
$path
- そしておそらく....インストールしましたが、
systemd/user
おそらく私のように実行していたので、root
必要な権限を取得できませんでした/sbin/hdparm
。
(私はDebian 8を実行していますが、これはディストリビューションに限定されていないと思います。)