ファイルシステムの修復 (FAT、MFTのトラブル)

●注意●
 ここで示す操作は上級者向けのものです。初心者向けではありません。ここで書かれた内容を理解できない場合は、絶対に操作しないでください。間違えると取り返しのつかない結果になる恐れがあります。



●FATの位置情報によるトラブル
症状:あるはずのファイル/フォルダの全部または一部が見えなくなる。
原因:他の原因もあるが、パーティションブートセクタ (PBS) 中のFATの位置情報が壊れた可能性がある。主にFAT16で起きる。
修復方法:FAT16の場合:
1) Disk Probeを起動し、「Drives」メニューから「Logical Volume」を開く。
2) 「Logical Volumes」ボックスから、問題となっているドライブ名をダブルクリックし、「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」ボタンをクリックする。
3) 「Sectors」メニューから「Read」をクリックする。
4) 「Starting Sector」が "0"、「Number of Sectors」が "1" のまま「Read」ボタンをクリックする。
5) 「View」メニューから「FAT-16 BootSector」をクリックする。
6) 「Reserved sectors」の値に注目する (画面1)。通常は、この値が "1" から "4" の間にあるはずだ。それ以外の値が入っていれば、それは間違っている。ただ、この範囲にあっても正しいとは限らない。

画面1:「Reserved sectors」の値が正しいかどうかが問題

7) 「View」メニューから「Bytes」をクリックする。
8) 「Sectors」メニューから「Read」をクリックする。
9) 「Starting Sector」に "1"、「Number of Sectors」に "4" を入力し「Read」をクリックする。
10) 画面2のような画面が表示されたなら、そのセクタがFATの開始位置と考えてよい。画面3のような画面が表示されたなら、それはFATではないので、ツールバーの右向き三角ボタンをクリックし、次のセクタを表示する。画面2のような画面が表示されるまでこれを繰り返し、FATの開始位置を求める。

画面2:正常なFATの例


画面3:これはFATではない

11) 仮にセクタ4がFATの開始位置と求められたら、「Sectors」メニューから「Read」をクリックする。
12) 「Starting Sector」に "0"、「Number of Sectors」に "1" を入力し「Read」をクリックする。
13) 「View」メニューから「FAT-16 BootSector」をクリックする。
14) 「Reserved sectors」に 10) で求めたFAT開始セクタ位置を入力する (画面4)。

画面4:「Reserved sectors」に正しいセクタ位置を入力する

15) 「Sectors」メニューから「Write」をクリックする。
16) 「Starting sector to write data」に "0" が入っているまま「Write it」ボタンをクリックする。
17) 確認メッセージに対して「はい」をクリックする。
18) Disk Probeを閉じ、問題のドライブにアクセスして、ファイル/フォルダが見えるようになったことを確認する。

 FAT32では、FAT開始位置はセクタ "32" に固定されており、PBSのパラメータが書き換わっても自動的に "32" に修復されるので、このトラブルは起きない。
 NTFSでは、MFT開始位置情報が間違っていても、MFTミラーの位置情報が正しければMFTミラーを元にアクセスできるので、やはりこのトラブルは起きない。

●MFTの位置情報によるトラブル
症状:ドライブにアクセスすると「ファイルまたはディレクトリが壊れているため、読み取ることができません。」というエラーメッセージが表示される。
原因:パーティションブートセクタ (PBS) 中のMFTの開始位置情報とMFTミラーの開始位置情報の両方が壊れた。このトラブルはFAT16/32では起きない。
修復方法:この場合はPBSのバックアップから修復するのが一番簡単だ (TIPS:パーティションブートセクタの回復方法)。PBSのバックアップが見つからないあるいはバックアップも壊れている場合は次の方法で,MFT開始位置情報を修復する。
1) Disk Probeを起動し、「Drives」メニューから「Logical Volume」を開く。
2) 「Logical Volumes」ボックスから、問題となっているドライブ名をダブルクリックし、「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」ボタンをクリックする。
3) 「Sectors」メニューから「Read」をクリックする。
4) 「Starting Sector」が "0"、「Number of Sectors」が "1" のまま「Read」ボタンをクリックする。
5) 「View」メニューから「NTFS BootSector」をクリックする。
6) 「Clusters to MFT」の右にある「Go」ボタンをクリックする (画面5)。

画面5:「Clusters to MFT」の右にある「Go」ボタンをクリックする。

7) 「View」メニューから「Bytes」をクリックする。
8) 画面6は正しい先頭MFTの画面だが、これと同じような画面かどうかを確認する。特徴は、右のASCII表示部分で、先頭に "FILE0" とあり、真ん中あたりに、"$.M.F.T." とあるかどうかだ。

画面6:正しいMFTの例

