TestDisk ステップ バイ ステップ

このページでは、消失したり損傷したりして正常にアプローチできなくなってしまったパーティションを、TestDiskを使って修復する手順の一例を示す。

今回のトラブルの概要

36GBの容量を持つHDDを、3つのパーティション(基本領域1つと拡張領域の中の論理領域2つの合計3つ)に分割して使用していた。ところが

このトラブルに対する具体的な修復手順を示すことによって、TestDiskの基本的な使い方をお示ししたい。今回扱うものはファイルシステムがNTFSの例であるが、FAT32の場合であっても手順は変わらない。

 基本的なTestDiskの操作方法
  • 管理者権限のあるユーザーとしてTestDiskを実行すること
  • 項目の選択は、キーボードの矢印キーやPage Up/Page Downキーを用いること。
  • 選択項目を確定して実行する時はEnterキーをつかうこと。
  • 前画面に戻る時や終了するときはQキーを押すこと。
  • Yes/Noの選択を求められた時は、Yキー/Nキーを使うこと。
  • 実際にデータを書き込むときには、[Write]を選びEnterすること。

トラブルの具体的な症状

Windowsのブート領域が損傷しているため、Windowsが起動しない。このトラブルを抱えたHDDを別の正常なWindows XPが搭載されたパソコンのセカンダリチャンネルなどに繋ぎなおして、そちらのXPからアプローチした場合には

  1. 先頭の基本領域をディスクの管理(diskmgmt.msc)でみると「未割り当て」になっており、Explorerでアプローチしようとすると、「ドライブ*のディスクはフォーマットされていません。今すぐフォーマットしますか?」という警告が出てしまう。(このとき絶対に「はい」を選ばないこと)
  2. 消えた論理領域のほうは、Explorerからでは見えない。ディスクの管理からは拡張領域の中の「空き領域」として表示される。

ログの作成

TestDiskを起動させると、まず下図のような画面が表示される。ログをどうするかという選択画面である。

ログと言うのは、TestDiskの操作中の画面・分析結果などをテキストファイル形式で保存したものである。TestDiskには、自動的にログを作成し保存する機能がある。上下キーを使って、ログを新規作成するか、前回までに作成したログファイルに追記するか、ログファイルを作らないかを選択する。

ログの作成

対象ディスクの選択

検出された全てのハードディスクが、機種名や容量とともに1行ごとに表示される。

ハードディスクのリスト

もしもこの画面の時に、HDDの容量が正しく認識されていないようであれば以下のことを確認する。

たとえば120GBのはずなのに32GBと表示されている場合、BIOSの設定を確認する。3.5インチIDEのHDDの場合には、32GBに容量を制限するジャンパピンの設定になっていないかも確認する。

もしも130GB以上の容量のHDDなのに130GBしか認識されていない場合には、LBA48をサポートしていない場合がある。「137GBの壁」とか「Big Drive」・「LBA48」などの用語でGoogle検索してみると良い。

パーティションテーブルの形式を選択

パーティションテーブルの形式の選択肢が一覧表示される。

パーティションテーブルの形式の選択

現在のパーティションテーブルの状態

TestDiskのメニューが表示される。

メニュー

すると現在のパーティションの構成が表示される。消失していたりエラーが出ているパーティションがないか吟味してみよう。

Analyse直後の画面

最初の領域が二度重複してリストアップされている。このようなエラーは、パーティションテーブルに異常があるか、ブートセクタが壊れているかによってもたらされている。それから、拡張領域のなかの1つめの論理領域([Partition 2]というラベルの領域)は正常に認識されているが、もう一つあるはずの2つめの論理領域が表示されていない。

Quick Search操作

Vistaかどうかをチェック

TestDiskは瞬時に下図のような結果を表示する。Quick Searchの結果、[Partition 3]というラベルがついた2つ目の論理領域を発見した。

Quick searchの結果

 TestDiskはほとんどが白黒画面だが、上の図では緑色表示されている。緑色で表示されている行は、同じ領域を共有している候補が他には無いということを示している。

パーティションテーブルを保存 または 更なる検索

Deeper Serach画面

Deeper Search

Deeper Searchでは、ブートセクタやバックアップブートセクタがHDD上に残っていないか、セクタをスキャンして検索する。それらのなかには、パーティションの領域を推定できる情報が含まれているからである。

このときに、TestDiskはHDD上の全てのセクタを調べるわけではなく、ブートセクタ・バックアップブートセクタが存在する可能性があるセクタのみを検査する。

シリンダ検査

 パーティションの境界は、シリンダの境界で区切るのが一般的である。CHS表示で書くと n/0/1という位置から始まることになる。(nは自然数) そのほか、マスターブートレコード直後の第1基本領域は0/1/1から始まるし、論理領域は拡張パーティションブートレコードを避けてn/1/1から始まる。MBR直後の最初の領域が拡張領域だった場合には、その中の最初の論理領域は0/2/1から始まるだろう。FAT32のバックアップブートセクタはオリジナルブートセクタの6セクタ後方にあり、NTFSのバックアップブートセクタは領域の最後方セクタに存在する。TestDiskはこれらの重要なセクタが存在する可能性があるセクタのみを拾い出して分析するわけである。

この際に、かつて何回かパーティションの切りなおしをしたHDDの場合には、今は使っていない昔の領域情報を持ったブートセクタが見つかったりする。その結果、互いに領域が重なり合う矛盾した候補が表示されたりするわけだ。Deeper Searchは現在のものであろうと過去のものであろうと、とにかく見つかった領域情報は全てリストアップするので、ユーザーが自分の思考力で正しい候補を選別することが必要になる。

ちなみにTestDiskのGeometryの設定が間違っていると、大前提であるシリンダ境界セクタの位置を誤認識してしまうので、関係ないセクタばかりをスキャンすることになる。これでは正しいブートセクタを見つけられなくなる。

