Analyseメニュー

TestDiskはHDDを検索したり、情報(LBAサイズやCHSジオメトリ)を入手するために、BIOS(INT13Hのような割り込み命令)やOS(WindowsのAPIなど)の機能を利用する。瞬時にHDDの構成を調べてパーティションテーブルと比較し、エラーがないか確認する。もしもパーティションテーブルにエラーがあったならば、TestDiskを使って修復することが出来る。パーティションを見失ったり、たとえ丸ごとパーティションテーブルの情報が消えてしまったとしても、TestDiskはパーティションを探し出してきて、新しいパーティションテーブルを作り出すことが可能である。もしも必要とあらば、新しいMBR(ブートストラップローダ)を作ることさえ可能なのだ。

だが、TestDiskが見つけ出してきたパーティションの候補リストを吟味して、どの候補がトラブル直前まで使用していた正しいパーティションであるのかを選び出すのは、ユーザーの眼力にかかっている。特に、今までに何回もパーティションを切りなおされたHDDを対象としてDeeper Searchをかけた場合には、TestDiskは、乱立した多数の候補を表示する可能性が高いので、取捨選択能力をいっそう求められる。以前に使われていて今は消されてしまったパーティションの情報でさえも、TestDiskは重要セクタの残骸から見つけ出してくるからだ。

Analyse

TestDisk 6.5-WIP, Data Recovery Utility, October 2006
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda - 120 GB / 111 GiB - CHS 14593 255 63
Current partition structure:
     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






*=Primary bootable  P=Primary  L=Logical  E=Extended  D=Deleted
[Proceed ]  [ Backup ]

                            Try to locate partition

失われたパーティションを復旧するために、HDDの現在のパーティション構造を分析し、パーティションを検索する。

パーティションのチェック

TestDiskはパーティション構成をクイックチェックする。扱うことの出来るパーティションテーブルの形式は、Intel・Mac・無形式(パーティションのない小さなメディアのような場合)・Sun・XBoxである。

Windowsの場合はIntelを選ぶ 

Intel形式のパーティションテーブルの場合は、MBRに存在するテーブルと、拡張領域が存在する場合には拡張パーティションブートレコードから成り立っている。MBRのパーティションテーブルは4つまでのエントリを持つことができ、そのうちの最大1つのエントリを、(複数の論理領域を含んだ)拡張領域のものとすることができる。拡張領域というのは論理領域の器(コンテナ)のようなものだと考えればよい。MBRや拡張パーティションブートレコードといったセクタは、終端が0x55 0xAA という2バイトで終わっていなければならない。(x86 CPUはリトルエンディアンであるから、本当は0xAA55)

パーティションテーブルの各エントリは16バイトからなっており、

情報の種類 バイト数
ブートインディケータ 1
開始位置(CHS) 3
システムID 1
終了位置(CHS) 3
開始位置(LBA) 4
総セクタ数(LBA) 4

のような構成になっている。ブートインディケータが80になっている領域がアクティブ(ブータブル)な基本領域であって、最大でも一つの領域にしか付けることができない。CHS規格はシリンダに関して最大1024(0〜1023)に制限されており、これが有名な8GBの壁の原因になっている。(1024*255*63 = 16450560 sectors = 8422686720 バイト)

現代のOSやBIOSはデータアクセスにLBA方式を使うが、FAT12/16/32のブートセクタは、いまだにCHSジオメトリとの関連を捨て切っていない。TestDiskは、それぞれの値がきちんと規格に合っているか、たとえば、1未満の数値がセクタ値になっていないか、逆に1ヘッドあたりのセクタ値(通常の場合63)を上回るような数値になっていないかをチェックする。

LBAの開始位置・総セクタ数が、CHSの開始位置・終了位置と矛盾していないかもチェックする。全てのパーティションの終了位置がHDDの容量を超えた位置にないかどうか、互いの領域が重なり合っていないかもチェックする。

 LBAとCHSの比較であるが、先頭から8GB以降の位置はCHSに制限があるため単純な比較をすることはできない。比較方法の詳細は、Intelパーティションテーブルの解説ページを参照のこと。参照先の原則を満たしているかどうかをチェックしているわけだ。

ファイルシステムのチェック

ファイルシステムの形式によって、TestDiskはブートセクタに簡易チェックをかける。NTFSやFATの場合には、セクタ末尾に0xAA55のブートシグニチャがあるかどうかというようなチェックだ。このチェックは極めて短時間に、最小限チェックとして完了する。