9) 再度「Sectors」メニューから「Read」をクリックする。
10) 「Starting Sector」に "0"、「Number of Sectors」に "1" を入力し「Read」をクリックする。
11) 「View」メニューから「NTFS BootSector」をクリックする。
12) 「Clusters to MFTmirr」の右にある「Go」ボタンをクリックする (画面5)。
13) View」メニューから「Bytes」をクリックする。
14) 画面6と同様な画面が表示されるか確認する ("FILE0"、"$.M.F.T." を確認)。
15) 8) と14) でMFTおよびMFTミラーの開始位置情報が間違っていることが確認できたら、「Tools」メニューから「Search Sectores」をクリックする。
16) 「Search at offset」と「Unicode characters」にチェックを付け、「Offset in hex」に ”F2"、「First sector to search」に "0"、「Enter characters to search for」に "$MFT" と入力し、「Search」ボタンをクリックする (画面7)。

画面7:「Search at offset」と「Unicode characters」にチェックを付け、「Offset in hex」に ”F2"、「First sector to search」に "0"、「Enter characters to search for」に "$MFT" と入力する。

17) 「Found match in Sector xxxxxx Press Yes to continue search」と表示されたら (画面8)、xxxxxxの部分をメモし、「はい」ボタンをクリックする。これを繰り返し、「Searched xxxxxxxx sectors String not found」と表示されたら「OK」ボタンをクリックする。

画面8:見つかったセクタ数をメモする。

18) 17) で見つかったセクタが4つで、1番目と2番目、3番目と4番目が2セクタの違いであれば、1番目のセクタがMFTの開始セクタで、3番目のセクタがMFTミラーの開始セクタと考えられる。ただ、過去にパーティションを作成・削除したことがあると、過去のMFT/MFTミラーの残骸が見つかることがあるため、どれが正しいMFT/MFTミラーの開始セクタかを判断することが難しい。一般的には、MFTの位置は、パーティションサイズが小さい場合はセクタ660480にあり、パーティションサイズが大きい場合はセクタ6291456にある場合が多い。しかしこれは絶対ではない。MFTミラーの位置は、パーティションの総セクタ数の半分の位置にあることが多いが、これも絶対ではない。
19) MFT/MFTミラーの開始セクタがわかったら、「Sectors」メニューから「Read」をクリックする。
20) 「Starting Sector」に "0"、「Number of Sectors」に "1" を入力し「Read」をクリックする。
21) 「View」メニューから「NTFS BootSector」をクリックする。
22) 「Clusters to MFT」に、19) で求めたMFT開始セクタ数÷8の数字を入力する (ここにはセクタ数でなくクラスタ数を入力するため)。「Clusters to MFTmirr」にも同様に、MFTミラー開始セクタ数÷8の数字を入力する (画面9)。なお、MFTミラーは修復しなくてもデータにアクセス可能だが、後々のことを考えると可能ならば修復しておくことが望ましい。

画面9:「Clusters to MFT」に求めたMFT開始セクタ数÷8の数字を、「Clusters to MFTmirr」に求めたMFTミラー開始セクタ数÷8の数字を入力する。

23) 「Sectors」メニューから「Write」をクリックする。
24) 「Starting sector to write data」に "0" が入っているまま「Write it」ボタンをクリックする。
25) 確認メッセージに対して「はい」をクリックする。
26) Disk Probeを閉じ、問題のドライブにアクセスして、ファイル/フォルダがアクセス可能であることを確認する。

●FAT (MFT) が壊れたトラブル
症状:ドライブにはアクセスできるが、ファイル/フォルダにアクセスすると「ファイルまたはディレクトリが壊れているため、読み取ることができません。」というエラーメッセージが表示される。
原因:パーティションブートセクタ (PBS) 中のFATやMFTの開始位置情報は正しいが、FAT (MFT) の内容が壊れている。
 このトラブルで修復は難しい。というのは、FATやMFTが壊れても、FATのコピーやMFTミラーが正常であれば、それを元にchkdskユーティリティによって修復される。その結果、修復ができればユーザーはこのトラブルを解決できる。一方、chkdskによる修復ができなかった場合は、たいてい壊れたFATやMFTがFATのコピーやMFTミラーに上書きされてしまうことが多い。こうなるとFATのコピーやMFTミラーを使った修復もできなくなる。ただ稀に、FATやMFTが壊れてもchkdskが壊れたと認識しない場合は、FATのコピーやMFTミラーは正常なままなので、これを使って修復できる可能性がある。

修復方法:FAT16の場合:
1) Disk Probeを起動し、「Drives」メニューから「Logical Volume」を開く。
2) 「Logical Volumes」ボックスから、問題となっているドライブ名をダブルクリックし、「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」ボタンをクリックする。
3) 「Sectors」メニューから「Read」をクリックする。
4) 「Starting Sector」が "0"、「Number of Sectors」が "1" のまま「Read」ボタンをクリックする。
5) 「View」メニューから「FAT-16 BootSector」をクリックする。
6) 「Reserved sectors」の値と「Sectors per FAT」の値をメモする (画面10)。

