2.1 FAT文件系统简介 FAT(File Allocation Table,文件分配表)文件系统是windows操作系统所使用的一种文件系统,它的发展过程经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值为64个扇区,即32KB。所有簇从2开始进行编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。 本文每簇4KB大小。 FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项: 文件分配表:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多余一个簇的空间,则用FAT表来描述,如何找到另外的簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统之间的主要区别在与FAT项的大小不同。 目录项:FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。 在FAT文件系统中,文件系统的数据记录在“引导扇区中(DBR)”中。引导扇区位于整个文件系统的0号扇区,是文件系统隐藏区域(也称为保留区)的一部分,我们称其为DBR(DOS Boot Recorder——DOS引导记录)扇区,DBR中记录着文件系统的起始位置、大小、FAT表个数及大小等相关信息。在FAT文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。这是因为只有存储用户 数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有簇都位于数据区。其他文件系统管理数据区域是不以簇进行管理的,这部分区域使用扇区地址进行管理。文件系统的起始扇区为0号扇区。 2.2 FAT32文件系统结构
FAT文件系统整体分布如上图 存储器文件结构图 所示,有: 【1深绿色】保留区含有一个重要的数据结构——系统引导扇区(DBR)。FAT12、FAT16的保留区通常只有一个扇区,而FAT32的保留扇区要多一些,除0号扇区外,还有其他一些扇区,其中包括了DBR的备份扇区。 【2黄色】 FAT区由来年各个大小相等的FAT表组成——FAT1、FAT2,FAT2紧跟在FAT1之后。 【3灰色】 FAT12、FAT16的根目录虽然也属于数据区,但是他们并不由簇进行管理。也就是说FAT12、FAT16的根目录是没有簇号的,他们的2号簇从根目录之后开始。而FAT32的根目录通常位于2号簇。 2.2.1 保留区(深绿色区域)FAT32文件系统的开始部分有一个由若干个扇区组成的保留区,保留区的大小会记录在DBR扇区中,比较常见的为32、34或38个扇区。如上图:由DBR中)0x0e和0x0f两个地址的数值决定,记得是小端模式,即N的值。 2.2.1.1 引导扇区(DBR)【大小】:512字节; 对读写FAT文件系统来说常用的就图中红色划线部分,48个字节。其他的均为一些标注信息。想了解具体的定义请看附录表。 图7 【1】0x00~0x02:3字节,跳转指令。 【2】0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOC5.0。 【3】0x0B~0x0C:2字节,每扇区字节数,512(0X02 00)。 【4】0x0D~0x0D:1字节,每簇扇区数,8(0x08)。 【5】0x0E~0x0F:2字节,保留扇区数,38(0x00 26),符合FAT1起始地址为38扇区。
【6】0x10~0x10:1字节,FAT表个数,2。 【7】0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数; 【8】0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。 【9】0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质,常用的 0xF0。 【10】0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。 【11】0x18~0x19:2字节,每磁道扇区数,只对于有“特殊形状”(由磁头和柱面每 分割为若干磁道)的存储介质有效,63(0x00 3F)。 【12】0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,255(0x00 FF)。 【13】0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,8192(0x00 00 20 00),与MBR中地址0x1C6开始的4个字节数值相等。
【14】0x20~0x23:4字节,文件系统总扇区数,7736320(0x 00 76 0C 00),7736320 * 512 = 3960995840 ≈ 3.67GB。 【15】0x24~0x27:4字节,每个FAT表占用扇区数,7541(0x 00 00 1D 75)。 【16】0x28~0x29:2字节,标记,此域FAT32 特有。 【17】0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。 【18】0x2C~0x2F:4字节,根目录所在第一个簇的簇号,2。(虽然在FAT32文件系统 下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)
【19】0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号1,该扇区为操作 系统提供关于空簇总数及下一可用簇的信息。 【20】0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统 的6号扇区。 【21】0x34~0x3F:12字节,用于以后FAT 扩展使用。
【22】0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不 同的位置而已。 【23】0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不 同的位置而已 。 【24】0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过 两者位于启动扇区不同的位置而已 【25】0x43~0x46:4字节,卷序列号。通常为一个随机值。 【26】0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷 标,会保存在此。 【27】0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。 ★【28】0x5A~0x1FD:90~509共410字节,未使用。该部分没有明确的用途。 【29】0x1FE~0x1FF:签名标志“55 AA”。 ★说明:引导代码 FAT文件系统将引导代码与文件形同数据结构融合在一起,FAT32文件系统引导扇区的512字节中,90~509字节为引导代码,而FAT12/16则是62~509字节为引导代码。同时,FAT32还可以利用引导扇区后的扇区空间存放附加的引导代码。一个FAT卷即使不是可引导文件文件系统,也会存在引导代码。 2.2.1.2 FSInfo信息分区FAT32在保留区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量以及下一可用簇的簇号等信息,以供操作系统作为参考。FSINFO信息扇区一般位于文件系统的1号扇区,结构非常简单。FSINFO信息扇区结构。 图8
【1】0x00~0x03: 4个字节,扩展引导标志“0x52526141”。 【2】0x04~0x1E3:480个字节,未使用,全部置0。 【3】0x1E4~0x1E7: 4个字节,FSINFO签名“0x72724161”。 【4】0x1E8~0x1EB: 4个字节,文件系统的空簇数,964466(0x00 0E B7 72)。 【5】0x1EC~0x1EF: 4个字节,下一可用簇号(0x 00 00 00 15)。 【6】0x1F0~0x1FD: 14个字节,未使用。 【7】0x1FE~0x1FF: 2个字节,“55 AA”标志。
|