「Hdparm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
46行目: 46行目:
   
 
# hdparm -B 127 /dev/sda
 
# hdparm -B 127 /dev/sda
  +
  +
=== ライトキャッシュ ===
  +
  +
ライトキャッシングとは、ファイルをディスクに書き込む前に、[[Wikipedia:Disk buffer|ドライブの組み込みメモリ]]に一時的にキャッシュする処理のことです。基本的にパフォーマンスが向上します。ライトキャッシュは、ほとんどのハードドライブで提供されている機能で、ほとんどの場合、デフォルトで有効化されています。確認するには以下を実行してください:
  +
  +
$ hdparm -W /dev/''sdX''
  +
  +
{{Warning|ライトキャッシュはタダでパフォーマンスを向上できますが、欠点もあります。ライトキャッシュを有効化すると、電源が突然失われた時のデータ損失のリスクが増加します。}}
  +
  +
無効化されている場合、以下で有効化できます:
  +
  +
$ hdparm -W 1 /dev/''sdX''
  +
  +
逆に無効化するには以下を使用します:
  +
  +
$ hdparm -W 0 /dev/''sdX''
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==

2023年2月5日 (日) 01:07時点における最新版

関連記事

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 で問い合わせオプションを使うとドライブが立ち上がってしまうことがあります。smartmontoolssmartctl を使うことで休眠状態のディスクを起こさずに状態を確認できます。

例:

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

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

参照