

このツールはFATファイルシステムを操作するために設計されており、探索、抽出、修復、復旧、フォレンジックを行うことができます。現在、FAT12、FAT16、FAT32をサポートしています。
fatcatは次のようにビルドできます:
mkdir build
cd build
cmake ..
make
そしてインストールします:
make install
Fatcatはイメージを引数として受け取ります:
fatcat disk.img [options]
注意:ビルドによっては、disk.imgの前にオプションを指定する必要がある場合があります。つまり、fatcat [options] disk.imgとなります。
-Oでファイル内のオフセットを指定できます。これは、ブロックデバイスに複数のパーティションがある場合などに便利です。例:
fatcat disk.img -O 1048576 [options]
これにより、fatcatは1048576バイト目から開始します。パーティションチュートリアルをご覧ください。
-lオプションを使用してFATパーティションを探索できます:
$ fatcat disk.img -l /
Listing path /
Cluster: 2
d 24/10/2013 12:06:00 some_directory/ c=4661
d 24/10/2013 12:06:02 other_directory/ c=4662
f 24/10/2013 12:06:40 picture.jpg c=4672 s=532480 (520K)
f 24/10/2013 12:06:06 hello.txt c=4671 s=13 (13B)
-l /some/directoryのようにパスを指定することもできます。
-Lを使用すると、パスの代わりにクラスタ番号を指定できます。これは時々便利です。
-dを追加すると、削除されたファイルも表示されます。
一覧では、接頭辞fまたはdで、その行がファイルかディレクトリかを示します。
c=はクラスタ番号を示し、s=はバイト単位のサイズを示します(その直後に表示されるサイズと同じはずです)。
末尾の文字hは、そのファイルが隠しファイルであることを示します。
末尾の文字dは、そのファイルが削除されたことを示します。
-rを使用してファイルを読み取ることができます。ファイルは標準出力に書き出されます:
$ fatcat disk.img -r /hello.txt
Hello world!
$ fatcat disk.img -r /picture.jpg > save.jpg
-Rを使用すると、パスの代わりにクラスタ番号を指定できますが、ファイルサイズ情報は失われ、ファイルは収まるクラスタ数に丸められます。読み取るファイルサイズを指定するには-sオプションを使用してください。
-xを使用してFATファイルシステムのディレクトリをディレクトリに抽出できます:
fatcat disk.img -x output/
特定のクラスタから抽出したい場合は、-cで指定します。
-dを指定して抽出すると、削除されたファイルも抽出されます。
上で説明したように、削除されたファイルは-dを指定して一覧表示で見つけることができます:
$ fatcat disk.img -l / -d
f 24/10/2013 12:13:24 delete_me.txt c=5764 s=16 (16B) d
ファイルや興味深い削除ディレクトリを探索して見つけることができます。
削除されたファイルを復元するには、-rで読み取ります。生成されたファイルは元のFATシステムから連続して読み取られますが、壊れている可能性があることに注意してください。
削除されたディレクトリを復元するには、そのクラスタ番号をメモし、上記のように抽出します:
# If your deleted directory cluster is 71829
fatcat disk.img -x output/ -c 71829
関連項目:削除取り消しチュートリアル
ディスクに不良セクタがある場合、復旧を行いたいかもしれません。
最初のアドバイスは、ddrescueを使用してデータのコピーを作成し、ディスクを別のディスクまたは正常なファイルに保存することです。
セクタが壊れている場合、そのバイトはddrescueイメージ内で0に置き換えられます。
最初の方法は、上記のように-lを使用してイメージを探索し、-iでfatcatがディスクをFATシステムとして認識するか確認することです。
次に、-2でファイルアロケーションテーブルが異なるかどうか、マージ可能かどうかを確認します。多くの場合マージ可能です。その場合は-mでFATテーブルをマージできます。その前にバックアップを忘れずに行ってください(以下参照)。
ファイルシステムが壊れると、通常のシステムからアクセスできないファイルやディレクトリ、いわゆる「孤立」したものがあります。
fatcatはそれらのノードを見つけるオプションを提供します。システムの自動分析を行い、ファイルシステムの割り当てられたセクタを探索します。これは-oで行います。
次のようなディレクトリとファイルのリストが表示されます:
There is 2 orphaned elements:
Directory clusters 4592 to 4592: 2 elements, 49B
File clusters 4611 to 4611: ~512B
その後、-Lと-Rを直接使用して、それらのファイルやディレクトリを確認できます:
$ fatcat disk.img -L 4592
Listing cluster 4592
Cluster: 4592
d 23/10/2013 17:45:06 ./ c=4592
d 23/10/2013 17:45:06 ../ c=0
f 23/10/2013 17:45:22 poor_orphan.txt c=4601 s=49 (49B)
孤立ファイルのサイズは不明であることに注意してください。つまり、読み取るとクラスタサイズの倍数のファイルが得られます。
関連項目:孤立ファイルチュートリアル
fatcatを使用してFATファイルシステムをハッキングできます
-iフラグはファイルシステムに関する多くの情報を提供します:
fatcat disk.img -i
これにより、セクタサイズ、FATの場所、ディスクラベルなどのヘッダデータが得られます。また、FATテーブルを読み取ってディスクの使用状況を推定します。
-@を使用して特定のクラスタに関する情報を取得することもできます:
fatcat disk.img -@ 1384
これにより、クラスタアドレス(ファイルシステム内のクラスタのオフセット)と、2つのFATテーブルにおける次のクラスタの値が得られます。
-bを使用してFATテーブルをバックアップできます:
fatcat disk.img -b backup.fats
そして-pを使用して書き戻します:
fatcat disk.img -p backup.fats
-wと-vでFATテーブルに書き込むことができます:
fatcat disk.img -w 123 -v 124
これにより、123の次のクラスタの値として124が書き込まれます。
-tでテーブルを選択することもできます。0は両方のテーブル、1は最初、2は2番目です。
-2を使用して2つのFATの差分を確認できます:
# Watching the diff
$ fatcat disk.img -2
Comparing the FATs
FATs are exactly equals
# Writing 123 in the 500th cluster only in FAT1
$ fatcat disk.img -w 500 -v 123 -t 1
Writing next cluster of 500 from 0 to 123
Writing on FAT1
# Watching the diff
$ fatcat disk.img -2
Comparing the FATs
[000001f4] 1:0000007b 2:00000000
FATs differs
It seems mergeable
-mを使用して2つのFATをマージできます。テーブルの各エントリで、一方がゼロでもう一方がゼロでない場合、非ゼロの値が選択されます:
$ fatcat disk.img -m
Begining the merge...
Merging cluster 500
Merge complete, 1 clusters merged
関連項目:FAT修正チュートリアル
FatcatはFATチェーンが壊れたディレクトリを修正できます。
これを行うには、-fを使用します。ファイルシステムツリー全体が走査され、FATで未割り当てだがfatcatが読み取れるディレクトリがFAT内で修正されます。
-eでエントリに関する情報を取得できます:
fatcat disk.img -e /hello.txt
これにより、エントリのアドレス(ファイル自体ではない)、クラスタ参照、ファイルサイズ(ディレクトリでない場合)が表示されます。
フラグ-c [cluster]を追加してエントリのクラスタを変更し、フラグ-s [size]でエントリサイズを変更できます。
関連項目:FATで遊ぶチュートリアル
-kを使用してクラスタ参照を検索できます。
未割り当てセクタのデータを、-zでゼロ、または-Sでランダムデータを使用して消去できます。
例えば、削除されたファイルは読み取り不能になります。
MITライセンスの下で提供されています。