ひとりごと

新しい記事:[1408]  古い記事:[1406] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2005/01/29 (土)

・ もうひとつの障害復旧方法

先日不良セクタが発生した為に交換したハードディスクですが、持って帰ってきて遊んでみることにしました。障害発生時というのはよほど日ごろの訓練ができている方はともかく、私のような凡人ではとても冷静に対処などできません。お遊びは後日時間のあるときに限ります(笑)。

さて、これまでの復習ということで、このディスクから起動してエラーセクタを特定してみましょう。

# dd if=/dev/ad0 of=/dev/null bs=64k
ad0: hard error reading fsbn 12000512 of 6000256-6000383 (ad0 bn 12000512; cn11905 tn 4 sn 20) trying PIO mode
ad0: DMA problem fallback to PIO mode
ad0: DMA problem fallback to PIO mode
ad0: DMA problem fallback to PIO mode
ad0: DMA problem fallback to PIO mode
ad0: DMA problem fallback to PIO mode
ad0: DMA problem fallback to PIO mode
ad0: hard error reading fsbn 12000608 of 6000256-6000383 (ad0 bn 12000608; cn 11905 tn 5 sn 53) status=59 error=40
dd: /dev/ad0: Input/ouput error
46877+0 records in
46877+0 records out
3072131072 bytes transfered in 115.956606 secs (26493000 bytes/sec)
6000256-6000383 の間に不良セクタがあります。ということで今度はブロックサイズを512バイトにして絞り込みます。
# dd if=/dev/ad0 of=/dev/null bs=512 iseek=6000256 count=128
ad0: hard error reading fsbn 6000361 (ad0 bn 6000361; cn 5952 tn 11 sn 52) status=59 error=40
dd: /dev/ad0: Input/output error
105+0 records in
105+0 records out
53760 bytes transferred in 5.654332 secs (9508 bytes/sec)
読込みエラーは セクタ番号 6000361 で起こっていることがわかりました。

念のためにもう一度実験。

# dd if=/dev/ad0 of=/dev/null bs=512 iseek=6000361 count=1
ad0: hard error reading fsbn 6000361 (ad0 bn 6000361; cn 5952 tn 11 sn 52) status=59 error=40
dd: /dev/ad0: Input/output error
0+0 records in
0+0 records out
0 bytes transferred in 5.685781 secs (0 bytes/sec)
やはりエラーが起こります。このセクタが死亡しているのは間違いありません。

ところで、最近のATAハードディスクというのは、むかーしのスーパーフロッピー式IDEハードディスクとは異なり、SCSIのようなインテリジェントコントローラが付いているのだそうです。ある程度なら代替セクタの処理もしてくれるという噂で、実際不良セクタを含むディスクがデバイスメーカーのユーティリティディスクでフォーマットすると再び使えるようになった事もあります。そこで、『デバイス自体が代替セクタ処理をしているのなら、単にこのセクタに書き込むだけで良きに振舞ってくれるに違いない』といつもの如く単純な考えにて実験してみました。

# dd if=/dev/zero of=/dev/ad0 bs=512 seek=6000361 count=1
1+0 records in
1+0 records out
512 bytes transferred in 0.000396 secs (129286 bytes/sec)
お? 不良セクタに書き込んだつもりだったのですが、一瞬で帰ってきました。ひょっとしてあさってのセクタに書き込んだ? とか思ったのですが、先程エラーの出たコマンドで不良セクタを読み込んでみると
# dd if=/dev/ad0 of=/dev/null bs=512 iseek=6000361 count=1
1+0 records in
1+0 records out
512 bytes transferred in 0.000275 secs (1862518 bytes/sec)
お、おぉぉぉぉ!! 不良セクタが消えています。インテリです(笑)。ほほぉ、代替セクタ数はそんなに多くないはずなのでこれで復旧するかどうかは運次第なのですが、材料が無いがとりあえず復旧させなくてはならない時なんかは役に立つかもしれませんね。

先に全域バックアップを取ってからじゃないとポカミスで放心状態になる可能性が高い(^^;)ことと、不良セクタの発生したHDDを長く使うのは精神衛生上良くないですから、おそらく実際に使う機会は無いでしょうけど(笑)

□ 関連記事

[つっこみ]

新しい記事:[1408]  古い記事:[1406] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)