Linux上でHDDの不良ブロックの確認を行う

投稿者: | 2012年3月5日

ついでなのでHDD関係でもう一つ
badblocksも使うたびに半分忘れてるので書いておきます。
うちでは専ら読み出しのチェックのみで、購入直後とHDDの読み込み動作が怪しいと思ったときに
確認するのに使う程度。(なので忘れる)

#badblocks -sv -c 256 -o bad.log /dev/sdd

詳細はMan Page of BADBLOCKSにて。

上記コマンドで/dev/sddに対して1024byteのブロックを256個ずつ読み込みチェックを行います。
-svは進行状況と詳細表示を出力するオプション。
-o bad.log はbad.logファイルに不良ブロック番号を出力するオプション。
-wオプションで読み書きチェックにもできます。

上記コマンドのようにデバイス全体指定でかけた場合の不良ブロックの出力は
HDDのどのあたりに不良があるかの指標にしかなりません。
これはブロックサイズが合っていないと番号がずれるため。

あとでfsckにわたしたい場合は、パーティション指定にして

#badblocks -sv -c 256 -o bad.log /dev/sdd1

のようにするとパーティションのブロックサイズを見て自動で読み取りブロックサイズを調整してくれるとのことです。

[2012/3/7 訂正]
出力された不良ブロックの情報はfsckにわたすことによりその場所を以降使用しないようにすることが可能。
コマンドは

#fsck -l bad.log /dev/sdd

ファイルシステムのないところにfsckはできませんね…
なので上のコマンドは通常HDDに対しては実行できないはず。
USBメモリ等をパーティションなしで使っている場合には出来るのかもしれませんがわかりません。
fsckを使う場合は、通常以下のようにパーティション指定が必要はなはずです。なので

#fsck -l bad.log /dev/sdd1

ですが、下で引用した通りこの方法は推奨されていないのでfsckから呼び出してもらうのが良いようです。
[訂正ここまで]

個人的にはどこか壊れた時点で使わない方が良いと思っているので、ほとんど使ったことはありません。
 
[2012/3/6 追記]
このfsckにわたすような使い方をする場合、ファイルシステムに合わせて正しいブロックサイズを指定していないと
badblocksを使ってログをはいた物は役に立たなさそうです。manにあるとおり

重要な注意: badblocks の出力を e2fsck や mke2fs といったプログラムに与える場合には、 ブロックサイズを正しく指定することが大切である。 生成されたブロック番号は、ファイルシステムにおいて、 どのようなブロックサイズを用いるかに大きく依存するからである。 このため、 badblocks を直接ユーザが利用することはできるだけ避けるほうがよい。 代わりに e2fsck や mke2fs の -c オプションを用いるようにすることを強く勧める。

ということで

#fsck -c /dev/sdd1

のようにしてパーティション指定でfsckから呼び出してもらった方が良いとのことです。
[追記ここまで]
 
先日久しぶりにSATA2接続の2TBのドライブ(WD20EARS)にかけましたが、
問題は発見されずかかった時間は6時間程度でした。
不良ブロックがあるとかなり伸びます。

#あとから調べなおしたら追記と訂正がいっぱいになってしまった…

Linux上でHDDの不良ブロックの確認を行う」への2件のフィードバック

  1. ピンバック: Linux上でHDDの不良ブロックの確認を行う – 記録 | WordBuff.in

  2. ピンバック: Ubuntu 12.04が readonly になってしまった | chatii-log

コメントを残す

メールアドレスが公開されることはありません。