1

トピック: chkdskで修復しファイルシステムの中で不良セクタにあたったファイルの特定は可能ですか?

お世話になっております。

「PCと解」を参考にさせていただきながら、以下の環境と手順でHDDのデータを復旧しました。

環境:

  • OS: Windows 10 Pro(64bit)

  • 故障したHDD: Dドライブ(起動ディスクとは別)、MBR、NTFS、2TB

  • 新しいHDD: Fドライブ(ディスク全体では4TBだが、MBRのHDDを書き出すためMBRで初期化し、2TBのパーティションを使用。NTFS)

  • Cygwin 64bit版

手順:

  1. Dドライブの調子が悪いことに気づく

  2. 「代替処理済の不良セクタ数」が閾値を割っていることを確認

  3. Cygwinのddrescueで、Dドライブのパーティションのディスクイメージファイルを作成。errsize, errorsがあったが再読み込みをせず終了

  4. Cygwinのddrescueで、イメージファイルをFドライブ(新しいHDD)に書き込む

  5. Fドライブにアクセスできなくなったが、データ自体はほぼ復旧できていると予想

  6. Powershellから「chkdsk f: /b」を実行

  7. 無事Fドライブを認識

ここで、不良セクタにあたっていたファイルは破損した状態になっていると思うのですが、それがどのファイルなのか分からなくなってしまいました。
イベントビューアーからソースが「Chkdsk」になっているイベントを見つけましたが、ログが途中で切れているようで、見方も分かりませんでした。

この状態から、不良セクタにあたっていたファイルを特定することは可能でしょうか。

調べた結果、ddrescueで生成したイメージファイルの不良セクタ部分を特定のASCII文字列で埋めて、その文字列でgrepをかけてヒットするファイルを特定する方法が見つかりました。
しかし、イメージファイルのマウントが出来ず、試すことが出来ませんでした。
参考: どのファイルが不良セクタに当たっていたか調べる

現在、以下のものが残っています。

  • ddrescueで作成したパーティションのイメージファイル

  • ddrescue実行時のログファイル

  • 故障したHDD

  • 新しいHDD

また、念のためchkdskのログの一部を引用します。

Chkdsk は読み取り/書き込みモードで実行されました。  

N: のファイル システムをチェックしています
ファイル システムの種類は NTFS です。
ボリューム ラベルは ボリューム です。

ステージ 1: 基本のファイル システム構造を検査しています ...
ファイル 0x0 の、同一種類コード 0x80 で、異なるインスタンス タグ 
0x9 と 0x0 である属性の VCN 番号が連続ではありません。VCN 番号は
それぞれ 0xdf32 と 0xde44 です。
種類 0x80 およびインスタンス タグが 0x0 の属性レコードは、クラスター 0xcb00cd から始まる、おそらく 
0x1 個のクラスターと、クロス リンクされています。
ファイル 0x0 の、種類が 0x80 でインスタンス タグが 0x0 の属性で使わ
れているいくつかのクラスターは既に使われています。
ファイル 0x0 の、種類 0x80 およびインスタンス タグ 0x9 の属性の長さに、0xdf32000 の代わりに 0x250c0000 が割り当てられています。
                                                                                       
ファイル 0 内の壊れた属性一覧エントリのうち、
タイプ コードが 80 であるエントリを削除しました。
インスタンス タグが 0x9 およびセグメントの参照が 0x1000000000000 の属性
を見つけることができませんでした。予期された値は 0x80 です。
壊れた属性レコード (0x80、"") を
ファイル レコード セグメント 0x0 から削除します。
インスタンス タグが 0x8 およびセグメントの参照が 0x1000000000000 の属性
を見つけることができませんでした。予期された値は 0xb0 です。
壊れた属性レコード (0xB0、"") を
ファイル レコード セグメント 0x0 から削除します。
インスタンス タグが 0x0 およびセグメントの参照が 0xf00000000000f の属性
を見つけることができませんでした。予期された値は 0x80 です。
壊れた属性レコード (0x80、"") を

無事HDDが復旧できたのも、「PCと解」のおかげです。ありがとうございます。
重ね重ねお世話になってしまう形となりますが、ご教示いただけますと幸いです。

2

Re: chkdskで修復しファイルシステムの中で不良セクタにあたったファイルの特定は可能ですか?

なるほど。
そんな方法があったんですね。
まったく、思いつきもしませんでした。

当サイトでは説明を簡略化するため、「ddrescue」のログファイルについて一切触れていないように、
ログファイルを応用した方法についても未着手です。
とりあえず、読み出せるデータだけコピーしてしまって、読めないものはどうしようもないスタンスでいたので。

ただ気がかりなのは、MFTに不良セクタが存在した場合、ファイル自体が失われているかもしれないのと、
この一連の作業を行う前に、セクタ代替処理が行われた領域については、やはりデータが失われている可能性があることです。
気にしだすときりがなくなるので、ある程度現状を受け入れたほうが幸せになれる気がします。

私の結論としては、厳密には不可能だと思います。
ただし、lieさんの対応は非の打ち所がないほどすばらしいものだと思います。

3

Re: chkdskで修復しファイルシステムの中で不良セクタにあたったファイルの特定は可能ですか?

ご返答いただきありがとうございます。

ただ気がかりなのは、MFTに不良セクタが存在した場合、ファイル自体が失われているかもしれないのと、
この一連の作業を行う前に、セクタ代替処理が行われた領域については、やはりデータが失われている可能性があることです。

ファイル自体が失われている可能性を考えておりませんでした。
また、セクタ代替処理によって、データが失われるということを理解しておりませんでした。

現在、不良セクタ部に文字列を埋める方法を試している最中ですが、ruuroo様のおっしゃる通り、ほとんどのデータを救出できたということで満足した方が良い気がしてきました。

この度は本当にありがとうございました。