データ修復の例

 このページは、操作画面の図がなく、ログを基に解説している。なおかつ基礎的な記述は省略してある。よって、ある程度TestDiskに習熟している方むけの解説になっている。

フォーマットされていません − FATのブートセクタの修復例

Analyse Disk 80 - CHS 3737 255 63 - 29313 MB (Enh BIOS mode)
1 * FAT32                    0   1  1   382 254 63    6152832 [LOKAL DISK]
2 E extended LBA           383   0  1  3736 254 63   53882010
Partition sector doesn't have the endmark 0xAA55
5 L FAT32                  383   1  1  3736 254 63   53881947
5 L FAT32                  383   1  1  3736 254 63   53881947

FAT32のファイルシステムを持つ、論理領域のブートセクタが損傷してしまった。Explorerでアクセスしようとすると、「フォーマットされていません。今すぐフォーマットしますか?」と表示されてしまう。Advancedメニューで、この領域を調べてみよう。

Interface Advanced
1 * FAT32                    0   1  1   382 254 63    6152832 [LOKAL DISK]
2 E extended LBA           383   0  1  3736 254 63   53882010
5 L FAT32                  383   1  1  3736 254 63   53881947
Boot sector
test_FAT :
Partition sector doesn't have the endmark 0xAA55
Backup boot sector
OK
First sectors (Boot code and partition information) are not identical.
Second sectors (cluster information) are not identical.
Third sectors (Second part of boot code) are not identical.

ブートセクタの位置のセクタにはエンドマークの0xAA55がない。(別のデータによって上書きされてしまい壊れていることを示している) バックアップブートセクタは適正であると表示されている。このような場合には[Backup BS]を選んで、バックアップブートセクタのデータでブートセクタを上書きしてしまおう。もしもバックアップブートセクタもOKではなかったら[RebuildBS]を選ぼう。

パーティションテーブルとNTFSブートセクタの修復例

Analyse Disk 81 - CHS 2434 255 63 - 19092 MB (Enh BIOS mode)
No partition is bootable

ブート可能な領域がないと表示されている。

Analyse Disk 81 - CHS 2434 255 63 - 19092 MB (Enh BIOS mode)
L FAT32                 1275   1  1  2433 254 63   18619272 [NO NAME]

Quick Searchの結果、FAT32の論理領域が1つだけ見つかった。引き続きDeeper Searchに移行しよう。

Analyse Disk 81 - CHS 2434 255 63 - 19092 MB (Enh BIOS mode)
* HPFS - NTFS              0   1  1  1274 254 63   20482812
L FAT32                 1275   1  1  2433 254 63   18619272 [NO NAME]

両方の領域が見つかったが、NTFSの基本領域はバックアップブートセクタの情報で見つかったものである。パーティションテーブルを書き込んで修復した後、[Backup BS]機能でブートセクタを修復してやる必要がある。

DELL製のパソコンの修復例

DELL製のパソコンではDellUtilityと呼ばれる特別な領域がある。それはFAT16のパーティションで、システムIDがDEになっているため、Windowsからは未知の形式となって確認できない領域となっている。(ちなみにFAT32は0B、NTFSは07というシステムIDである)

Disk 80 - CHS 4865 255 63 - 38162 MB (Enh BIOS mode)
* FAT16 >32M               0   1  1     3 254 63      64197 [DellUtility]
P HPFS - NTFS              4   0  1  4864 254 63   78091965

Analyseのあと、DellUtilityのパーティションを選び、Tキーを押して、タイプをDEに変更しよう。それから、NTFSのパーティションに合わせて左右キーを使い、P表示から*表示に変更しよう。

Disk 80 - CHS 4865 255 63 - 38162 MB (Enh BIOS mode)
P Dell Utility             0   1  1     3 254 63      64197 [DellUtility]
* HPFS - NTFS              4   0  1  4864 254 63   78091965

Geometryの問題例 − 全てのパーティションの消失

