hdparm(8) ハードディスクのパラメータを設定・取得する

書式

hdparm [ flags ] [device] ..

説明

[訳注: 原文はオプションが増えるたびにその部分だけ加筆されているらしく、 「現代の」という語の起点となる『現在』が古かったり新しかったりするが、 基本的にはすべてやや古い話である。hdparm による操作は多大な影響を及ぼ すので、他の情報源も参照して慎重に利用すること(2005年3月)]

hdparm は標準的な Linux の ATA/IDE デバイスドライバでサポートされる 色々なハードディスクの ioctl への、コマンドラインインタフェースを提供する。 いくつかのオプションは、最新のカーネルでしか正しく動作しない。 最良の結果を得たいなら、最新のカーネルソースのインクルードファイルを使って hdparm をコンパイルすること。

オプション

何のフラグも指定されていない場合には -acdgkmnru が指定されたとみなす。
-a
ファイルシステムの先読みセクタ数を取得・設定する。 実行中のタスクから必要となる追加のブロックを予想、プリフェッチすることで、 大きなファイルのシーケンシャル読み出しの性能を改善するのに用いられる。 現在のカーネルバージョン(2.0.10)では、デフォルトは 8 セクタ(4KB)である。 このデフォルト値は多くの場合は問題ないが、多くのファイルがランダムアクセス であるようなシステムでは、もっと小さな設定の方が良い性能を出すだろう。 また多くの IDE ドライブでは先読み機構を内蔵しており、 これは多くの場合、ファイルシステムでの先読みの代わりとなる。
-A
IDE ドライブの先読み機能を無効・有効にする(普通は ON がデフォルト)。 使い方: -A0 (無効にする)または -A1 (有効にする)。
-b
バスの状態を取得・設定する。
-B
ドライバがサポートしていれば、APM(advanced Power Management) 機能を設定する。 低い値は積極的な電源管理を意味し、高い値はパフォーマンス優先を意味する。 255 という値は、そのドライブでの APM を無効にする。
-c
(E)IDE の 32 ビット I/O サポートを取得・設定する。 32 ビット I/O サポートを有効・無効にするには、以下の数値が用いられる。

0
32 ビット I/O サポートを無効にする
1
32 ビットデータ転送を有効にする
3
多くのチップセットで必要とされる、特別な sync シーケンスを使った 32 ビットデータ転送を有効にする

