
本工具设计用于操作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系统连续读取,可能已损坏。
要恢复已删除的目录,记下其簇号并按上面的方法提取:
# 如果你的已删除目录簇号是 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
这将给出簇的地址(簇在文件系统中的偏移量)以及两个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
这将把 124 写入簇 123 的下一个簇值。
你还可以使用 -t 选择表,0代表两个表,1代表第一个,2代表第二个。
你可以使用 -2 查看两个FAT的差异:
# 查看差异
$ fatcat disk.img -2
Comparing the FATs
FATs are exactly equals
# 仅在FAT1的第500个簇中写入123
$ fatcat disk.img -w 500 -v 123 -t 1
Writing next cluster of 500 from 0 to 123
Writing on FAT1
# 查看差异
$ fatcat disk.img -2
Comparing the FATs
[000001f4] 1:0000007b 2:00000000
FATs differs
It seems mergeable
你可以使用 -m 合并两个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 许可