
FAT32文件系统结构研究.doc
11页FAT32 文件系统结构研究摘 要:Windows98 操作系统引入了FAT32 文件系统,它解决了FAT16 文件系统存在的诸多问题. 但有关FAT32 文件系统技术实质的文章尚不多见. 本文对FAT32 文件系统的结构和技术实质进行了详细分析,揭示了FAT32 文件系统存储和管理文件的算法. 掌握FAT32文件系统的内部结构,可以使读者在更高层次上发挥操作系统的功能.关键词: 文件分配表;文件目录表;文件系统;操作系统 1. 引言 FAT32 是个非常有功劳的文件系统,Microsoft 成功地设计并运用了它,直到今天NTFS铺天盖地袭来的时候,FAT32 依然占据着Microsoft Windows 文件系统中重要的地位FAT32最早是出于FAT16 不支持大分区、单位簇容量大以致空间急剧浪费等缺点设计的文件系统总体上与FAT16 文件系统变化不大,现将有关变化部分简介如下: (1) FAT32 文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT 区) 、文件分配表区(FAT 区) 、数据区(DATA 区) 引导区和文件分配表区又合称为系统区 (2) 引导区从第一扇区开始,使用了三个扇区,保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录。
之后还留有若干保留扇区而FAT16 文件系统的引导区只占用一个扇区,没有保留扇区 (3)文件分配表区共保存了两个相同的文件分配表,因为文件所占用的存储空间(簇链) 及空闲空间的管理都是通过FAT 实现的, FAT 如此重要,保存两个以便第一个损坏时,还有第二个可用. 为了彻底了解FAT32 文件系统对操作系统的哪些方面进行了改变, 本文对FAT32 文件系统的完整结构进行了深入分析,其中包括对构成FAT32 文件系统的主引导扇区(分区扇区) 、分区引导扇区、FAT 和FDT 表4 个结构的分析.FAT32 文件系统带来了很多好处,随着大容量硬盘的日益普及,使用FAT32 文件系统将是大势所趋.2. 对FAT32 文件系统主引导扇区的分析 主引导扇区是硬盘独有的一个磁盘控制数据存储区域,是硬盘独有的一个磁盘控制数据存储区域,其首要功能是存储有关硬盘分区的数据,它通常位于硬盘的0 磁头0 柱面1 扇区由于主引导扇区存放硬盘分区的有关数据,因此又称为分区扇区分区数据对硬盘是至关重要的,分区数据的丢失或破坏将导致硬盘上的逻辑磁盘不能被系统识别,当然也就无法访问磁盘上存储的文件和数据。
2.1 主引导扇区的传统功能与作用 通过对硬盘主引导扇区程序的分析,其中存储的数据主要由以下3 个部分构成: 1) 引导系统启动的程序代码 2) 硬盘的分区数据 3) 主引导扇区的有效标志 主引导扇区的首要功能是存储有关硬盘分区的数据, 保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录,这些分区数据对硬盘是至关重要的. 分区数据的丢失或破坏将导致硬盘上的逻辑磁盘不能被系统识别,当然也就无法访问磁盘上存储的文件和数据.2.2 FAT32 文件系统对主引导扇区的改变 根据对 FAT32 文件系统主引导扇区的分析可知,FAT32 文件系统的主引导扇区在保持与FAT16 文件系统主引导扇区兼容的基础上,针对FAT32 文件系统的特点作了适当扩展FAT32文件系统主引导扇区对分区表数据结构的扩展仅限于增加了3 个标识32 位分区的类型标志,这3 个增加的分区类型标志分别为0BH、0CH 和0EH,用于描述FAT32 文件系统的三种分区情况对于扩展分区,则增加了一个类型标志0FH,表示Windows 98 操作系统扩展分区。
类型标志为0BH 表示分区是FAT32 分区,最大分区容量可以达到2047GB;为0CH 表示的意义与0BH 相同,但是对于INT 13H 指令使用扩展的逻辑块地址(LBA)方式;为0EH 表示的意义与06H 相同,但是对于INT 13H 指令使用扩展的逻辑块地址(LBA)方式;为0FH表示的意义与05H 相同(扩展分区),但是同样对于INT 13H 指令使用扩展的逻辑块地址方式使用扩展的逻辑块地址方式是为了支持容量超过8GB 的大容量硬盘由于文件系统转化为FAT32 后,分区的类型标志变化为0BH、0CH 和0EH,这些新的类型标志是原来FAT16文件系统所不能识别的,所以当用户使用MS-DOS 操作系统的软盘启动系统后,机器不能识别硬盘的分区数据,当然也不能对硬盘的数据进行访问3. 对FAT32 文件系统分区引导扇区的分析 硬盘的主引导扇区,分区表,分区引导扇区(MBR、DPT、DBR、BPB)是电脑BIOS 自检完成后,操作系统开始引导系统前整个电脑运作过程中需要检查的重要参数,硬盘的主引导扇区,分区表,分区引导扇区(MBR、DPT、DBR、BPB)参数错误可能导致系统无法启动或存储的数据丢失,硬盘的0 柱面、0 磁头、1 扇区称为主引导扇区(也叫主引导记录MBR),该记录占用512 个字节,它用于硬盘启动时将系统控制权转给用户指定的、在分区表中登记了某个操作系统分区。
MBR 的内容是在硬盘分区时由分区软件(如FDISK)写入该扇区的,MBR 不属于任何一个操作系统,不随操作系统的不同而不同,即使不同,MBR 也不会夹带操作系统的性质,具有公共引导的特性但安装某些多重引导功能的软件或LINUX 的LILO时有可能改写它;它先于所有的操作系统被调入内存并发挥作用,然后才将控制权交给活动主分区内的操作系统.3.1 FAT16 文件系统的分区引导扇区 FAT16 文件系统分区引导扇区是由引导系统启动的程序代码、逻辑磁盘参数和分区引导扇区有效标志3 个部分构成. 在分区引导扇区中最重要的部分是逻辑磁盘读写(称为I/ O)参数,引导系统启动的程序代码将使用这些参数来访问存储在磁盘上各文件的数据. I/ O 参数从扇区偏移地址O3H 开始存放,共有18 个数据项,占用58 个字节(从扇区偏移地址03H到3DH) .3.2 FAT32 文件系统的分区引导扇区 在Windows 操作系统中,当文件系统从FAT16 转化为FAT32 后,分区引导扇区的功能和作用并没有改变,但是考虑到FAT32 文件系统的特性和为了解决FAT16 文件系统存在的问题,操作系统对FAT32 文件系统的分区引导扇区进行了扩展.3.2.1 分区引导扇区所占的扇区数从1 个扇区扩展为6 个扇区 分区扇区的核心功能是通过磁盘读写参数加载启动操作系统的文件,为了使加载文件的操作更加灵活,加上FAT32 文件系统采用“活动”的FDT 表,需要对分区引导扇区的引导程序代码进行重新的设计. 同时考虑到引导程序的代码量和为今后发展保留适量的余量,FAT32文件系统将分区引导扇区所占的扇区数从1 个扇区扩展为6 个扇区. 当前版本的Windows98使用了前3 个扇区作为系统的分区引导扇区,其余3 个扇区保留暂未使用.3.2.2 采用双重分区引导扇区 根据对分区引导扇区功能和作用的研究,我们知道分区引导扇区对于操作系统的启动和磁盘文件的访问具有至关重要的作用. 引导程序代码的损坏将导致操作系统不能正常启动,磁盘读写参数的破坏将造成存储在磁盘上的文件不能正常读写.由于分区引导扇区的重要性,FAT32 文件系统借鉴系统处理FAT 表的经验,在磁盘保留了两份分区引导扇区,并且在启动时操作系统可以对两份引导扇区进行比较,以便选择正确的引导扇区来引导系统. 由于在磁盘正常工作过程中系统不再对引导扇区的程序和数据进行修改,因此备份的分区引导扇区损坏的可能性非常小.3.2.3 根据FAT32 文件系统的特点对磁盘读写参数作了进一步的扩展 FAT32 文件系统的磁盘读写参数在部分保持与FAT16 文件系统磁盘读写参数兼容的基础上,为了适应FAT32 文件系统的需要,对磁盘读写参数作了适当的扩展,所使用的字节数也从FAT16 文件系统的58 个字节扩展为87 个字节. FAT32 文件系统的磁盘读写参数占用扇区偏移地址03H 至59H 的存储空间,各参数的含义如表1 所示:表1 FAT32 文件系统磁盘读写参数编号 起始偏移地址 占字节数 意义1 03H 8 操作系统的版本号2 0BH 2 每个扇区的字节数3 0DH 1 每簇扇区数4 0EH 2 为操作系统保留的扇区数5 10H 1 FAT 表的个数6 11H 2 是否为FAT327 13H 2 未使用8 15H 1 磁盘介质标志9 16H 2 未使用10 18H 2 每个磁道的扇区数11 1AH 2 磁盘的磁头个数12 1CH 4 分区隐藏扇区个数13 20H 4 逻辑磁盘扇区总数14 24H 4 每个FAT 表所占的扇区数15 28H 2 FAT 表镜像标志16 2AH 2 文件系统主次版本17 2CH 4 磁盘根目录的起始簇号18 30H 2 文件系统参数的扇区号19 32H 2 备份分区引导扇区的逻辑扇区号20 34H 12 保留,21 40H 2 磁盘物理驱动器号22 42H 1 磁盘读写参数扩展标志23 43H 4 磁盘卷的序列号24 47H 11 磁盘卷标号25 52H 8 文件系统的标识号4. 对FAT32 文件系统分区引导扇区的分析 FAT 表是一张磁盘空间分配情况登记表,它以簇号的方式记录了簇的分配情况. 在FAT16文件系统中,通常用2 个字节来标记簇号分配的链表. 对于FAT32 文件系统来讲,其核心的改变就是使用4 个字节来标记簇号分配的链表. FAT32 文件系统的命名就源自系统采用32位的FAT 表结构, 但是FAT 表的变化反而不如其它磁盘控制区域数据的变化大. 除了采用32 位4 个字节作为一个簇的记录项和标记项等参数略有改变外,FAT 表中没有任何其它变化.根据FAT32 文件系统的特点,32 位的FAT 表中以下数据发生了变化.4.1 保留簇的改变 在 FAT16 文件系统中, FAT 表中前4 个字节为保留值,其中第1 个字节作为磁盘的标志.采用4 个字节作为保留值的理论依据来源于系统将编号为0 和1 的两个簇作为保留,文件数据区从第2 个簇开始,故根据簇号链的计算公式: (簇号入口地址= 簇号×2) ,FAT 表的前4 个字节就设计为保留值. 使用与FAT16 文件系统相同的原理,32 位FAT表也将0 簇和1 簇作为保留簇,故FAT 表的前8 个字节为保留值,其中第1 个字节仍然作为磁盘标记. 同时,为了满足特殊文件系统的要求,FAT32 文件系统将第2 个簇也同时作为保留簇,用于记录FDT 表的空间分配簇链登记项.4.2 登记项的改变 32 位的FAT 表用“00000000” 项表示对应的簇号未分配; 用“0FFFFFF8H” 至“0FFFFFFFH”表示对应的簇是文件分配的最后一簇;而“0FFFFFF7H”则表示已损坏不能分配的簇.由于FAT 表中登记项的32 位值中高4 位为保留(总是0) ,故理论上FAT32 文件系统可以表示的最大簇号为268 435 450 (228) ,即用于实际描述簇号的位数为28 位,用前述公式读者不难计算出FAT32 文件系统可以表示的最大磁盘空间.5. 对FAT32 文件系统FDT 表的深入分析 FDT 表的作用是记录文件的主名、扩展名、日期、属性、起始簇号和长度等信息,从记录的内容来看。