ほぼ全ての 32 ビット IDE チップセットで 3 は有効であるが、ほんの少しだけオーバーヘッドがある。 "32 ビット" とは、PCI または VLB バスとインタフェースカードとの間の データ転送についてである。 すべての (E)IDE ドライブは、いまだにインタフェースからリボンケーブルを通る 16 ビット接続しか持たない。
-C
現在の IDE 電源モード状況を調べる。 これは必ず、 unkown (ドライブはこのコマンドをサポートしない)、 active/idel (通常の動作)、 standby (低電力モード、ドライブはスピンダウンしている)、 sleeping (最小電力モード、ドライブは完全に停止している) のうちのいずれかである。 フラグ -S, -y, -Y, -Z は IDE 電源モードを操作するのに用いられる。
-d
ドライブの "using_dma" フラグを無効/有効にする。 現在このオプションは、ドライブと DMA をサポートした (カーネルの IDE ドライバが認識する)PCI インタフェース とのほとんどの組み合わせで動作する。 正しい DMA モードがドライブ自身にプログラムされることを 確実にするために、 -d1 オプションと共に適切な -X オプションを使用するのはよい考えである。 ただし、これは多くの BIOS が起動時に実行してくれることである。 DMA の使用は、ほとんどいつでも、高速な I/O スループットと 低い CPU 使用率によって、最高のパフォーマンスを提供してくれる。 しかし、少なくともいくつかのチップセットとドライブの設定では、 DMA が大きな違いを見せず、(本当に間違ったハードウェア上では) 遅くなることもある。 効果は様々である。
-D
ドライブ上の不良セクタ管理機能を有効/無効にする。 有効にすると、ドライブのファームウェアは、不良セクタを 工場設定された予約"スペア"領域に自動的に再配置しようと試みる。
-E
CDROM のスピードを設定する。 ドライブはそれ自身で自動的に速度を変更するものなので、 通常の操作では必要ない。 しかし、それで遊びたいなら、2 や 4 といったような数字を オプションの後に指定すること。
-f
終了時に、デバイスのバッファキャッシュを同期、消去する。 この操作は、 -t および -T のタイミングでも実行される。
-g
ドライブのジオメトリ(シリンダ数、ヘッダ数、セクタ数)、 デバイスのサイズ(セクタ数)、デバイスのドライブ先頭からの 開始オフセット(セクタ数)を表示する。
-h
簡単な使用方法(ヘルプ)を表示する。
-i
起動時に 取得した識別情報を表示する。 この機能は、現在の IDE のものであり、古いデバイスではサポート されていないかもしれない。 返されるデータは現在のものかもしれないし、そうでないかもしれない。 どちらになるかは、システム起動後の行動による。 ただし複数セクタモードカウントは、いつでも現在のものが表示される。 識別情報の説明についての詳細は、 AT Attachment Interface for Disk Drives (ANSI ASC X3T9.2 working draft, revision 4a, April 19/93) を参照のこと。
-I
直接ドライブに識別情報を要求する。 結果は、古い -i フラグと比べるとかなり詳細で、新しい拡張されたフォーマットで表示される。
-Istdin
これは -I オプションの特別な "シートベルトなし" の変形で、 /dev/hd* パラメータを使う代わりに、標準入力から ドライブ識別ブロックを受け付ける。 このブロックのフォーマットは、 /proc/ide/*/hd*/identify "ファイル" から得られるものか、 次に示す -Istdout オプションが生成するものと 正確に 同じものでなければならない。 この変形版は、ドライブ識別情報の "ライブラリ" 集合と共に 使用するよう設計されており、また標準メカニズムでは メディアエラーになってしまう ATAPI ドライブに使用することもできる。
-Istdout
単純に、識別データを標準出力に 16進でダンプする。 フォーマットは /proc/ から得られるものに似ており、 後で -Istdin オプションを使うのに適している。
-k
ドライブの keep_settings_over_reset フラグを取得・設定する。 このフラグがセットされた場合、ドライブは (エラー回復手順の間に実行される)ソフトリセット後も -dmu オプションを保持しようとする。 このフラグはデフォルトではオフになっている。 なぜなら、-dmu の組み合わせが原因で発生する、 ドライブのリセットループを避けるためである。 したがって、選んだ設定の組み合わせでシステムが 正しく動作するという確信を持てる場合にのみ -k フラグを設定すべきである。 実際には、(-k オプションを使う前に) 設定のテストとして 通常行っておくべきことは、ドライブに読み書きできるか、 その処理中に (カーネルの) エラーログが生成されていないかを 確認することくらいである。
-K
ドライブの keep_settings_over_reset フラグを取得、設定する。 このフラグがセットされた場合、ドライブは (エラー回復手順の間に実行される)ソフトリセット後も -APSWXZ オプションを保持しようとする。 すべてのドライブがこの機能をサポートするわけではない。
-L
ドライブのドアロックフラグを設定する。 これを 1 にセットすると、ある種のリムーバブルなドライブ (例えば Syquest, ZIP Jazz など)でドア機構をロックし、 0 にセットするとドア機構のロックを解除する。 普通、Linux はドライブの使用 (ファイルシステムがマウントされている時にはいつもロックする) に応じてドアロック機構を自動的に維持しようとする。 しかしルートパーティションがリムーバルディスク上にある場合には、 ルートパーティションはシャットダウン後も(リードオンリーで) マウントされたままなので、この仕組みはシャットダウン時には 迷惑なものになる。 よって、ルートファイルシステムがリードオンリーで再マウントされた 後に このコマンドを使ってドアロックを解除すれば、シャットダウン後に カートリッジをドライブから取り出すことができる。
-m
ドライブの複数セクタ I/O のセクタ数を取得・設定する。 0 に設定すると、この機能を無効にする。複数セクタモード (これは IDE ブロックモードとしても知られる)は現在のほとんどの IDEハードドライブが持つ機能で、一つの I/O 割り込みで一つのセクタではなく、 一つの I/O 割り込みで複数のセクタの転送を可能にする。 この機能を有効にすると、典型的には、ディスク I/O に対する オペレーティングシステムのオーバーヘッドを 30% から 50% 減らす。 また、多くのシステムではデータのスループットを 5% から 50% 向上させる。 しかしいくつかのドライブ(特に WD Caviar シリーズ)では、 複数セクタモードを有効にすると遅くなるように見える。 効果は様々である。 多くのドライブでは、最低限の設定である 2, 4, 8, 16(セクタ)をサポート する。ドライブによるが、さらに大きな設定も可能かもしれない。 多くのシステムでは、16 または 32 が最適のようである。 多くの Western Digital のドライブでは、その小さなドライブバッファ(32kB)と 最適化されていないバッファアルゴリズムのせいで、 4 から 8 という小さな値が推奨されている。 ドライブの最大値を見つけるのには、 -i フラグが使用できる(出力の MaxMultSect を参照のこと)。 あるドライブでは、複数モードをサポートしていると主張するものの、 設定によってはデータを失ってしまう。 まれな状況の下では、そのような失敗は 大量のファイルシステムの不正 を生む結果となる。
-M
自動音響管理(Automatic Acoustic Management; AAM)を取得・設定する。 現在のほとんどのハードディスクドライブは動作音を低減させるために ヘッド動作をスピードダウンさせる能力を持つ。 指定可能な値は 0 から 254 である。 128 が最も静かで(よって最も遅く)、254 が最も速い(そして最もうるさい)。 あるドライブでは(静音・高速の) 2 つのレベルしか持たないが、 他のものは 128 から 254 の間で異なるレベルを持つ。 この機能は実験的なもので、あまりよくはテストされていない。 自己責任で使用すること。
-n
ドライブの "ignore write errors" フラグを設定・取得する。 ドライバーのソースコードを把握することなしに、このフラグで遊ばないこと。
-p
指定した PIO モードに IDE チップセットインタフェースを再プログラムする よう試みるか、またはドライブがサポートする "最良の" PIO モードに 自動設定しようと試みる。 この機能は少数の "知られた" チップセットでのみカーネルで サポートされており、そのサポートもよくて不確実なものである。 ある IDE チップセットでは、一つのドライブに対して PIO モードを 変更することができず、その場合は、このフラグは 両方の ドライブに設定される。 多くの IDE チップセットがサポートするモードは、標準の 6 個(0 から 5)の PIO モードより多かったり少なかったりするので、実際に実装されている 正確な速度設定は、チップセット・ドライバの性格によって様々である。 最大の注意を払って使用すること! この機能は不注意からは何も守ってくれず、また実行の失敗は 深刻なファイルシステムの不正 をもたらすであろう。
-P
ドライブ内部のプリフェッチ機構の、最大セクタ数を設定する。 すべてのドライブがこの機能をサポートするわけではない。
-q
その次に来るフラグに対し、通常の出力を抑止する。 システム起動スクリプトから実行するときに、画面が混乱するのを減らすのに 便利である。 -i, -v, -t, -T フラグには適用できない。
-Q
タグ付きキューの深さを設定する(1以上)、 またはタグ付きキューを無効にする(0)。 これは 2.5.xx(以降)のカーネルで動作し、またこれを現在サポートしている 少数のドライブで動作する。
-r
デバイスのリードオンリーフラグを設定・取得する。 フラグをセットすると、Linux はデバイスへの書き込み操作を許可しない。
-R
IDE インタフェースを登録する。 危険である。 さらなる情報につては -U オプションを参照のこと。
-S
ドライブのスタンバイ(スピンダウン)タイムアウトを設定する。 電力を節約するためにスピンドルモーターを停止するまでに、 どれだけ長く(ディスク動作のない状態を)待つかを ドライブが決定するのにこの値が使用される。 そのような状況下では、次のディスクアクセスには 30 秒以内に反応するはずだ。 ほとんどのドライブはもっと速く反応する。 タイムアウト値の符号化はちょっと変わっている。

