FAT对于FAT文件系统来讲是至关重要的,它有两个作用:一是描述一个簇的分配状态,二是用于寻找文件或目录的下一个簇。FAT表的丢失将会使数据恢复工作变得非常困难。本部分将讲述正常情况下如何寻找到FAT并介绍FAT的特征。
在FAT文件系统中通常会有两个FAT,引导扇区中会给出它的准确个数(1个或2个)。FAT1起始于保留扇区之后,保留扇区数由引导扇区中给出,引导扇区中还会给出每个FAT的大小扇区数。如果有FAT2,则FAT2紧跟在FAT1之后。
FAT由大小相等的FAT项组成,没有头脚值。文件系统版本不同,每个FAT项的大小也不同。FAT12的FAT项大小为12-bit,FAT16的FAT项大小为16-bit,FAT32的FAT项大小为32-bit。FAT项地址从0开始编号,每个FAT项对就于编号相同的簇地址(但簇地址没有0号和1号,而是从2号开始的)。
如果一个簇没有被分配使用,它对应的FAT项为0。如果一个簇已经被分配使用,则它对应的FAT项将包含文件或目录的下一簇的簇号。如果它是文件或目录的最后一簇,则它的FAT项中将会记录一个文件结束标记,这个值可以是大于以下值的任意值:FAT12下大于0xff8,FAT16下大于0xfff8,FAT32下大于0x0fff fff8。如果一个FAT项值为以下值,则表示它所对应的簇为坏簇,不能分配使用:FAT12下为0xff7,FAT16下为0xfff7,FAT32下为0x0fff fff7。
前面讲过,文件系统中的簇是从2开始编号的,所以FAT中的0号项和1号项不被簇使用。0号项通常用来存放一个介质类型的拷贝,1号项则通常用于存储文件系统的脏标志。在引导扇区中也有一个介质类型值,但Windows可能并不使用,而是使用0号FAT项中的这个标志值。脏标志用来标志一个文件系统没有被完全卸载(非正常关闭)或者遇到硬件表面错误。但这个标志并不重要,有时也并准确。
下面是FAT表的部分内容,我们用它来对FAT项加以说明:
# dcat –f fat fat-4.dd 38 | xxd
[REMOVED]
0000288: 4900      0000      4A00      0000      4C00     0000     0000     0000     I...J...L.......
0000304: 4D00      0000      FFFF     FF0F     4F00     0000     FFFF    FF0F   M.......O.......
0000320: 5100      0000      5200      0000      FFFF     FF0F    FFFF    FF0F     Q...R...........
0000336: FFFF     FF0F     0000      0000      0000      0000     0000     0000 ................
0000352: 0000      0000      0000      0000      0000      0000     0000     0000 ................
这是一个FAT32文件系统的FAT,所以每个FAT项占用4个字节,界面中显示的第一个FAT项的值为73(0x0000 0049),这个项本身所处的位置是偏移288,我们可以将其除以4(每FAT项字节数),得到它对应的簇号为72,因此我们得知72号簇已经被分配使用,且该文件的下一簇为73号簇。
我们还可以看到字节300~303处的FAT项以及340以后的FAT项都为0,说明这些项所对应的簇没有被分配使用。在本例中,300~303字节对应75号簇,340字节处的项对应85号簇。