2006年5月 7日

dd conv=sync,noerror

 定期的にやってくるサーバダウン。

 HDDがたまにエラーを出しているのにもかかわらず放置していたボクが悪かった。

 しかし、HDDだけでなく、本体もイカレていた。たまたま似たスペックのPCがあったので助かった。

 不良セクタ満載のHDDは適当なPCに繋いで knoppix を起動して、

 dd if=/dev/hda of=~/backup bs=4096 conv=sync,noerror

 でバックアップした。conv=sync,noerror は、不良セクタがあるHDDをバックアップするときのおまじないである。noerror はエラーがあっても継続。sync はエラーの分を0パディングする。これをつけないとデータがずれて大変なことになる。

 ブロックサイズ(bs)に指定する値は、512(セクタサイズ)が理想だが、速度を考慮すると大き目がいい。しかし、不良セクタがあった場合にブロックサイズ分が全部消える(と思う)ので、大きすぎは良くない。ここでは、ファイルシステムのクラスタサイズに合わせた。

 あーと、これをやる前に hdparm でDMAを有効にするのを忘れないようにしたい。速度が数倍速くなる。

 その後、移転先HDDに乗せ換えて

 dd if=~/backup of=/dev/hda bs=8225280

 でリストア。ここでのブロックサイズは、fdisk とかで見たときの Units = cylinders of 16065 * 512 = 8225280 bytes を指定した。この値は多分きっと全容量の約数になっているはず。

Posted by rukihena at 23:50:45
トラックバックURL

このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/429

コメント

そうだよ!大変なことになったよ!

Posted by fslasht at 2006年6月 4日 02:11

おかげさまで大変なことにならずに済みました。
本当にありがとうございました。

今さら思ったのですが、
16065ってのが奇数だから、bsに512以外(1024以上)を指定したら、後ろのほうのパーティションは必ずクラスタを跨いじゃう様な気がしてきた。
ん、パーティション切るときに8の倍数を指定しておけばいいのか?

Posted by るきへな at 2006年6月 4日 03:04