新年早々Windows PCが動かなくなっていたので復旧作業をした (2009-01-05..01-07)。

使っていると前触れなしに青画面になってしまう。調べたところ、

  • Memtest86(Knoppixをboot: memtestで起動)で1周しても異常なし
  • Windows標準のディスクユーティリティで確認しても異常なし
  • メーカーのツール(Samsungのhutil)で調べたら不具合発見

というわけで、HDD(とおそらくマザーボード)が故障したらしい。

同じ型のPCと同じ容量のHDDを手配してすげ替えたら動いた。 今回はHDDが低水準なところで壊れたらしく、いつもお世話になってる partimageが異常終了してしまうのでddを使った。以下手順。

  1. Knoppixで起動。
  2. 適当なストレージをマウント(今回は手近なSambaサーバ)。
  3. sfdiskでパーティション情報をストレージに保存。
  4. ddでディスク内容を読み出してストレージに保存。

    • conv=sync,noerrorを忘れないこと。これは読めない箇所があっても 停止せずに、かつオフセットを維持して記録するため。
    • bsは大きめ。本当は4096とかのほうが安全だと思う。
    • ネットワークがボトルネックだったので、高速な圧縮ツールlzopで 圧縮してからネットワークを通すように。
  5. 電源を落としてHDD等を交換。

  6. Knoppixで起動。
  7. さっきのストレージをマウント。
  8. sfdiskでパーティション情報をHDDに書き込む。
  9. ddでディスク内容をHDDに書き込む。
  10. いったん終了して、HDDから起動できるか確認。

例:

boot: memtest

boot: knoppix noswap

$ sudo smbmount //sambaserver/jdoe /mnt -o user=jdoe
$ sudo sfdisk -d /dev/sda > /mnt/sda.sfdisk
$ time sudo dd if=/dev/sda conv=sync,noerror bs=65536 | \
  lzop -c > /mnt/sda.dd.lz
dd: reading `/dev/sda': Input/output error
974459+1 records in
974460+0 records out
63862210560 bytes (64 GB) copied, 4894.94 s, 13.0 MB/s
dd: reading `/dev/sda': Input/output error
1271253+2 records in
1271255+0 records out
83312967680 bytes (83 GB) copied, 6063.52 s, 13.7 MB/s
2442043+3 records in
2442046+0 records out
160041926656 bytes (160 GB) copied, 10842.2 s, 14.8 MB/s

real    180m42.348s
user    48m3.745s
sys     26m42.006s
$

$ sudo shutdown now

(change hdd)

$ sudo smbmount //sambaserver/jdoe /mnt -o user=jdoe
$ sudo sfdisk /dev/sda < /mnt/sda.sfdisk
$ lzop -d /mnt/sda.dd.lz | sudo dd of=/dev/sda conv=sync,noerror bs=65536

$ sudo shutdown -r now

教訓:

  • PCはいつか壊れる。当たり前ながら、日々のバックアップが必須。
  • リストアしやすい方法を選ぶことが大事。ミラーのような形で常にもう1台にリ ストアされている状態が理想かもしれない。
  • プログラムはある程度仕方ないけれど、データだけでも集中管理したほうが楽。
  • そろそろPOPもIMAP経由で読み書きするようにしよう。