このケースでは、全てのパーティションが見えなくなってしまった。(パーティションテーブルが丸ごと壊れたのが原因) TestDiskは"No Partition is bootable"と示している。TestDiskをコマンドラインオプションをつけて、testdisk /debug /log で実行し、そののちログファイルを調べてみた。

Analyse Disk /dev/hdb - CHS 5169 240 63 - 38161 MB
No partition is bootable
search_part()
Disk /dev/hdb - CHS 5169 240 63 - 38161 MB
FAT32 at 0/1/1
heads/cylinder 255 (FAT) != 240 (HD)

FAT32の領域は見つかっているものの、Geometryのエラーが表示されている。パーティションテーブルが空白だった為に、BIOSが他のHDDのGeometryと取り違えて認識してしまったようだ。このような場合、TestDiskの[Geometry]メニューを選び、240の変わりに255をヘッド値として指定してやり、もう一度[Analyse]しなおしてやる必要がある。

heads/cylinder 255(FAT) != 240(HD)
のようなエラーが画面に表示されたら、TestDiskがGeometryを間違えて認識している可能性がある。TestDiskがどのような仕組みでGeometryを決めているかは別記してある。

ちなみに != というのはプログラマには馴染み深い表現だが、一般的な表現だと≠と考えればよい。「等しくない」と言う意味だ。

FAT32のブートセクタの一部であるディスクパラメータには、1シリンダあたりのヘッド数が記載されている。今回の例では、TestDiskの認識が240、ディスクパラメータの記載が255となっていたので、TestDiskが一応警告を出したわけである。ブートセクタに損傷がなくディスパラメータが元のデータのまま残っている、なおかつトラブル前はそれで正常に動いていたとすれば、ディスパラメータの記載を信じるべきである。

今回の例のように、「Geometryが変だよ」と言うエラーがでた時には、たいていTestDiskが候補となる正しい値を示してくれることがほとんどだ。またTestDiskの[Geometry]メニューで値を変更しても、それはTestDiskのプログラム内部での挙動を変更するだけで、HDD上のデータを上書きしてしまうとか、BIOSの設定を変えちゃうとかいうわけではないので、それほど神経質になる必要はない。もちろん間違った値にしてanalyseし、それによって導き出された不正なデータを[Write]してしまったら、それは更なる破壊ということになってしまう。

2つのFAT32領域の修復例

HDDに2つのFAT32の領域があったのだが消失してしまった。[Analyse]→[Quick Search]さらに[Deeper Search]と進めてみたものの、TestDiskは二番目の領域を見つけたのみだった。

Disk 81 - CHS 525 255 63 - 4118 MB
L FAT32                  384   1  1   524 254 63    2265102

Aキーを使って、手動で失われてしまったと考えられるパーティションの情報を追加し、パーティションテーブルを書き込んで2つのFAT32の領域を作ってみた。

1 P FAT32                    0   1  1   383 254 63    6168897
2 E extended               384   0  1   524 254 63    2265165
5 L FAT32                  384   1  1   524 254 63    2265102

[Advanced]メニューの[Boot]メニューに進み、[RebuildBS]で最初のFAT32の領域のブートセクタを作ろうと目論んだ。しかし、ここで[List]、すなわちこの領域に存在するファイルなどを確認する項目であるが、これをやってみても上手くファイルが表示されないのである。

RebuildBSは、ブートセクタ(正確にはディスクパラメータ)を完全に作り直すというTestDiskならではの目玉機能である。しかしながら、現在のブートセクタを新しく作ったもので上書きして失ってしまうので、トラブルの元はブートセクタにあるとはっきり自信がないと心理的に実行しにくい。でも実は、[RebuildBS]をEnterした段階で即座に現在のブートセクタを上書きしてしまうわけではないのだ。RebuildBSを実行したらすぐに[List]を選び、正しくルートフォルダに存在するファイル名を表示するかどうかで、新しく作ったブートセクタが信頼できるかどうかを判断する余地があるのだ。 信頼に足ると判断できれば、[Write]で書込み操作に移行すればよい。

