hdparm

提供: ArchWiki
移動先: 案内検索

hdparm はハードディスクドライブのハードウェアパラメータを設定・表示することができるコマンドラインユーティリティです。シンプルなベンチマークツールとして使うこともできます。

警告: デフォルトパラメータを変更するとドライブにダメージを与えたりシステムがフリーズする可能性があるので注意してください。

インストール

公式リポジトリから hdparm をインストールします。SCSI デバイスを使っている場合は sdparm をインストールしてください。

使用方法

ディスク情報

HDD の情報を得るには、以下のコマンドを実行します:

# hdparm -I /dev/sda

ベンチマーク

ベンチマーク/データストレージデバイスを見てください。

電源管理の設定

近代的なハードドライブは様々な電源管理機能をサポートしています。以下の表には最もよく使われている機能を載せています。完全なリストは hdparm(8) を見てください。

警告: 電源管理の設定をアグレッシブにしすぎるとスピンダウンやパーキングが頻繁に発生してハードドライブが昇天しやすくなる可能性があります。
パラメータ 説明
-B Advanced Power Management 機能を設定します。利用可能な値は1から255です。値を低くすると積極的に消費電力を下げて、値を高くすると性能が上昇します。1から127までの値ではスピンダウンを行いますが、128から254までの値ではスピンダウンを行いません。255にすると APM 機能が完全に無効化されます。
-S ドライブのスタンバイ (スピンダウン) タイムアウトを設定します。電力を抑えるためにモーターを切るまでのタイムアウト (ディスクが使われないアイドル時間) を指定します。0にするとスピンダウンが無効化され、1から240までは5秒間隔で、241から251までは30分間隔で指定します。
-M Automatic Acoustic Management 機能を設定します。最新のハードディスクドライブに搭載されている機能でヘッドの動きを遅くして騒音を減らします。設定できる値はディスクによって異なり、一部のディスクでは機能が使えません。

現在の値を確認するには、何も値を設定せずにパラメータを指定してください。例:

# hdparm -B /dev/sda

値を適用したい場合、例えば APM を 127 に設定するには:

# hdparm -B 127 /dev/sda

Tips and tricks

udev ルールによる永続的な設定

設定を永続化させるには、以下の udev ルールを作成してください (値は適当に変えてください):

/etc/udev/rules.d/50-hdparm.rules
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 254 -S 0 /dev/sda"

ハードドライブが複数ある場合はもっと柔軟にルールを設定できます。例えば、全ての外付けドライブに省電力設定を適用するには (内蔵ドライブが /dev/sda だけの場合):

/etc/udev/rules.d/50-hdparm.rules
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"

起動後にドライブをスリープ状態にさせる

滅多に使用しないデバイスであれば起動時に直接スリープ状態にすると良いでしょう。上記の udev ルールでは設定できません。起動が完了したときにコマンドを実行するには、systemd サービスを作成します:

/etc/systemd/system/hdparm.service
[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb

[Install]
WantedBy=multi-user.target

サービスを作成したら有効化してください。

トラブルシューティング

サスペンド後に APM のレベルがリセットされる

サスペンドで APM のレベルがリセットされる場合、復帰後にコマンドを再実行する必要があります。以下の systemd ユニットを使うことで自動的に実行させることができます ([1] を参照):

/etc/systemd/system/apm.service
[Unit]
Description=Local system resume actions
After=suspend.target hybrid-sleep.target hibernate.target

[Service]
Type=simple
ExecStart=/usr/bin/hdparm -B 254 /dev/sda

[Install]
WantedBy=sleep.target
ノート: sleep.targetsuspend, hybrid-sleep, hibernate ターゲットから実行されますが、システムがサスペンドする前に起動が完了してしまうため、3つのターゲットを明示的に指定する必要があります。[2] を見てください。

もしくは/usr/lib/systemd/system-sleep にフックを作成する方法もあります。

ドライブがサポートされていない

別の方法を使うか hd-idle ツールを使用してください。