エラーを無視してファイルをコピーする方法(壊れかけたディスクからのファイルの救出)Tech TIPS

エラーの発生したディスクからファイルを読み出すには、別のマシンにディスクを取り付けて読み出すとよい。ファイルのコピーには、エラーを無視してコピーすることができるxcopyコマンドを使うとよい。

» 2003年01月21日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000 Professional/Windows XP Professional/Windows XP Home Edition/Windows 2000 Server


解説

 コンピュータを構成するパーツの中でも、故障した場合の被害が最も大きくなるパーツはハードディスクであろう。CPUメモリグラフィックス・カードなど、そのほかのたいていのパーツは、壊れても別のものに置き換えればそのまま使うことができるが、ハードディスクが壊れると、すべてが失われてしまう可能性があるからだ。 このような事態を防ぐためには、重要なデータの小まめなバックアップRAIDによるデータ保護などが欠かせないが、パーソナル用途のマシンや、(サーバではない)単なるクライアント・マシンでは、現実にはほとんど行われていないことも多い。一般的には、ディスクが壊れれば、可能な限りデータを読み出してほかのマシンにコピーしたあと、マシンを修理に出すか、ディスクを交換することになるだろう。

 ディスクが壊れるといっても、いきなりディスクが無応答になるわけでなく、その前兆となる兆候が現れることも多い。例えば読み出しエラーが多発したり、読み出しのリトライ(再試行)のために時間がかかったりするようになる。またイベント・ビューアには、次のようなエラーが多数記録されていることからも判断できるだろう。

ディスク・エラーが発生している場合のシステム・イベント・ログ ディスク・エラーが発生している場合のシステム・イベント・ログ
ハードディスクの内部には複数枚のプラッタがあるが、読み出しエラー(メディア不良などによる)はプラッタ上のある範囲内にまとまって発生することが多い。不良カ所が含まれるファイルへアクセスすると、このようなエラーがイベント・ビューアに多数記録されることになる。

 ディスクのインターフェイス部分が壊れた場合は外部から全くアクセスできなくなり、ファイルを読み出すことは不可能であるが、ディスクの一部が読み取り不可能になっただけならば、まだファイルを救済できる可能性がある。メールやドキュメント、重要なファイルなど、可能な限りファイルを読み出してから、ディスクの修理や交換を行いたいところだ。

 だが、ディスクが不調なままシステムを起動しようとしても、システム・ファイルにエラーが含まれているとシステムが起動しないし、たとえ起動はできても、不良部分に書き込もうとしてファイル・システムにさらにダメージを与える可能性がある(壊れかけたディスクにchkdskなどは持ってのほかだ。ファイル・システム全体が消去されてしまい、全くアクセスできなくなる可能性がある)。こうなってしまっては、救えるファイルも救えなくなるので、すぐに別のマシンにディスクを接続して、必要なファイルを素早くコピーして回収するのが望ましい。

別のデスクトップ・マシンにディスクを接続しているところ 別のデスクトップ・マシンにディスクを接続しているところ
別のWindows 2000/XPマシンにディスクをつないでファイルを読み出すのが望ましい。これは、デスクトップ・マシンのセカンダリ・インターフェイスを外して、エラーのあるディスクをIDEインターフェイス・ケーブルで接続しているところ。ノート用の2.5インチ・ディスクの場合でも、写真のような2.5インチ・ディスク接続用のフラット・ケーブル(千円程度で販売されている)を使えば、デスクトップ・マシンに接続することができる。

 別のマシン(FAT32NTFSの両方が使える方が便利なので、Windows 2000かXPマシンが望ましい)にディスクを接続すると、元のディスクのパーティションが新しいドライブとして見えているはずだ。もし見えていなければ、[管理ツール]の[コンピュータの管理]に含まれる[ディスクの管理]ツールでドライブ名を割り当てておこう。 さて、あとはエクスプローラで必要なファイルやフォルダだけを選んでコピーすればよさそうだが、実はこれはうまくいかない。エクスプローラのコピーでは、もし途中でエラーが含まれるようなファイルに遭遇すると、(何度かリトライするが、最終的には)コピー作業を中断してしまうからだ。エラーのたびにユーザーが残りのファイルを選択しなおして、コピーを再開するのは現実的ではない(階層フォルダになっていると、どこまでコピーされたかが分からないから)。 このような場合は、エラーがあればそのファイルをスキップして、残りの作業を行えるとありがたい。エラーを無視してファイルをコピーするには、コマンド・プロンプト上でxcopyコマンドを使うとよい。xcopyは、フォルダのツリーごとファイルをコピーするためのコマンドであるが、オプションとして「/c」を付けると、途中でファイルやフォルダが読み出せないというエラーが発生しても、それをスキップして、処理を続けることができる。

 以下は、G:\(エラーが発生した元のドライブ)のすべてのファイルを、C:\rescueへコピーしている場合の例である。「/s /e」は空のフォルダを含むフォルダ・ツリー全体をコピーするというオプション、「/c」はエラーを無視してコピーするオプション、「/h」は隠しファイルやシステム・ファイルもコピーするというオプションである。詳しくは「xcopy /?」で表示される説明を参照していただきたい。

C:\RESCUE>xcopy /s /e /c /h g:\*.* c:\rescue
G:\AUTOEXEC.BAT
G:\BOOT.INI
G:\bootfont.bin
G:\BOOTLOG.PRV
G:\BOOTLOG.TXT
G:\BOOTSECT.DOS
G:\CONFIG.SYS
G:\NTDETECT.COM
G:\ntldr
G:\SYSLEVEL.IBM
データ エラー (巡回冗長検査 (CRC) エラー) です。…エラー発生。だが無視してコピーしている
G:\Documents and Settings\Administrator\NTUSER.DAT
G:\Documents and Settings\Administrator\ntuser.dat.LOG
G:\Documents and Settings\Administrator\ntuser.ini
G:\Documents and Settings\Administrator\Application Data\desktop.ini
…(以下省略)…



 この例では、途中で「データ エラー (巡回冗長検査 (CRC) エラー)」が発生しているが、無視してコピーされている(CRCは、ハードディスクやフロッピー・ディスクで使われているエラー検出技術)。ただし何度かリトライを行うので、エラーと判断されるまでかなり(手元のマシンでは30秒程度)かかる(エラーに遭遇するごとにこの時間がかかる)。ディスクの故障の具合によっては、「インページ エラー」なども表示されることがあるが、いずれにしてもエラーのあるファイルは無視してコピー作業が行われる。エラーのある部分は何度かxcopyを再実行すれば読み出せることもあるが(ディスクが冷えていると調子が戻ったりするので、何度か実行してみるのもよいだろう)、どうしてもだめな場合はあきらめるしかない。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。