AdvancedメニューのFAT修復

FATのブートセクタが損傷した場合には、データにアクセスできなくなる。Windowsは、「ドライブ*のディスクはフォーマットされていません。今すぐフォーマットしますか?」という警告を出すだろう。

TestDiskはFATパーティションのブートセクタを修復する機能を持っている。Advancedメニューから、修復したいパーティションを選択し、[Boot]へ進む。

FATブートセクタの修復

TestDisk 6.2-WIP, Data Recovery Utility, November 2005
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda - 120 GB / 111 GiB - CHS 14593 255 63

     Partition                  Start        End    Size in sectors
 1 * FAT32                    0   1  1  1010 254 63   16241652 [NO NAME]
 2 P Linux                 1011   0  1  1023 254 63     208845 [/boot]
 3 E extended LBA          1024   0  1 14592 254 63  217985985
 5 L Linux RAID            1024   1  1  3573 254 63   40965687 [md0]
   X extended              3574   0  1  4210 254 63   10233405
 6 L Linux RAID            3574   1  1  4210 254 63   10233342 [md1]
   X extended              4211   0  1 14592 254 63  166786830
 7 L Linux                 4211   1  1 14592 254 63  166786767








[  Type  ]  [  Boot  ]  [  Quit  ]
                              Boot sector recovery

FAT32ブートセクタの修復

TestDiskはFAT32のブートセクタを修復することができる。最も簡単な方法は、バックアップブートセクタを使ってブートセクタを書き換える方法である。TestDiskはオリジナルとバックアップの両方のブートセクタを調べる。もしも、2つのブートセクタが同一でない場合には、

Dumpはオリジナルとバックアップの両方のブートセクタを、16進数表示、アスキー表示で表示する機能である。

オリジナルのブートセクタが誤って他のデータで上書きされて損傷してしまった場合には、近くに存在するバックアップブートセクタも同様に上書きされてしまっている可能性が高い。

NTFSの場合には、パーティションの先頭と末尾にオリジナルとバックアップのブートセクタが分かれて存在しているので、何かのトラブルで一緒に上書きされてしまう可能性が小さい。FAT32の場合は6セクタしか離れていないので、一緒にやられてしまう危険性が高いと言えるだろう。

このように2つともブートセクタが損傷してしまった場合でも、TestDiskは新しくブートセクタを作り直す機能があり、この問題に対処することが可能だ。

ブートセクタを作り直す (RebuildBS機能)

FAT12やFAT16ではバックアップブートセクタが存在しないので、もしもブートセクタが損傷してしまったら作り直すしかない。FAT32の場合でも両方やられてしまった場合には同様で、作り直すしかない。TestDiskでブートセクタを作り直すには、[RebuildBS]メニューを選ぶ。選んだだけではHDDに書き込んだりしないので安心してよい。[List]機能で正しくフォルダ・ファイルのリストが表示されたのを確かめてから[Write]操作をすることで、初めてHDDに変更が反映されるのだ。

TestDisk 6.2-WIP, Data Recovery Utility, November 2005
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda - 120 GB / 111 GiB - CHS 14593 255 63
     Partition                  Start        End    Size in sectors
 1 * FAT32                    0   1  1  1010 254 63   16241652 [NO NAME]
Boot sector
OK
Backup boot sector
OK
Sectors are identical.










[  Quit  ]  [Rebuild BS][  Dump  ]  [Repair FAT]

                            Return to Advanced menu

RebuildBS機能に関する技術的情報

この項目はかなり専門的な情報を含んでいるが、TestDiskがプログラム内部でどのように振舞うかという技術資料なので、通常のユーザーにとっては知らなくてもかまわない情報である。これを理解するためには少なくてもFATの仕組みや、ディスクパラメータの項目についての知識を要する。参考リンクとして、
ZOUDA ShumpeiさんのFAT32 memo
KabaVM SystemさんのFAT FS フォーマットの実装についての覚え書き
を紹介しておく。なお、FATと言う用語は、パーティションの形式を指す場合と、File Allocation Tableを指す場合があり、1つの文中でも、しばしば混用されるので、どちらの意味で用いられているのかを常に気をつけて読む必要がある。

FATのブートセクタを再構築する際に、TestDiskは

ということを前提としている。

具体的手順は

FAT12/16の場合には、予備のセクタは1(ブートセクタのみ)と判断する。もしも見つかったのが2番目のFATだけならば、FATの総セクタ数を導き出す。FAT32の場合で32セクタないし33セクタで始まる最初のFATが見つかったならば、それを予備のセクタ数とする。

そのうちの最初の2つをFATとそのコピーとみなし、予備のセクタ数・FATの総セクタ数を決める。

ディレクトリエントリにたいしてinode情報を使って、クラスタサイズを得て、最初のクラスタの開始点を求める。クラスタ数からFAT12/16/32を見極め、FAT12/16であれば予備のセクタ数を1と決める。ルート・ディレクトリ情報の数(FAT12/16では512個)を探し、FATの総セクタ数を求める。

ユーザーは[List]機能を使って確認することもできる。

ファイルアロケーションテーブルの修復

ファイルアロケーションテーブルはデータの位置情報の集積体だ。どのクラスタが、どのファイルやディレクトリによって使われているかという情報が記録されている。このFATを修復するためには、[Repair FAT]を選ぶ。TestDiskは2つのFATを比較する。(セクタ単位でのチェックで)不整合があったり、エラーが見つかった場合には、エラーのより少ない方のFATを残し、明らかにエラーがある方は取り除く。この機能は、ブートセクタの数値が正しい場合にのみ使われなければならない。スキャンディスクやチェックディスクではファイルシステムを修復できなかった時においても、良い結果をもたらす可能性がある。


「TestDisk非公式ヘルプ」目次へ