パーティションの復旧

2番目の段階として、TestDiskはここまでのステップの分析結果に全く影響を受けずに、いちから失われたパーティションを再度検索する。この段階の検索能力こそが、TestDiskのキモと呼べる部分だ。TestDiskはパーティションの存在を求めて、HDDの中の関連のあるセクタをすべてスキャンする。Intel形式(PC/AT互換機)のパーティションテーブルでは、通常の場合、基本領域はシリンダの最初(ヘッド0・セクタ1)から始まり、論理領域は少し後ろ(ヘッド1・セクタ1)から始まる。パーティションの始点となり得るすべてのセクタに対して、よく知られたファイルシステムであることを示す特徴的なヘッダが存在しないかどうか検索する。見つかった情報から、パーティションの領域を推定し、候補のリストとして画面に表示する。

FAT32・NTFSのブートセクタについては、ディスクパラメータのページを参照のこと。ブートセクタが残っていれば、パーティションの始点や総セクタ数・ジオメトリなどの重要な情報が得られることが分かると思う。 

FAT32のパーティションを決定するために、TestDiskは0xAA55というエンドマークを探し、FAT32という文字列を探し、FATのブートセクタに特徴的なマシン語のジャンプ命令である 0xeb 0xXX 0x90 や 0xe9 0xXX 0xXXを探す。(xxは任意のバイトであることを示す)

 0xeb: ショート ジャンプ。 現在のアドレスの-128〜+127番地以内へのジャンプ。
0x90: NOP (何もしない命令)
0xe9: ニアー ジャンプ。同じセグメント内でのジャンプ。

セクタサイズは512バイトで、1クラスタあたりのセクタ数は1,2,4,8,16,32,64,128のどれかで、2つのFATのコピーを持ち、メディアIDはF8でなければならず、マイクロソフトのガイドラインでは意味のないものとされてはいるが、FAT32という文字列が必ず存在する。

領域の全クラスタ数によって、TestDiskはFATの種類を識別をする。(クラスタ数が65525以上ならばFAT32というように)
FAT16にはクラスタ数が65524個までという制約がある。 

FAT32に対しては幾つかの特異的なチェックも実行される。ルートディレクトリの開始クラスタ番号は2から最大クラスタ数までの間の数でなければならないとか、ルートフォルダの項目数や16bit表示の総セクタ数はFAT32では常に0でなければならないとか、FAT32のファイルシステムバージョンは(通常使われないが)00でなければならないとか、である。

NTFSの場合には、TestDiskは、0xAA55のエンドマークとNTFSという文字列、そして幾つかのFAT固有の項目の値がゼロになっていることを確認する。これは、予備のセクタ・FATの数・ルートフォルダの項目数・16bit表示の総セクタ数・32bit表示のFAT32の総セクタ数・FATあたりのセクタ数などのことである。1クラスタあたりのセクタ数はゼロよりも大きな値でなければならない。

FATやNTFSでは、ブートセクタのなかにパーティションのサイズに関する情報が書かれている。

TestDisk 6.5-WIP, Data Recovery Utility, October 2006
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda - 120 GB / 111 GiB - CHS 14593 255 63
Analyse cylinder   1011/14592: 00%


  FAT32                    0   1  1  1010 254 63   16241652 [NO NAME]













  Stop

分析が終了すると、TestDiskは見つかったパーティション候補を一覧表示する。

TestDisk 6.5-WIP, Data Recovery Utility, November 2006
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
* FAT32                    0   1  1  1010 254 63   16241652 [NO NAME]
P Linux                 1011   0  1  1023 254 63     208845 [/boot]
D Linux                 1024   1  1  3573 254 63   40965687
D Linux RAID            1024   1  1  3573 254 63   40965687 [md0]
D Linux                 3574   1  1  4210 254 63   10233342
D Linux RAID            3574   1  1  4210 254 63   10233342 [md1]
L Linux                 4211   1  1 14592 254 63  166786767






Structure: Ok.  Use Up/Down Arrow keys to select partition.
Use LEFT/RIGHT Arrow keys to CHANGE partition characteristics:
*=Primary bootable  P=Primary  L=Logical  E=Extended  D=Deleted
Keys A: add partition, L: load backup, T: change type, P: list files,
     ENTER: to continue
