直前のエントリーに書いたように、rdiff-backupを使ってバックアップ運用を始めたのだが、普段アクセスしないところをアクセスし始めたためか、不良セクタが出てしまった。 smartctlの結果は次のような感じである。
197 Current_Pending_Sector 0×0012 100 100 000 Old_age Always - 1
198 Offline_Uncorrectable 0×0030 100 100 000 Old_age Offline - 1
このうち、”Current_Pending_Sector”は「アクセスに失敗したけど、代替セクタへの移動がまだのセクターの数」らしい。代替セクターへ割当させるためには、該当するセクタへの書き込みが必要とのこと。仕方ないので、エラーの出たディスクを一旦RAIDのアレイから外して、もう一度アレイに入れて同期を取り直してみた。
すると今度は別のディスクでまた読み込みに失敗して”Current_Pending_Sector”が1つ出てしまった。トホホです。2つ怪しいディスクを抱えてこれ以上作業するのも危険なので、もう一つディスクを発注する。ずっと予備のを買っておいておこうとは思っていたのが、結局問題が起こってから泥縄式に買うはめになってしまった。
さて問題のディスクを新しく買ったディスクと交換して、不良セクタの出たディスクを別のパソコンにつなげてKnoppixで起動する。まずは、不良セクタのアドレスを調べる。次のようなsmartctlコマンドでディスクにテストをさせる。
smartctl -t long -d ata /dev/sda
しばらくすると、次のようなエラーの行がsmartctlの結果に表示される。
SMART Self-test log structure revision number 0
Warning: ATA Specification requires self-test log structure revision number = 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 90% 2021 1953520732
この結果から不良セクタのLBAのアドレスが、1953520732だということが分かる。ちなみにこのディスクのfdisk -luの結果は次の通りで、不良セクタの場所は実際に使っているパーチィションの外であることが分かる。
Disk /dev/sda: 1000.2 GB, 1000203804160 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953523055 sectors
Units = sectors of 1 * 512 = 512 bytesDevice Boot Start End Blocks Id System
/dev/sda1 63 321299 160618+ fd Linux raid autodetect
/dev/sda2 321300 1953520064 976599382+ fd Linux raid autodetect
実際には使用しない領域なので実害はないが、ずっとエラーが出るのも気持ち悪いので以下のコマンドで不良セクタを上書きする。
dd if=/dev/zero of=/dev/sda bs=512 seek=193520732 count=1
すると、”Current_Pending_Sector”が0になった!。でもまだ”Offline_Uncorrectable”が1のままなので、もう一度セルフテストを実行する。
smartctl -t long -d ata /dev/sda
すると無事に、”Offline_Uncorrectable”も0に戻った。実にさわやかな気分である。このディスクはスペアとして置いておいて次にアレイのディスクで障害が起きたら交換することにしよう。本当はパソコンに入れておいてホットスペアとして自動で切り替わるようにしたいのだが、もうドライブベイがないのでホットスペアは断念する。
よろしければ、コメントをどうぞ。トラックバックはこちら
このエントリーのコメントの購読
次のHTMLタグが使えます。: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">