1.4 FAT 表
从 FAT 表开始便是文件系统的核心内容,文件占用磁盘的最小单位是簇。即使文件只有一个字节,那么它
也占用一个簇的磁盘空间,大文件会占用多个簇。同一个文件的数据并不是连续的存放在一段磁盘空间内,
而是分成若干段,像链子一样存放,称之为文件的链式存储。为了实现文
件的链式存储,文件系统必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后
继的下一个簇的簇号,对于文件的最后一簇,则要指明本簇无后继簇。这些都是由 FAT 表来保存的,FAT
表对应表项中记录着它所代表的簇的有关信息:诸如是空,是不是坏簇,是否是已经是某个文件的尾簇等。
对于 FAT 表而言,它的重要使命是:描述簇的分配状态以及标明文件或目录的下一簇的簇号。
1.4.1 FAT 表分析
FAT 表中每簇的地址固定为 32bit,按四字节对其进行划分。并由 0 开始进行编号。0 号和 1 号簇由系统
保留作特殊使用,从 2 号簇开始对应文件系统的实际数据区的簇号,FAT 表中的簇地址编号与数据区的簇
号相同。
在创建文件系统(格式化)时,所有的 FAT 表均被清空,FAT1 和 FAT2 的 0、1 号表项写入特定值,2 号
表项常为根目录,因此 2 号表被写入结束标志。
① FAT32 文件系统 FAT 表的 0 号表项固定为 0x0FFFFFF8;
② 1 号表项正常情况为 0xFFFFFFFF 或 0x0FFFFFFF,也可能被用于记录脏标志,以说明文件系统没有被
正常卸载或者磁盘表面存在错误;
③ 若簇未被分配使用,则其 FAT 表项为 0;
④ 若该簇被使用,那么 FAT 表项值就是该文件下一个存储位置的簇号,如是文件结束簇,则写结束标志
“0x0FFFFFFF”;
⑤ 若该簇存在坏扇区,则用“0xF7FFFFF”标记该簇为坏簇;
⑥ 新建目录时,只为其分配一个簇的空间,对应的 FAT 表现写入结束标志,当目录超过一个簇时则在空
闲区再为其追加一个簇并重新建立 FAT 表链。
1.4.2 FAT 表实例
图 5 是一个 SD 的 FAT32 文件系统 FAT 表,每四个字节一组表示一个簇的信息,簇号从 0 开始。