FAT32, 8315 MB / 7930 MiB

表示された候補のファイルシステムが、FAT・NTFS・ext2/ext3・ReiserFSの場合には、キーボードのPキーを押すことで、ルートに存在するフォルダ・ファイルのリストを見ることができる。

*注釈

TestDisk 6.5-WIP, Data Recovery Utility, October 2006
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

   * FAT32                    0   1  1  1010 254 63   16241652 [NO NAME]
Use right arrow to change directory, q to quit
Directory /

-rwxr-xr-x     0     0   805306368 20-Jul-2005 10:35 PAGEFILE.SYS
drwxr-xr-x     0     0         0 14-Feb-2005 22:41 WINDOWS
-r-xr-xr-x     0     0      4952 28-Aug-2001 15:00 Bootfont.bin
-r-xr-xr-x     0     0    251712  3-Aug-2004 22:59 NTLDR
-r-xr-xr-x     0     0     47564  3-Aug-2004 22:38 NTDETECT.COM
-rwxr-xr-x     0     0       212 14-Feb-2005 22:51 BOOT.INI
drwxr-xr-x     0     0         0 14-Feb-2005 22:47 Documents and Settings
dr-xr-xr-x     0     0         0 14-Feb-2005 22:55 Program Files
-rwxr-xr-x     0     0         0 14-Feb-2005 22:56 CONFIG.SYS
-rwxr-xr-x     0     0         0 14-Feb-2005 22:56 AUTOEXEC.BAT
-r-xr-xr-x     0     0         0 14-Feb-2005 22:56 IO.SYS
-r-xr-xr-x     0     0         0 14-Feb-2005 22:56 MSDOS.SYS
drwxr-xr-x     0     0         0 14-Feb-2005 23:02 System Volume Information
-rwxr-xr-x     0     0   536399872 20-Jul-2005 10:36 HIBERFIL.SYS

見つかった候補を取捨選択し、パーティションテーブルを編集することができる。

3通りの編集機能が存在する。

  1. Tキーを使っての、パーティション形式の編集機能。(NTFSとかFAT32などのシステムIDを編集する機能)
    Tキー
  2. Aキーを使っての、パーティション追加機能。
  3. 左右キーを使っての、パーティションの種類を切り替える機能。以下の4つの種類がある。
    記号   種類
    *  アクティブな基本領域
    P  基本領域
    L  論理領域
    D  領域として取り扱わない

編集の状況によって、画面にOKあるいはBadと表示される。

Structure: Ok は、すべて問題がない場合に表示される。2つの拡張領域に挟まれている基本領域が無いこと、アクティブな基本領域が0または1個であること、互いに重なり合う領域が存在しないことなどの要件を全て満たしている必要がある。

パーティションテーブルの編集を完了したならば、Enterキーを押す。もしもユーザーが何か編集操作をした場合には、TestDiskは、編集した結果のデータをHDDのパーティションテーブルに実際に書き込むか([Write])、更に詳細な分析([Deeper Search])に移行するかを尋ねてくる。

Quit
TestDiskのプログラムを実際にHDDに何も書き込むことなく終了する。[Write]を反転させておいてEnterキーを押さない限り、TestDiskは実際の書き込みを行わない。
Deeper Search
Quick Searchでは、いくつかのパーティションを見逃しているかもしれない。Deeper SearchはFAT/NTFSのバックアップブートセクタも対象に含めて、シリンダ単位で精細なスキャンをする。
Write
(ユーザーの操作によって)TestDiskのメモリーバッファの中に作られた情報を、実際にHDDに書き込む選択肢である。もしも結果に自信がなければ、この選択肢を選んではいけない。
Extd Part
論理領域において、(そのコンテナである)拡張領域の使用可能な領域をすべて利用するか、必要な部分にとどめておくかを選ぶものである。
TestDisk 6.5-WIP, Data Recovery Utility, October 2006
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]
 6 L Linux RAID            3574   1  1  4210 254 63   10233342 [md1]
 7 L Linux                 4211   1  1 14592 254 63  166786767









[  Quit  ]  [Deeper Search ]  [ Write  ]

                       Return to main menu

上の画面で[Write]を選ぶと、下の画面のように、本当に書き込んでよいかどうか最終確認を求めてくる。

TestDisk 6.5-WIP, Data Recovery Utility, October 2006
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Write partition table, confirm? (Y/N)

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