2008/02/14(木)Linux の badblocks コマンド
Linuxでディスクエラーをチェックするコマンドbadblocksについて。
fsck
man。ファイルシステムのエラーをチェックするプログラム。ディスクの物理エラーを調べてはくれない。
# fsck /dev/hda1
badblocks
デバイスそのもののエラーをチェックする。
# badblocks -s -v /dev/hda 読み出しテスト # badblocks -s -v -n /dev/hda 非破壊読み書きテスト # badblocks -s -v -w /dev/hda 破壊読み書きテスト
HDDの区画ではなくHDD全体を与えるのがミソ。破壊テストでは「0xaa, 0x55, 0xff, 0x00」を書き込み読み出してテストします。"-s -v"は進捗などを表示する指定。
一度にテストするサイズは -b(ブロックサイズ)と -c(ブロック数)で指定します。
# badblocks -s -v -b 1024 -c 256 /dev/hda 1024*256
マウントされているディスクでは読み出しテストしかできません。シングルユーザーモードでは読み書きテストができるみたいですが。
非破壊読み書き検査について
非破壊読み書き検査は次の手順で行われます。
- ディスクから現在のデータを読み出す
- ディスクにテストパターンを書き込む
- バッファをフラッシュする
- ディスクから読み込み書き込んだテストパターンと比較する
- 最初に読み込んだデータを書き戻す
Linuxカーネルで「O_DIRECT」というフラグが使えれば、2と4では O_DIRECT 用いてディスクと直接やりとりをします(ディスクキャッシュを抑制します)。これは比較的最近のカーネルでないとまともに使えないようです。
CTRL-Cなどで止めると大変なことになるので、プログラム側でCTRL-Cで落ちないように抑制されています。(上に書いたとおりですので、この検査をkillとかで止めると大変なことになります。)
非破壊テストは破壊テスト並のチェックができますが、単純な破壊テストよりもメモリと時間が食います。