Windows Vistaの場合は例外で、インストールDVDを使ってまっさらなHDDを複数のパーティションに区切ると、シリンダの境界ではなく、2048セクタを1単位としたグループの変わり目で区切る。1セクタは512バイトであるから、2048セクタはちょうど1MBである。つまり、HDDの先頭からきっちりnMBの位置に境界が来るわけである。したがって従来の方法と検索方法を全く変えてやる必要がある。TestDiskの操作中に、パーティション作成にVistaを使ったかどうかを確認されるのは、そのためである。C言語のコードが読める人は、公式サイトからソースを入手して、next.cというファイルを見ると、具体的にどのようにセクタを選んでいるのかが(なんとなく)わかる。

Deeper Searchが終了すると、結果が下図のように表示される。

[Partition 1]とラベルの付いた最初の領域が新たに見つかっている。この行を反転表示させると、画面の最下行に"NTFS found using backup sector!"と表示される。これは、この領域がバックアップブートセクタの情報によって見つかったことを意味している。

それから[Partition 2]というラベルの付いた領域が、異なるサイズで2回リストアップされている。これら2つの候補は同じ領域を共有しており、同時に存在することが出来ないので、行頭の記号はD表示になっており色も緑色表示にはなっていない。

Deeper Searchの結果

 ブートセクタおよびバックアップブートセクタをスキャンして探し出し、その中に記録されている情報からパーティションの領域を導き出すのがTestDiskのAnalyse機能である。もしも今回の例がパーティションテーブルの損傷だけであったならば、上のアクティブな基本領域の情報は、オリジナルブートセクタとバックアップブートセクタの両方の情報によって確認されたはずである。ところが今回の例では、オリジナルが損傷していたため、バックアップのみの情報でしか見つからなかったわけである。Analyse機能によってこのあとパーティションテーブルが復旧されるが、このままではオリジナルブートセクタは壊れたままなので、Windowsは相変わらず起動しない。知識のないユーザーは「ああ、TestDiskでは治せなかったなぁ」と勘違いして終わるだろう。TestDiskがここまでに表示してきた情報をしっかりと読み取って、どうして起動しないのかを正しく理解できている人ならば、さらにもうワンステップの修復作業(TestDiskで言うところのAdvanced機能)をしてはじめて修復作業が完遂することを理解しているので、Analyse作業後に起動しなくても少しも慌てなくて済むわけだ。

ここで1つ言っておきたいことは、TestDiskは画面上に有益な情報を「さりげなく」表示することが多い。今の最下行の情報などはその良い例である。英語表記だからといって毛嫌いすることなく、英語が苦手なら英和辞典を片手に持ちながらでも、書いてあることをよく読んでおくことである。このページのような解説ページには出て来ない様な警告画面が出ることもあるし、作業の流れが解説とは変わってしまうこともある。そういうときにも画面の表示をよく読んでいれば、誤った操作をするようなことが防げると思う。

それから再び緑色表示に関する事だが、上の図では1つ目と4つ目の領域は緑色表示である。これは前述のように、他のどの候補とも領域が重なり合っていないからである。このような候補の場合、行頭の記号は*・P・Lのような領域の種類を示したものになっている。2つ目と3つ目の候補は領域が重なり合っている(同じ始点で始まり3つ目が2つ目を完全に含んでいる状態)ので白色表示のままだ。 このような場合には、ユーザーがどちらか選択してやらねばならないので、行頭の記号もDになっている。Dの意味は「この候補は選択しない」と言う意味なので、この画面をEnterで抜けると次の画面からは出て来ない。残したければ左右キーでD以外の記号に変えておく必要がある。

Pキーでエラー画面

Pキーは、選択している領域のルートに存在するファイル・フォルダを表示させる命令であるが、ファイルシステムが開けないというエラーが出てしまった。[Quit]またはQキーで前画面に戻る。

Pキーでリスト表示

今度はファイルやフォルダのリストが確認できた。こちらが正しい候補だと判断する。

*注釈 FATの場合は10クラスタまでの範囲しかリストに表示されないという制限がある。しかし、この段階で表示されないファイルがあるからといって、実際にリカバリーされないという意味ではないので心配には及ばない。

Lに変更

*注釈 行頭の記号が*(アクティブな基本領域)になっていたとしても、この領域からブートしない場合には、Pに変更しても構わない。

パーティションテーブルの回復

さていよいよ新しいパーティションテーブルを書き込む段階にきた。

*注釈 拡張領域の情報は自動的に書き加えられている。

パーティションテーブルの書き込み

これで、パーティションテーブルの修復まで完了した。

NTFSのブートセクタの修復

[Partition 1]というラベルの付いたアクティブな基本領域は、まだ修復が完了していない。今度はこれを修復する番である。下図を見ると、オリジナルのブートセクタはBad、バックアップブートセクタはOKと表示されている。2つのセクタは異なっている為に、"Sectors are not identical"と表示されている。

Backup BS

 TestDiskには自己診断機能みたいなものがあって、ブートセクタに異常が認められると、自動的に上の画面まで進んでくることがある。自動的に画面が進まないときには起動後、「ログ」→「対象HDD選択」→「パーティションテーブル形式」と進み、メニュー選択画面で[Advanced]を選ぶ。その後ブートセクタを修復したいパーティションを選んでおいて[Boot]を選ぶと、上の画面になる。

ブートセクタ修復後

修復後、再び確認すると、両方ともOKになっている。もちろん"Sectors are identical"になる。NTFSのブートセクタは無事修復された。

再起動

TestDiskは再起動を求めてくる。Enterキーを押し、再起動してHDDからブートし、元通り正常に起動するかを確認しよう。


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