hdparm
関連記事
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
ライトキャッシュ
ライトキャッシングとは、ファイルをディスクに書き込む前に、ドライブの組み込みメモリに一時的にキャッシュする処理のことです。基本的にパフォーマンスが向上します。ライトキャッシュは、ほとんどのハードドライブで提供されている機能で、ほとんどの場合、デフォルトで有効化されています。確認するには以下を実行してください:
$ hdparm -W /dev/sdX
無効化されている場合、以下で有効化できます:
$ hdparm -W 1 /dev/sdX
逆に無効化するには以下を使用します:
$ hdparm -W 0 /dev/sdX
ヒントとテクニック
ハードドライブを起動させずに状態を確認する
hdparm で問い合わせオプションを使うとドライブが立ち上がってしまうことがあります。smartmontools の smartctl を使うことで休眠状態のディスクを起こさずに状態を確認できます。
例:
# smartctl -i -n standby /dev/sda smartctl 6.5 2016-05-07 r4318 [x86_64-linux-4.10.13-1-ARCH] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org Device is in STANDBY mode, exit(2)
サポートされていないハードウェアを使用する
一部のドライブ (特に外付けのドライブ) は hdparm によるスピンダウンに対応していません。その場合、以下のようなエラーメッセージが表示されます:
# hdparm -S 240 /dev/sda /dev/sda: setting standby to 240 (20 minutes) HDIO_DRIVE_CMD(setidle) failed: Invalid argument
未対応のドライブは hd-idle を使ってスピンダウンできる場合があります。/etc/conf.d/hd-idle
を開いて "HD_IDLE_OPTS" 行を編集してから hd-idle.service
を起動・有効化してください。
例えば sda ドライブのスピンダウンタイムを30分間にするには:
HD_IDLE_OPTS="-i 0 -a sda -i 1800"
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
サービスを作成したら有効化してください。
WD Green HDD の電源管理
Advanced Format#WD Green HDD に関する特記事項を見てください。
トラブルシューティング
サスペンド後に 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
もしくは/usr/lib/systemd/system-sleep にフックを作成する方法もあります。
参照
- https://sourceforge.net/projects/hdparm/ - hdparm on SourceForge