PC, 自宅サーバー

不良セクタの直し方

直前のエントリーに書いたように、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 bytes

Device 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に戻った。実にさわやかな気分である。このディスクはスペアとして置いておいて次にアレイのディスクで障害が起きたら交換することにしよう。本当はパソコンに入れておいてホットスペアとして自動で切り替わるようにしたいのだが、もうドライブベイがないのでホットスペアは断念する。

similar posts

comment

よろしければ、コメントをどうぞ。トラックバックはこちら

このエントリーのコメントの購読

次の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="">

*Required Fields