ログファイルを確認してみると(エキスパートモードにしておかないとこの情報は確認できない)、この領域の中に4つのファイルアロケーションテーブルが見つかっていたことが分かった。

FAT32 at 32(0/1/33), nbr=123
FAT32 at 8221(0/131/32), nbr=123
FAT32 at 16097(1/1/33), nbr=1234
FAT32 at 22100(1/96/51), nbr=1234

通常の場合、1つのFAT32領域について2つ(オリジナル1つとそのコピー1つ)のファイルアロケーションテーブルが存在する。4つ見つかったということは、この領域にもともと異なる2つのFAT32領域が存在していた名残ではないのか?1つは0/1/1から始まり、もう一つは1/1/1から始まる領域ではないのかと言う予想が上のデータから導き出される。どうやら考え方を間違っていたようだ。もう1度正しいと思われるデータをAキーを使って書き込んでみよう。

1 E extended                 1   0  1   524 254 63    8418060
5 L FAT32                    1   1  1   383 254 63    6152832
6 L FAT32                  384   1  1   524 254 63    2265102

その後[RebuildBS]を行って、無事にブートセクタの復旧に成功した。

 TestDiskは、HDDをセクタスキャンして、領域に関する情報を持つセクタの残骸を見つけ出すのが得意なソフトである。しかし一度でも他のデータによってセクタが上書きされてしまえば、いかにTestDiskと言えども正しい情報をはじき出すことはできない。今回の例は、Aキーを使って、ユーザーが抜け落ちた領域に関する情報を、頭脳と手を使って入力する場合の例である。

最初ユーザーは、0/1/1から始まり、見つかっている第2領域の直前までの範囲をしめる基本領域を作っている。しかし[List]機能で確認すると上手くいかない。そこでおかしいなと思ってログを見たところ、FATの位置から、 1/0/1から始まる拡張領域のなかに2つの論理領域があるのではないだろうかと考え直したわけである。

デフラグ後にパーティションが消失した例

第1パーティションに対してデフラグを実行したら、FAT32の第2パーティションが消えてしまった。TestDiskでパーティションテーブルを調べると、第1領域に問題があることと(2度リストアップされている)、論理領域が消えてなくなってしまっていることを示した。

Disk 81 - CHS 1245 255 63 - 9766 MB
check_FAT: Incorrect size of partition
 1 * FAT32 LBA                0   1  1   746 254 63   12000492
 1 * FAT32 LBA                0   1  1   746 254 63   12000492
 2 E extended               747   0  1  1244 254 63    8000370

TestDiskの[Analyse]で検索すると、第一領域はみつかったものの、先程のパーティションテーブルの情報よりも1シリンダ分領域が膨らんでしまっている。デフラグが拡張領域の先頭部分を上書きしてしまい、拡張パーティションブートレコードを消してしまったようだ。

* FAT32                    0   1  1   747 254 63   12016557 [D DRIVE]
D Linux                 1023   1  1  1244 254 63    3566367

ユーザーはFAT32の領域を修復することのみを選択した。その領域のファイルなどのデータのバックアップを取ったのち、1シリンダ分領域を縮めることにした。さて、次は第2領域を修復する番である。ユーザーは、Aキーを使って、手書きで第2領域の情報を書き込んだ。

 1 * FAT32                    0   1  1   746 254 63   12000492 [D DRIVE]
 2 E extended LBA           747   0  1  1244 254 63    8000370
 5 L FAT32                  747   1  1  1244 254 63    8000307

[Advanced]メニューで2番目のFAT32領域を選び、[RebuildBS]を行った。再起動後わずかなファイルシステムチェックがかかったが、無事復旧した。

フォーマットしてしまった領域の修復

もしも、別のファイルシステム(FAT32をNTFSとか、その逆とか)にフォーマットしてしまったら、


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