記事が大きいことが判明したため、私はそれを部分に分割しました。 最初の部分では、FAT32デバイスと、最初のテスト(FATテーブルの前にすべてが削除された)でデータを回復する方法について説明します。
FAT32でファイルにアクセスする方法
幸いなことに、データがFAT32内に保存される方法の表面的な説明から始めます。幸いなことに、その構造は他のFSと比較して非常に単純です。 フラッシュドライブに\ documents \ Secret.docというファイルがあるとします。 このドキュメントのデータを読み取るために、ファイルシステムドライバーがどのパスを通過するかを把握します。
USBフラッシュドライブをコンピューターに接続すると、OSが最初にチェックするのはその0セクターです。 ほとんど常に、 マスターブートレコード(MBR)を記録します。これには、パーティションで占有されているセクターの範囲がリストされます。 フラッシュドライブにはほぼ常に1つのセクションがあり、通常はセクター63または2048で始まり(常にではありません)、使用可能なスペースのほぼすべてを占有します。
パーティションのタイプを示すバイトマークがMBRに書き込まれます。 FAT32では、0x0Bまたは0x0Cです。 次に、BootFAT32を配置するパーティションの最初のセクターを読み取る必要があります。 それから多くの有用な情報を学ぶことができます。
- クラスターサイズ(FSが動作するブロック);
- FATテーブルの数、サイズ、および場所(通常1または2、目的については後で説明します)。
- クラスタリング領域の始まり-クラスターに分割され、ユーザーデータの記録に使用できる領域。
- ルートディレクトリを持つクラスター、ルート(多くの場合、これは2番目のクラスターです)*。
*注:FAT32では、クラスタリング領域は2番目のクラスターから番号付けされます。つまり、ルートは多くの場合、この領域の最初に配置されます。
FATの各フォルダーは、FATフォルダー(またはFATディレクトリ)と呼ばれるリスト構造に対応しています。 これは、特定のディレクトリに含まれるサブディレクトリとファイルのリストです。 リストの各要素には、名前、ファイルのサイズ、作成日、削除日、変更日、属性、開始クラスター(ファイルの先頭またはサブディレクトリに対応するFATフォルダー構造の場所)が含まれます。
後で使用する重要なポイント。 ルートを除くすべてのFATディレクトリは、2つの標準要素で始まります。 これらは自分自身の記述子です。 および親 '..'。 そして、他のすべてのサブディレクトリとファイルの詳細な記述子。 つまり 現在のクラスターの番号を確認できます(開始クラスターは「。」にあります)。また、階層の1レベル上に移動することもできます(「..」ディレクトリに移動します)。
そこで、ルートディレクトリを見つけて分解し、その中に「documents」という名前のサブディレクトリのエントリを見つけました。 指定されたクラスターに切り替えて、「ドキュメント」フォルダーの内容を見つけ、対応するFATフォルダーをソートしました。 彼らは、ファイル「Secret.doc」の記述子を見つけました。この記述子から、とりわけ、ファイルの最初のクラスターとファイルサイズを学習しました。
すべてのファイルが連続している場合、ファイルデータを読み取るにはこれで十分です。 ただし、断片化されたファイルについては、プレースメントを作成する必要があります。 FATテーブルは、ファイルに関連するクラスターを整理するために必要なものです。 「TopSecrect.doc」がクラスターNo. 100で始まる場合、テーブルの100番目のセルで、次にどのクラスターを取るかが示されます。 ファイルの2番目のクラスターです。 チェーンに沿ってなど。 終了マーカーは、クラスターのチェーンの最後にあります。 また、空きクラスターには特別な値0がマークされます(0クラスターがないことを覚えていますか?)。FATテーブルは、パーティション内の空き/占有スペースの追跡にも役立ちます。
( technet.microsoft.comからの写真)
FAT32デバイスに多少なりとも精通しているので、その処理方法を推測できます。
テスト1:ブーツなし
最初のテストは、FATテーブルの開始前にすべてが消去されたことです。 これは、BootFAT32とそのコピー(ある場合)を失ったことを意味します。 また、彼らには役に立つ情報もたくさんあります。 しかし、復元するのは難しいですか? 簡単なことがわかりました。
FATテーブルから始めます。 どこでそれらを探すべきか正確にはわかりませんが、それらが何であるかは知っています。 幸いなことに、テーブルには認識可能で検証可能な構造があります。 検索は、次の観察に基づいています。
- FATテーブルには特徴的な始まりがあります(0番目と1番目の「神話」クラスターを覚えていますか?)-多くの場合0xF8FFFF0FFFFFFFFF
- FATテーブルのセル(4バイトの符号なし整数)には、サービス値を含めるか、パーティションのサイズによって制限されます。
- さらに、FATテーブル全体に同じ値を設定しないでください(サービス値を除く)。
- テーブル内の多くのセルについて、セルNには値N + 1が含まれている、つまりクラスターNの後にクラスターN + 1があると主張できます。 これは純粋にヒューリスティックな観察です。 FSドライバーは引き続きデータを継続的に配置しようとするため、これは事実です。
したがって、1つまたは複数のテーブルFATを見つけて、そのサイズ(少なくとも重要な部分のサイズ)を決定することもできます。 多くの場合、最後のテーブルの直後にルートディレクトリが配置され、同時にクラスター化領域の先頭に配置されます。 この仮定を確認できますが、より普遍的な方法があります。
ルートディレクトリを除くすべてのFATディレクトリが2つの標準エントリで始まることを覚えていますか? したがって、これらのレコードを使用すると、他のすべてのデータの中から非常に適切に見つけることができます。 2つのディレクトリのみが見つかった場合、2組の値を取得します: (LBA1、ClusterNo1)、(LBA2、ClusterNo2) 。 そして、これは割合に関する学校の課題であり、そこからすぐにクラスターサイズを見つけます
およびクラスタリング領域の始まり(「食べた」クラスター0および1を思い出してください)ClusterSize = (LBA1-LBA2)/(ClusterNo1-ClusterNo2)
ClusterizationStart = LBA1 – (ClusterNo1-2)*ClusterSize
ルートを見つけることは残っています。 どのディレクトリにも、親ディレクトリ「..」に関するエントリがあります。 階層を上っていくと、すぐにルートに到達します(たとえば、エントリ '。'および '..'の不足によって認識されます)。
最初のテストの結論
少し試してみる必要がありましたが、完全なデータリカバリに必要なものはすべて見つかりました。FATテーブル、クラスタリングエリアの開始、クラスターサイズ、ルートの位置です。 そのような損害については、ほとんどの場合、データの100%を返すことができる(以前と同じFSを取得する)テクニックがあり、 永遠に失われたままであると主張することができます。または、FATテーブルの検索に問題がありました。 ただし、このような状況はかなりまれです。
PS
FAT32にデータを保存するための形式は、 Microsoft Extensible Firmware Initiative FAT32 File System Specificationに記載されています。
technetに関する詳細度の低い説明: FATファイルシステム
この記事の続き