画面10:「Reserved sectors」の値と「Sectors per FAT」の値をメモする。

7) 「View」メニューから「Bytes」をクリックする。
8) 「Sectors」メニューから「Read」をクリックする。
9) 「Starting Sector」に 6) でメモした「Reserved sectors」の値+「Sectors per FAT」の値を入力し、「Number of Sectors」に「Sectors per FAT」の値を入力し、「Read」をクリックする (画面11)。

画面11:「Starting Sector」に「Reserved sectors」の値+「Sectors per FAT」の値を入力し、「Number of Sectors」に「Sectors per FAT」の値を入力する。

10) 「Sectors」メニューから「Write」をクリックする。
11) 「Starting sector to write data」に 6) でメモした「Reserved sectors」の値を入力して「Write it」ボタンをクリックする。
12) 確認メッセージに対して「はい」をクリックする。
13) Disk Probeを閉じ、問題のドライブにアクセスして、ファイル/フォルダが見えるようになったことを確認する。

修復方法:FAT32の場合:
1) Disk Probeを起動し、「Drives」メニューから「Logical Volume」を開く。
2) 「Logical Volumes」ボックスから、問題となっているドライブ名をダブルクリックし、「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」ボタンをクリックする。
3) 「Sectors」メニューから「Read」をクリックする。
4) 「Starting Sector」が "0"、「Number of Sectors」が "1" のまま「Read」ボタンをクリックする。
5) 「View」メニューから「FAT-16 BootSector」をクリックする。
6) 「Reserved sectors」の値をメモする (画面12)。Disk ProbeはFAT32に対応していないため、「Sectors per FAT」の値が利用できない。ただ、「Reserved sectors」は共通なので、これを利用する。

画面12:「Reserved sectors」の値をメモする。

7) 「View」メニューから「Bytes」をクリックする。
8) 画面13のように、オフセット0024から0026にある4バイトのデータからFATのサイズを計算する。その方法は、まず4バイトのデータを逆順に並べ替える (仮に4バイトのデータがA1 B2 C3 D4だとするとD4 C3 B2 A1に並び替える)。これが16進の値になる。これを10進に変換する (変換にはアクセサリにある電卓が利用できる)。求められた値をメモしておく。画面の例では16進で "00 00 07 8C" なので、10進では "1932" になる。

画面13:FATのサイズを計算する。

9) 「Sectors」メニューから「Read」をクリックする。
10) 「Starting Sector」に 6) でメモした「Reserved sectors」の値+ 8) で計算した10進のFATのサイズを入力し、「Number of Sectors」に 8) で計算した10進のFATのサイズを入力し、「Read」をクリックする (画面14)。

画面14:「Starting Sector」に「Reserved sectors」の値+10進のFATのサイズを、「Number of Sectors」に10進のFATのサイズを入力する。

11) 「Sectors」メニューから「Write」をクリックする。
12) 「Starting sector to write data」に 6) でメモした「Reserved sectors」の値を入力して「Write it」ボタンをクリックする。
13) 確認メッセージに対して「はい」をクリックする。
14) Disk Probeを閉じ、問題のドライブにアクセスして、ファイル/フォルダが見えるようになったことを確認する。

修復方法:NTFSの場合:
1) Disk Probeを起動し、「Drives」メニューから「Logical Volume」を開く。
2) 「Logical Volumes」ボックスから、問題となっているドライブ名をダブルクリックし、「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」ボタンをクリックする。
3) 「Sectors」メニューから「Read」をクリックする。
4) 「Starting Sector」が "0"、「Number of Sectors」が "1" のまま「Read」ボタンをクリックする。
5) 「View」メニューから「NTFS BootSector」をクリックする。
6) 「Clusters to MFT」の値と、「Clusters to MFTmirr」の値をメモし (画面15)、「View」メニューから「Bytes」をクリックする。

画面15:「Clusters to MFT」の値と、「Clusters to MFTmirr」の値をメモする。

7) 「Sectors」メニューから「Read」をクリックする。
8) 「Starting Sector」に 6) でメモした「Clusters to MFTmirr」の値×8を入力し、「Number of Sectors」に "8" を入力し、「Read」ボタンをクリックする (画面16)。

画面16:「Starting Sector」に「Clusters to MFTmirr」の値×8を、「Number of Sectors」に "8" を入力する。

9) 画面17のように「FILE0」および「$.M.F.T.」が表示されていることを確認し、「Sectors」メニューから「Write」をクリックする。

画面17:「FILE0」および「$.M.F.T.」が表示されていることを確認する。

10) 「Starting sector to write data」に 6) でメモした「Clusters to MFT」の値×8を入力し、「Write it」ボタンをクリックする (画面18)。

画面18:「Starting sector to write data」に「Clusters to MFT」の値×8を入力する。

11) 確認メッセージに対して「はい」をクリックする。
12) Disk Probeを閉じ、問題のドライブにアクセスして、ファイル/フォルダが見えるようになったことを確認する。