不良ディスク

仕事で使用している PC の HDD に不良セクタができたので、あいんさんに教えてもらった対処方法のメモです。

現象

  • Windows XP Professional
  • cmd.exe から del hoge.cpp をしても消すことができず、「ファイルが壊れているので chkdsk してください」と言われる。

バックアップ

素直に chkdsk すると被害が拡大することもあるので、まずはバックアップを取る。

  • 新しい HDD を PC に接続する。
    • 不良セクタのできた HDD よりも大きい容量のものを用意する。
  • KNOPPIX を利用して CD から Linux を起動する。
  • dmesg などを使ってどの HDD が /dev/hd? に接続されているかを調査する。
  • mount コマンドで対象となる HDD がマウントされていないかどうかを調査し、マウントされているならアンマウントする。
  • dd を使ってバックアップする。
    • if と of を間違えるとデータが消えてしまうので気をつけなければならない(これは何か安全策がほしい)
    • NTFS のクラスタサイズが 4kb なので bs に 4096 を設定しておく。エラーが発生した場合このサイズ単位でスキップされることになる。(今回は間違えて 8192 を指定してしまいましたが…)
    • エラーが発生した時に、発生箇所は 0 に置き換えて出力するために conv=noerror,sync を付ける。(今回は間違えて sync を付け忘れましたが、幸いエラーが発生していませんでした)
# dd if=/dev/hda of=/dev/hdb conv=noerror,sync bs=4096

起動

新しい HDD からブートし、chkdsk を実行する。

chkdsk のログの確認は「コンピュータの管理」を利用する。

コンピュータの管理 ⇒ システム ツール ⇒ イベント ビューワ ⇒ アプリケーション ⇒ Winlogon 

今回は、問題の起きたファイルが削除されていました。

その後

新しいディスクの方が大きいのでディスクが余っていますが、できれば既存の NTFS パーティションを拡大して全ディスク容量を使用できると良いのですが、ntfsprogs とか使うと良いのかな?