壊れたHDDのデータをバックアップすべくrobocopyした。ちなみにRobocopyは以下のコマンドラインオプションを使用している。
robocopy h:\ g:\ /mir /xf .ntvs_analysis.dat *.exp *.vhd *.vmdk *.pdb *.sdf *.suo *.ilk *.vcxproj.* *.obj *.pch *.ipch /np /r:0 /w:0 /xd $RECYCLE.BIN "System Volume Information" "App" "libs" "ffmpeg" "node_modules" "ipch" /log:c:\backup.txt
あとでインストールできるアプリはスキップするようにしている。またビルド時に出るオブジェクトファイル等はバックアップする必要はないし、$RECYCLE.BINや"System Volume Information"はそもそもコピーしてはいけないので、それもスキップしている。
コピーを実行するとイベントログに大量のエラーとワーニングが出る。
コピーのログを見るとファイルが壊れているかコピーできないというエラーも結構出ている。それはまあ仕方がない。何せ物理的にHDDが壊れているのだから。少しでもファイルが回収できれば御の字だ。3月くらいに別のHDDにバックアップを取っているので、古いファイルであればそこからもとに戻せるだろう。
しかし途中からコピーが全く進まなくなった。ディスクの読み取りエラーが頻発しているので全然進まないのだ。中断しようとしてCTRL+Cを押しても反応がなくなってしまった。
実はこの前にHDAT2というツールを使って、ディスクの修復を試みていた。これを使うと物理ディスクの不良セクタを代替セクタに置き換える処理を即すことができるようだ。HDDというのは不良セクタが発生すると代替セクタに置き換えるのだけれども、(大量の場合だけかもしれないけれども)すぐには行わないようである。保留しておいて、そこに書き込みや更新が発生した場合代替セクタに置き換えるようである。このHDAT2というツールは不良セクタに対してあえて書き込みを行って、代替セクタへの置き換えを促進するツールだそうだ。で、これを実行するとやはり途中で詰まる。やはり何らかの物理的な障害が発生しているせいなのだろうか。下はその実行中の画面である。
HDAT2の情報については以下が詳しい。
http://pctrouble.lessismore.cc/software/hdat2_repair_badsectors.html
ただこのツール、ディスクの不良セクタ置き換えを促進してくれるだけで、データを修復するのではないことに注意すること。不良セクタ上にあるデータは失われてしまう。私は失われても仕方がないという諦めの境地に達しているのでこのようなことができる。
で、このツール使って修復しようとするとDVDから起動しなくてはならないし、ツールがPCを占有するので全くPCを触ることができない。1日半ほど実行してみたけどもやはり1/3も実行できないし、途中でさらに処理スピードが落ちてきたのでこのツールもあきらめることにした。普通にOSを立ち上げバックグラウンドでRobocopyしたほうがPC触れるしね。そういうわけでrobocopyしたのだが、やっぱり途中でうんともすんとも言わなくなってしまう。物理的な障害なので詰まるところでは詰まってしまうようだ。
で、CHKDSKコマンドを使ってバックグラウンドで修復してみることにした。最初はCHKDSK /Rで試してみる。
chkdsk /r /i /c /offlinescanandfix
/r
オプションは「不良セクターを見つけて、読み取り可能な情報を回復 」である。/i
は「NTFS のみ: インデックス エントリのチェックを抑制して実行」、/c
は「 NTFS のみ: フォルダー構造内の周期的なチェックをスキップ」である。なるたけ早く終わってほしいので、/i
、/c
オプションをつけた。ただしこれを付けると「完全には不良セクタを修復できなくなるかもしれない」という警告が出る。/offlinescanandfix
はドライブのマウントを解除してスキャンしてくれるオプションである。
これを実行すると、ステージ2の「ステージ 2: ファイル名リンケージを検査しています ..」の93%あたりで沈黙する。ただじわじわ進んで12時間くらい経過すると98%まで来たのでPCはほっておいて寝た。そして起きて見てみると終了はしていたようだが、なぜかコマンドプロンプトや立ち上げていたアプリがすべて終了していた。どうも再起動してしまっているように見える。ただイベントログ上は再起動の痕跡はないし、昨日誤ってログオフしてしまったのだろうか。ただイベントログを見ると、就寝後もCHKDSKは動いていたようだ。不思議だ。
で、CHKDSKの最後のイベントログを見ていると以下のような記載があった。
Chkdsk は、ボリューム スナップショットでスキャン モードで実行されました。 \Device\HarddiskVolume6 のファイル システムをチェックしています Windows は "フル Chkdsk が必要です" 状態であるため、ボリュームでオンライン スキャンを実行できません。 "chkdsk /f" を実行してボリュームを修復してください。
で、OSの仰せのままにCHKDSK /F
を今実行しているところだ。今のところのログは以下の通りだ。
C:\WINDOWS\system32>chkdsk /f h: ファイル システムの種類は NTFS です。 ボリュームが別のプロセスによって使用されているため、Chkdsk を実行できません。Chkdsk を実行するにはこのボリュームのマウントを解除する必要 があります。 そのときは、このボリュームへのすべての開かれたハンドルは無効になります。 このボリュームを強制的にマウントを解除しますか? (Y/N) y ボリュームのマウントは解除されました。このボリュームへ開かれたすべてのハンドルは、現在無効です。 ボリューム ラベルは ボリューム です。 ステージ 1: 基本のファイル システム構造を検査しています ... 1456896 個のファイル レコードが処理されました。 ファイルの検査を完了しました。 133 個の大きなファイル レコードが処理されました。 0 個の問題のあるファイル レコードが処理されました。 ステージ 2: ファイル名リンケージを検査しています ... ファイル 1329854 のインデックス $I30 のエラーを修復します。 CHKDSK は、ファイル 1329854 のインデックス $I30 のビットマップに割り当て済みとしてマークされている空き領域を検出しました。 ファイル 1329854 のインデックス $I30 を並べ替えます。 進行状況: 1544147 / 1642510 完了、ステージ: 94%、合計: 80%、ETA: 0:24:51
やはりステージ2の94%あたりで停滞しているが、/r
よりも進み具合が早いようだ。しかし/r
と/f
の違いって何だろう。下記サイトにその違いが書いてあった。
http://pctrouble.lessismore.cc/running/chkdsk_option.html
/r
のほうが時間がかかる上にあまり効果はないらしい。このサイトにも書いてあるが、ディスクの修復というのはおかしなファイルを切り捨て、ファイルシステムを正常に保つという意味なので、ファイルを復旧してくれるわけではない。おかしなファイルはバッサリ消えてしまう。ファイルを復旧したいのなら別のツールを使うことをお勧めする。そのようなツールでもこのような物理障害にはほとんど対応できないのではないか。
やはりまめにバックアップを取っておく以外にこのような物理障害に対応する方法はないのだ。
私のディスクはCHKDSKもまともに完了しないような状態なのでもう捨てるしかない状態にきているということだろう。さてどこまでデータ復旧できるのやら。。