値 0 は "タイムアウトは無効" を意味し、スタンバイモードに自動的には 移行しない。
値が 1 から 240 の場合は、5 秒の倍数の指定になり、 タイムアウトは 5 秒から 20 分になる。
値 241 から 251 は、30 分単位の 1 から 11 の指定になり、 タイムアウトは 30 分から 5.5 時間になる。
値 252 は 21 分を意味する。
値 253 はベンダ定義のタイムアウトで、8 分から 12 時間の間のいずれかである。
値 254 は予約されている。
値 255 は、21 分 15 秒を意味する。

いくつかの古いドライブでは、これらの値に対して全く異なる解釈をするので 注意して欲しい。

-T
ベンチマーク及び比較目的で、キャッシュ読み込みを測定する。 有意な結果を得るためには、少なくとも数メガバイトの空きメモリがあり、 他にアクティブなプロセスがない状態で、この操作を 2, 3 回 繰り返すべきである。 これは、ディスクアクセスなしに、Linux のバッファキャッシュから直接 読み出す速度を表示する。 これは、テスト環境下でのプロセッサ・キャッシュ・メモリの 基本的な処理能力を測定するものである。 -t フラグが同時に指定された場合には、 -T の出力を元にした補正係数が -t 操作の結果に加味される。
-t
ベンチマーク及び比較目的で、デバイス読み込みを測定する。 有意な結果を得るためには、少なくとも数メガバイトの空きメモリがあり、 他にアクティブなプロセスがない状態で、この操作を 2, 3 回 繰り返すべきである。 これはデータのキャッシュがない状態から、バッファキャッシュを通して ディスクを読み出す速度を表示する。 これは、ファイルシステムのオーバーヘッドなしに、そのドライブが Linux で どれだけ連続データ読み込み速度を維持できるかを測定するものである。 測定の正確さを上げたいのであれば、 -t の実行の間に BLKFLSBUF ioctl を使ってバッファキャッシュをクリアする。 -T フラグが同時に指定された場合には、 -T の出力を元にした補正係数が -t 操作の結果に加味される。
-u
ドライブの割り込み許可フラグを取得・設定する。 1 に設定すると、ディスク割り込み処理中に他の割り込みのマスクを (ドライバーが)外すことを許可する。 これは Linux の反応を大いに改善し、"serial port overrun" エラーを 出なくなるようにする。 あるドライブとコントローラーの組み合わせでは、この機能を有効にしたときに I/O 遅延の増加を許容せず、その結果 大量のファイルシステムの不正 を引き起こす。 よって、この機能は注意して使用すること。 特に CMD-640BRZ10000 (E)IDE インタフェースは(ハードウェアの欠陥から)では、 このオプションを 2.0.13 カーネル以前のバージョンで使用した場合には 信頼できない。 これらのインタフェースの(通常は BIOS/CMOS の設定にある) IDE プリフェッチ 機能を無効にすれば、それより前のカーネルでこの問題を安全に 避けることができる。
-U
IDE インタフェースを登録から外す。 危険である。 -R オプションの対である。 ホットスワップ用に作られたハードウェア(これは大変珍しい!) に使用することを意図している。 簡単にハングしたり、システムにダメージを与えたりするので、 知識と最大限の注意をもって使用すること。 ThinkPad 600E のウルトラベイでホットスワップするために、 ユーザーから寄贈されたスクリプトが hdparm のソース配布の 'contrib' ディレクトリに含まれている。 自己責任で使用すること。
-v
-i を除くすべての設定を表示する(IDE では -acdgkmnru、SCSI では -gr、 XTで は -adgr に等しい)。 これはまた、フラグが何も指定されなかった場合のデフォルト動作である。
-w
デバイスのリセットを実行する (危険である)。 このオプションを使用し*ない*こと。 混乱したドライブを使用可能な状態へと戻すためにリブートが必要になる ような、あまりない有り得ない状況のために、このオプションはある。
-W
IDE ドライブの書き込みキャッシュ機能取得・設定する (初期状態は製造メーカー・モデルに依存するので、不確定である)。
-x
ホットスワップのためのトライステートデバイス (危険である)。
-X
最近の (E)IDE/ATA ドライブの IDE 転送モードを設定する。 サポートされているインタフェースチップセットにつながったドライブの DMA を有効にする -d1 と共に使用するの普通である。その場合、 -X mdma2 はマルチワード DMA モード 2 転送を選択し、 -X sdma はシンプルモード 1 DMA 転送を選択する。 UltraDMA バースト転送をサポートしているシステムでは、 -X udma2 で UltraDMA mode2 転送を選択する(事前に、チップセットを UltraDMA のために準備する必要がある)。 それはさておき、 現在のほとんど全ての IDE ドライブは、電源投入時にデフォルトで最も速い PIO 転送モードになるので、このフラグの必要性はめったにない。 これでもてあそぶことは、不要で危険なことである。 他の転送モードをサポートするドライブでは、 -X はそのドライブのみ、転送モードを変更する。 データの喪失・不正を避けるために、転送モードの変更する前に IDE インタフェースを新しいモードへとジャンプ、またはプログラム( -p フラグを見よ)すべきである。 最大限の注意をもってこのオプションを使用すること! Linux で使用される PIO (Programmed Input/Output) 転送モードでは、 この値は指定したい PIO モード番号に 8 加えたものである。 よって、値 09 は PIO モード 1、10 は PIO モード 2、 11 は PIO モード 3 を選択する。 設定値 00 はドライブの "デフォルト" PIO モードに戻し、 01 は IORDY を無効にする。 マルチモード DMA では、指定したい DMA モード番号に 32 を足す。 UltraDMA では、指定したい UltraDMA モード番号に 64 を足す。
-y
IDE ドライブをすぐに強制的に低消費電力 スタンバイ モードにする。通常、これはスピンダウンさせる。 現在の電力モード状態は -C フラグで確認できる。
-Y
IDE ドライブをすぐに強制的に最低消費電力 スリープ モードにする。通常、これは完全に停止させる。 ドライブに再びアクセスできるようにするには、 ハードリセットまたはソフトリセットが必要である (Linux の IDE ドライバーは、必要であれば自動的にリセット発行を処理する)。 現在の電力モード状態は -C フラグで確認できる。
-z
指定したデバイス(複数可)のパーティションテーブルを、カーネルに 再読み込みさせる。
-Z
ある種の Seagate ドライブ(ST3xxx モデル?)で、迷惑な時間で アイドル/スピンダウンしてしまうのを避けるため、 自動パワーセーブ機能を無効にする。

バグ

まず既に示した通り、 -m setcount-u 1 オプションは、注意して使用する必要があり、 リードオンリーのファイルシステムでするのが望ましい。 これらの機能はほとんどのドライブでちゃんと動作するが、 いくつかのドライバーとコントローラーの組み合わせは、100% 互換ではない。 その結果は、ファイルシステムの不正である。 実験する前に、すべてをバックアップしておくこと!

古いカーネルでは、必要な ioctl() がサポートされていないために、 いくつかのオプション(例えば SCSI での -r)は動作しない。

このユーティリティは主に (E)IDE ハードディスクデバイスでの使用を 意図してはいるが、いくつかのオプションは SCSI ハードディスクデバイス 及び XT インタフェース上の MFM/RLL ハードディスクでも有効である。

著者

hdparm は Linux の (E)IDE ドライバの初期の開発者でありメンテナーである
 Mark Lord <[email protected]> によって書かれ、 ネット上の多くの「家族」から多くの提案を受けた。

Seagate の無能な自動パワーセーブに対するコードは Tomi Leppikangas([email protected]) の好意によるものである。