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 を指定した。この値は多分きっと全容量の約数になっているはず。
このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/429
そうだよ!大変なことになったよ!
おかげさまで大変なことにならずに済みました。
本当にありがとうございました。
今さら思ったのですが、
16065ってのが奇数だから、bsに512以外(1024以上)を指定したら、後ろのほうのパーティションは必ずクラスタを跨いじゃう様な気がしてきた。
ん、パーティション切るときに8の倍数を指定しておけばいいのか?