ハードディスクに障害が発生し、GNUのddrescue
を使用してディスク(1TB)から一部のデータをレスキューすることができました。ディスクの最後の800GBは完全で、単一のエラーはありませんでしたが、最初の200GBでは、ほぼ14000のエラー(badblocks)がエリア全体に広がっていました。 ddrescue
は、badblockがどこにあるかを説明するログファイルを作成します。
ddrescue
sコマンドラインパラメータ:
ddrescue /dev/sdb /dev/sdd /mnt/sdc1/sdb.log -r -1 -f -d -v
ログファイルは次のようになります。
# pos size status
0x00000000 0x1C08CE00 +
0x1C08CE00 0x00000200 -
0x1C08D000 0x011E6800 +
0x1D273800 0x00000200 -
0x1D273A00 0x005EC000 +
0x1D85FA00 0x00000200 -
... ... ...
プラス(+)は連続した適切なスペース、マイナス(-)は読み取り不可能なスペースを意味します。位置とサイズは16進数です。 '+'で終わる行をストライピングするバッドブロックの位置のリストがありますが、このバッドブロックをファイルシステム上のファイル(ちなみにNTFS)に関連付ける方法が必要です。
DiskExplorer のようなものを使用してこれを手動で実行できることは知っていますが、14000セクターの場合は地獄になります。だから、これを行うための多かれ少なかれ自動でエレガントな方法がありますか?
この質問の大成功以来、もしあれば、私は答えがないままにされてきました。しかし、調査を続けたところ、1999年に作成されたnfi.exeというMicrosoftユーティリティが、 Windows NT 4および2000用のOEMサポートツールフェーズ3サービスリリース2 の一部であることがわかりました。ユーティリティは私が必要としたことを正確に実行し、セクターを受け取り、ファイルを返します。しかし、それは個々のセクターに対して行われるため、プロセスを自動化するためのスクリプトを作成する必要がありました。このように機能するのはPython(2.7+)スクリプトです。
入力としてddrescueログファイルを受け取り、それを解析し、ファイル内の各セクターに対してnfi.exeを呼び出し、ファイルのアルファベット順のリストを生成します。
>sector_correlator.py -h
usage: sector_correlator.py [-h] [-v] [-n \path\to\nfi.exe] [-V] [-L]
logfile nt-device-path output file
Receives a list of sectors and returns a list of files which resides in them.
positional arguments:
logfile path to ddrescue's logfile.
nt-device-path NT-style path to physical device, like
\device\harddisk1\dr1
output file filelist output file name
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-n \path\to\nfi.exe nfi.exe's path, if not speciified, assumes's it is in
the same path as the script
-V enables verbose mode
-L save nfi.exe's output log to nfi_raw.log
例:
sector_correlator.py sdb.log \devices\harddisk0\dr0 filelist.txt
ここで、sdb.logはddrescueのログです。
\ device\harddisk0\dr0は、HDへのNTスタイルのパスです( WinObj と呼ばれるsysinternalsツールとディスクの管理ユーティリティを使用して検出します)
filelist.txtは、必要なファイルリストです。次のようになります。
\Documents\Downloads\Evernote_4.5.1.5432.exe
\Documents\Downloads\Programs\Apophysis207SE.exe
\Documents\Downloads\Programs\GetGnuWin32-0.6.21.exe
\Documents\Downloads\Programs\mbam-setup.exe
\Documents\Downloads\Programs\msnbackup133.exe
\Documents\Downloads\Programs\x64Components_v254.exe
スクリプトの他の引数はオプションであり、-hを指定して実行すると説明されます。デフォルトでは、スクリプトはnfi.exeが同じディレクトリにあると想定します。そうでない場合は、-npathtonfi.exeを使用します。
最後に、スクリプトへのリンクは次のとおりです。 sector_correlator.py
これは非常に初歩的なものであり、エラー処理はありませんが、機能します。
これは、故障したドライブをチェックしようとしたことに基づく回答(#1)の補足です。 1)引き続きnfi.exeを取得して使用できます(少なくともwinxpを使用)。上記のAns#1のリンクされたMSページにoem3sr2.Zipとしてリストされているファイルをダウンロードします。
現在のバージョンのnfi.exeでは、ドライブパスを掘り下げる必要がないことがわかりました。単純なドライブ文字で十分です。例:「K:」
python sector_correlator.py badsectors.log k: badfiles.txt
ただし(私の強みはPerlにあるので、Pythonを読んでもあまり期待しないでください)、スクリプトは「-」に一致する行ごとに1つのブロックしかチェックしないようです。したがって、ログファイルが200個の連続した不良ブロック(ログファイル行の2番目の番号)を報告した場合、スクリプトは最後の199ブロックでさまざまなファイルの関連付けをチェックしていません。
Linuxでは、ddrescuelog -l- badsectors.logを使用して展開し、すべての不良ブロックを表示できます。残念ながら、その理由はわかりませんが、Ubuntuのddrescueの実装にはddrescuelogが含まれていません(ただし、debianから最新のものを入手し、コンパイルしてインストールするのは、私が見た中で最も簡単です)。
私は今不良ディスクを回復しています、そしてこれを試すつもりです:
http://sourceforge.net/projects/ddrutility/
...これ(バージョン2.1以降)にはddru_ntfsfindbadが含まれています:
Ddru_ntfsfindbadは、どのファイルがddrescueログファイルの不良セクタに関連しているかを見つけるためのNTFSパーティションのユーティリティです。
インストールとは、ソースからコンパイルすることを意味しますが、Ubuntuマシン(VM)が横になっているため、提供されている手順で簡単にできます。