FAT32文件系统的存储组织结构

合集下载

FAT32文件系统结构研究

FAT32文件系统结构研究

收稿日期:2000-07-22作者简介:邓 波(19622),男,副教授FAT32文件系统结构研究邓 波(四川经济管理学院信息及计算机系,四川成都610041) 摘要:Windows98操作系统引入了FAT 32文件系统,它解决了FAT 16文件系统存在的诸多问题.但有关FAT 32文件系统技术实质的文章尚未见诸报端.对FAT 32文件系统的结构和技术实质进行了详细分析,揭示了FAT 32文件系统存储和管理文件的算法.掌握FAT 32文件系统的内部结构,可以使读者在更高层次上发挥操作系统的功能.关键词:文件分配表;文件目录表;文件系统;操作系统中图分类号:TP333 文献标识码:A 文章编号:100128395(2000)06206652051 概述FAT32文件系统实际上就是用32位数据来描述磁盘簇的分配,而传统的磁盘管理是用16个二进制位(2个字节)来描述一个簇.从操作系统的结构上进行分析,可以知道FAT32文件系统并非仅仅简单地将FAT 表转换成32位(即用4个字节来描述一个簇),而是带来了分区和FDT 表及文件系统其它方面的巨大变化.为了彻底了解FAT32文件系统对操作系统的哪些方面进行了改变,本文对FAT32文件系统的完整结构进行了深入分析,其中包括对构成FAT32文件系统的主引导扇区(分区扇区)、分区引导扇区、FA T 和FDT 表4个组件的分析.FAT32文件系统是Windows98操作系统为改善磁盘管理而推出的一项新的文件管理系统.由于它抛弃了与MS 2D0S 操作系统传统的FAT16文件系统的兼容性,采用了一些新的系统管理技术,所以更加适用于微机当前环境下新的硬件机制,必将给文件系统的管理带来新的活力和新的性能.通过理论分析可以知道,FAT32文件系统具有以下特点[1]:(1)FAT32文件系统支持更大的磁盘分区,最大可以支持2048G B 的分区和逻辑磁盘.如此大容量的分区不但可以满足个人计算机的需要,而且可以满足网络服务器对分区大小的需要.(2)FAT32文件系统使用32位数据来描述簇,对于一个2G B 大小的硬盘来讲,理论上每个簇的大小可以是1个扇区(在FAT16文件系统中是64个扇区).按较小的簇空间来进行分配,将大大减少磁盘空间的浪费.当然为了在节约磁盘空间的情况下不降低系统性能,系统实际使用每个簇为4K B 的存储空间分配方案.当磁盘容量超过8G B 时,每个簇为6K B.使用4K B 的簇将使磁盘空间的利用率提高约15%.(3)FAT32文件系统采用浮动的FDT 表,即FDT 表不是固定在磁盘的控制区,而是可以在磁盘中浮动,并且可以根据根目录存储的文件数量调整其长度.(4)FAT32文件系统可以使用FAT 表的备份(FAT16文件系统中也有两份完全相同互为备份的FAT 表,但操作系统一般不使用第2份FAT 表)来校正和检查FAT 表,从而降低了系统文件丢失的可能性.FAT32文件系统虽然带来了诸多好处,但也存在诸如不支持MS 2D0S 操作系统、不支持双操作系统的引导环境、不支持磁盘的休眠模式等诸多缺点.但这些缺点属于白壁微瑕,随着大容量硬盘的日益普及,使用FAT32文件系统将是大势所趋.2 对FAT32文件系统主引导扇区的分析主引导扇区是硬盘独有的一个磁盘控制数据存储区域,通常位于硬盘的0磁头0柱面1扇区.由于主引导扇区存放硬盘分区的有关数据,因此又称为分区扇区.在使用FAT32文件系统后磁盘的主引导扇区有什么变化呢?2.1 主引导扇区的传统功能与作用 通过对硬盘 2000年11月 第23卷 第6期四川师范大学学报(自然科学版)Journal of S ichuan N ormal University (Natural Science )N ov.,2000 V ol.23,N o.6 主引导扇区程序的分析,主引导扇区存储的数据主要由以下3个部分构成[2]:(1)引导系统启动的程序代码;(2)硬盘的分区数据;(3)主引导扇区的有效标志.主引导扇区的首要功能是存储有关硬盘分区的数据,这些分区数据对硬盘是至关重要的.分区数据的丢失或破坏将导致硬盘上的逻辑磁盘不能被系统识别,当然也就无法访问磁盘上存储的文件和数据.2.2 FAT32文件系统对主引导扇区的改变 根据对FAT32文件系统主引导扇区的分析可知,FAT32文件系统的主引导扇区在保持与FAT16文件系统主引导扇区兼容的的基础上,针对FAT32文件系统的特点作了适当的扩展.FAT32文件系统主引导扇区对分区表数据结构的扩展仅限于增加的3个标识32位分区的分区类型标志,这3个增加的分区类型标志分别为OBH、OCH和OEH,用于描述FAT32文件系统的3种分区情况.对于扩展分区,则增加了一个类型标识OFH,表示Windows98操作系统扩展分区.类型标志为OBH表示分区是FAT32分区,最大分区容量可以达到2047G B;OCH表示的意义与OBH相同,但是对于I NT13H指令使用扩展的逻辑地址(LBA)方式;OEH表示的意义与06H相同,但是对于I NT13H指令使用扩展的逻辑地址(LBA)方式;OFH 表示的意义与05H相同(扩展分区),但是同样对于I NT13H指令使用扩展的逻辑块地址方式.使用扩展的逻辑块地址方式是为了支持容量超过8G B的大容量硬盘.由于文件系统转化为FAT32后,分区的类型标志变化为OBH、OCH和OEH,这些新的类型标志是原来FAT16文件系统所不能识别的,所以当用户使用MS2DOS操作系统的软盘启动系统后,机器不能识别硬盘的分区数据,当然也不能对硬盘的数据以文件为单位进行访问.3 对FAT32文件系统分区引导扇区的分析分区引导扇区用于启动存放在系统分区内的操作系统,每一个分区,实际上是每一个逻辑磁盘都包括一个引导扇区.分区引导扇区通常驻留在分区的第1个扇区———逻辑0扇区处.3.1 FAT16文件系统的分区引导扇区 FAT16文件系统分区引导扇区是由引导系统启动的程序代码、逻辑磁盘参数和分区引导扇区有效标志3个部分构成.在分区引导扇区中最重要的部分是逻辑磁盘读写(称为I/O)参数,引导系统启动的程序代码将使用这些参数来访问存储在磁盘上各文件的数据.I/O参数从扇区偏移地址O3H开始存放,共有18个数据项,占用58个字节(从扇区偏移地址03H 到3DH).3.2 FAT32文件系统的分区引导扇区 在Win2 dows98操作系统中,当文件系统从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文件系统磁盘读写参666 四川师范大学学报(自然科学版)23卷数兼容的基础上,为了适应FAT32文件系统的需要,对磁盘读写参数作了适当的扩展,所使用的字节数也从FAT16文件系统的58个字节扩展为87个字节.FAT32文件系统的磁盘读写参数占用扇区偏移地址03H至59H的存储空间,各参数的含义如表1所示.表1 FAT32文件系统磁盘读写参数编号起始偏移地址占字节数意 义103H8操作系统的版本号20BH2每个扇区的字节数30DH1每簇扇区数40EH2为操作系统保留的扇区数510H1FAT表的个数611H2FAT16中存放系统根目录中允许登记的目录项个数, FAT32中用于标注系统采用的是否为FAT32文件系统,其值为0000H表示磁盘使用FAT32文件系统713H2值为00H,为保持兼容性而保留,未使用815H1磁盘介质标志,硬盘为F8H9162未使用,值为00H1018H2每个磁道的扇区数111AH2磁盘的磁头个数121CH4分区前隐藏扇区的个数1320H4逻辑磁盘中的扇区总数1424H4每个FAT表所占的扇区数1528H2FAT表镜像标志,值为0表示系统保存2份互为备份的FAT表,值为1表示系统仅保存1份FAT表162AH2文件系统的主次版本(保留)172CH4磁盘根目录的起始簇号1830H2文件系统参数的扇区号,通常位于引导扇区的下一个扇区1932H2备份分区引导扇区的逻辑扇区号2034H12保留,未使用2140H2磁盘的物理驱动器号2242H1磁盘读写参数扩展标志,其值为29H2343H4磁盘卷的序列号2447H11磁盘卷标号2552H8文件系统的标识号(FAT32)4 对FAT32文件系统FAT表的分析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个簇开始,故根据簇号链的计算公式766第6期邓 波:FAT32文件系统结构研究 (簇号入口地址=簇号×2),FAT表的前4个字节就设计为保留值.使用与FAT16文件系统相同的原理,32位FAT 表也将0簇和1簇作为保留簇,故FAT表的前8个字节为保留值,其中第1个字节仍然作为磁盘标记.同时,为了满足特殊文件系统的要求,FAT32文件系统将第2个簇也同时作为保留簇,用于记录FDT表的空间分配簇链登记项.4.2 登记项的改变 32位的FAT表用“00000000”项表示对应的簇号未分配;用“0FFFFFF8H”至“0FFFFFFFH”表示对应的簇是文件分配的最后一簇;而“FFFFFFF7H”则表示已损坏不能分配的簇.由于FAT表中登记项的32位值中高4位为保留(总是0),故理论上FAT32文件系统可以表示的最大簇号为268435450(228),即用于实际描述簇号的位数为28位,用前述公式读者不难计算出FAT32文件系统可以表示的最大磁盘空间.5 对FAT32文件系统FDT表的深入分析FDT表的作用是记录文件的主名、扩展名、日期、属性、起始簇号和长度等信息,从记录的内容来看,除了文件的起始簇号外,其它参数没有任何变化.另外,从文件系统的结构来看.FDT表本身将从磁盘控制区域内的固定位置变化为磁盘数据区中的浮动空间位置,以解决磁盘根目录文件数量受到FDT表空间限制的问题.因此,下面我们重点对浮动的FDT表和目录登记项中的起始簇号参数进行讨论.5.1 浮动的FDT表 在FAT16文件系统中,记录根目录文件参数的FDT表位于磁盘上FAT表和文件数据存储区之间的固位置中,通常为32个或38个扇区,可以记录512个或608个文件的数据.由于存放根目录文件FDT表的空间是固定的,因此根目录上存储的文件或文件夹的数量是有限的.对于各子目录下的FDT表,操作系统采用文件管理的方式管理FDT表,即使用FAT表来管理各子目录下FDT 表所需要的存储空间,当子目录下的文件数量超出当前FDT表允许的登记项的数量时,操作系统为FDT表再分配一个簇,用于存储目录项参数,并同时在系统FAT表中登记上FDT表的分配簇链.所以,从理论上讲,子目录下存放的文件除了受到磁盘空间的限制外,不受其它任何条件的限制.FAT32文件系统为了解决根目录FDT表空间受到限制的问题,借鉴了子目录下FDT表的经验,将根目录FDT表也以文件的形式来管理,从而形成浮动的根目录FDT表.浮动FDT表的结构实际上是固定部分和动态部分的有机结合,其中固定部分通常为1个簇.在FAT32文件系统中,1个簇通常由8个扇区4K B的存储空间构成,所以固定部分可以记录的最大目录项数为128个.当然由于受Windows98长文件名附加目录项的影响实际允许记录的文件目录项将大大低于理论上的128个,但这部分固定的FAT表空间确实可以满足基本的系统需要.根目录FDT表的固定部分同FAT16文件系统一样,仍然位于最后一个FAT表的后面与数据存储空间之间的磁盘存储区域中. 在磁盘格式化时格式化程序将自动创建固定部分的FDT表,如果系统是从FAT16文件系统转换为FAT32文件系统,由于原来的FDT表已经位于该位置,所以FDT表的固定部分也将优先建立在紧接FAT表的位置.浮动FDT表主要体现在其动态部分,即当根目录上存储的文件超过固定部分所能记录的数量后,操作系统将为根目录的FDT表增加1个簇或多个簇的存储空间,这部分新增加的存储空间不在原来固定部分的后面(那一部分存储空间早已分配给其它文件了),而是磁盘数据存储区域中的任意一个未使用的存储空间.同时系统在FAT表的第3项(扇区偏移地址08H)处记录了动态部分第一个簇的簇号,动态部分其它簇的簇号则由操作系统根据FAT表的簇链登记准则进行相应的登记.由于动态部分实际上已经是一个可以按FAT簇链进行访问的文件,因此从理论上分析,根目录FDT表中允许登记的项数也就除了受磁盘空间限制外,没有其它的任何限制了.但是,为了避免由于根目录中登记项太多造成系统文件访问性能的下降(文件管理系统必须通过FAT表查找整个FDT表的存储空间), Windows98操作系统规定根目录中的文件登记项数不能超过65535个,也就是根目录FDT表的存储空间不超过4096个扇区.另外,值得特别关注的是,在分区引导扇区的磁盘读写参数表中也同时存储了FDT表在FAT表中起始簇号的位置(参见表1中的第17项),因此866 四川师范大学学报(自然科学版)23卷操作系统完全可以改变FDT 表的位置,不使用FDT表的固定部分.5.2 32位的文件存储空间起始簇号 FDT 表中另一个重要的参数是文件的起始簇号.在操作系统访问文件的数据时,将通过FDT 表中存储的文件起始簇号计算出文件后续存储空间在FAT 表中的偏移地址,并通过FAT 表按顺序计算出存储文件数据的所有簇,然后才能对文件的数据进行读写操作.Windows98操作系统中实际采用的是一套折衷解决办法,即在FDT 表的32字节目录项中寻找未使用的空间作为4个字节起始簇号的高16位,而将原有的2个字节起始簇号作为新的起始簇号的低16位,两者组合构成32位的起始簇号.这种在现有存储空间中寻找补充字节方案的优点在于完全保持了与原有文件系统的兼容性,操作系统内核和文件系统不必做大的改变,也不必增加系统的资源开销.其缺点是文件的起始簇号没有在连续的字节空间中存放,而是分隔在两处,使用户不易理解,同时也不可能解决FDT 表固有的问题和不能给FDT 表融入新的特性.从Windows98操作系统FDT 表的结构来看,每个32字节的目录项中只有1处还有两个连续的字节空间尚未使用,这两个字节就是目录项中的第21和第22字节,即位于记录文件修改日期和时间前面的2个字节.FAT32文件系统就使用了这两个字节作为文件起始簇号的高16位,它们与原有的起始簇号(位于第27和第28字节)一起组合成32字节的文件起始簇号.6 总结根据本文对FAT32文件系统内部结构的分析可以知道,FAT32文件系统对传统的FAT16文件系统进行了较为彻底地改造,除了通过减少每簇的容量降低了大容量磁盘存储空间的浪费外,同时也自动解决了FAT16文件系统对根目录512个文件记录项的限制,其优点是非常明显的.另外,由于系统可以使用的簇号资源增加,也自然解决了操作系统对大容量硬盘的支持问题.虽然FAT32文件系统不支持传统的MS 2DOS 操作系统,但在Windows98操作系统占绝对优势的今天,这个小小缺陷不可能阻碍FAT32文件系统的普及.可以预计,随着大容量硬盘的不断降价,FAT32文件系统必将成为主流的文件系统.因此,本文所分析的FAT32文件系统的内部结构,不但可以使用户理解FAT32文件系统的实现机理,而且对高层次的用户开发直接访问F A T32文件系统数据的软件也具有非常重要的意义.参考文献[1] [美]Jim B ,K yle B.Windows95高级适用指南[M].北京:清华大学出版社,1996.[2] 张载鸿.DOS 高级技术分析[M].北京:国防工业出版社,1998.Investigation of FAT32File System StructureDE NG Bo(Department o f Information and Computer ,Sichuan Economic Management Institute ,Chengdu 610041,Sichuan )Abstract :The windows98operating system has used FAT 32file system.The new file system has s olved many problems of traditional FAT 16file system.N o article about file system structure of FAT 32has been reported.This paper analyzed file system structure and technology essence in detail ,and revealed alg orithm of storage ,and management files in FAT 32.K ey w ords :FAT;FDT;File system ;Operating system(编辑 李德华)966第6期邓 波:FAT 32文件系统结构研究 。

FAT32文件系统详细介绍

FAT32文件系统详细介绍

FAT32文件系统详细介绍初识FAT32文件系统Abstract: File System is used to manage files software and data ,it is part of the operating system.FAT32 file system is a kind of format that it manage disk files. And the corresponding other file system format such as NTFS,EXT2 etc.Key words: File System; FAT32 File System; Disk摘要: 文件系统是用于管理文件的软件和数据的统称,它是操作系统的一部分。

FAT32文件系统是一种管理磁盘文件的一种格式。

还有相应的其他文件系统格式比如NTFS,EXT2等。

关键词: 文件系统;FAT32文件系统;磁盘1 硬盘结构1.1 硬盘物理结构[1]图1 硬盘的内部结构硬盘基本上由两大部分组成:控制电路板和盘体。

1.控制电路板控制电路板由接口,DSP处理器,ROM,缓存,磁头驱动电路和盘片电机驱动电路等等组成。

2.盘体盘体由盘腔,上盖,盘片电机,盘片,磁头,音圈和其他辅助组件组成。

一般硬盘的接口分为几种,有IDE接口(Integrated Drive Electronics),SCSI接口(Small Computer System Interface),SATA接口(Serial-ATA)(目前是主流),SAS接口,IEEE1394接口。

硬盘存储数据是根据电、磁转换原理实现的。

硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。

硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。

详解FAT32文件系统

详解FAT32文件系统

详解FAT32⽂件系统详解FAT32⽂件系统硬盘是⽤来存储数据的,为了使⽤和管理⽅便,这些数据以⽂件的形式存储在硬盘上。

任何操作系统都有⾃⼰的⽂件管理系统,不同的⽂件系统⼜有各⾃不同的逻辑组织⽅式。

例如:常见的⽂件系统有FAT,NTFS,EXT,UFS,HFS+等等。

下⾯就来学习⼀下基于Windows的FAT32⽂件系统。

FAT32⽂件系统由DBR及其保留扇区,FAT1,FAT2和DATA四个部分组成,其机构如下图:这些结构是在分区被格式化时创建出来的,含义解释如下:DBR及其保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有⼀些保留扇区。

FAT1:FAT的含义是⽂件分配表,FAT32⼀般有两份FAT,FAT1是第⼀份,也是主FAT。

FAT2:FAT2是FAT32的第⼆份⽂件分配表,也是FAT1的备份。

DATA:DATA也就是数据区,是FAT32⽂件系统的主要区域,其中包含⽬录区域。

⼀、分析FAT32⽂件系统的DBRFAT32⽂件系统的DBR有5部分组成,分别为跳转指令,OEM代号,BPB,引导程序和结束标志。

如下图是我U 盘上⼀个完整的FAT32⽂件系统的DBR。

E8 58 90 :(跳转指令) 本⾝占2字节它将程序执⾏流程跳转到引导程序处。

“EB 58 90″清楚地指明了OS引导代码的偏移位置。

jump 58H加上跳转指令所需的位移量,即开始于0x5A。

4D 53 57 49 4E 34 2E 31 :(OEM代号) 这部分占8字节,其内容由创建该⽂件系统的OEM⼚商具体安排。

跳转指令之后是8字节长的OEM ID,它是⼀个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。

为了保留与MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。

FAT32文件系统

FAT32文件系统
• 1 跳转指令 跳转指令本身占用2个字节,它将程序执行流程跳转到 引导程序处,比如当前DBR中的“EB 58”,就是代表汇 编语言的“JMP 58”。需要注意该指令本身占用2字节, 计算跳转目标地址时以该指令的下一个字节为基准,所 以实际执行的下一条指令应该位于5A。紧接着跳转指令 的是一条空指令NOP(90H)。
FAT32文件系统结构实例图
2.2 FAT32文件系统DBR
• 2.2.1 DBR的概念和组成 • 什么是DBR? DBR(DOS Boot Record),含义是DOS引导记录, 也称为操作系统引导记录 • FAT32文件系统的DBR(即操作系统引导记录)大体 可以分为5个部分,分别为:跳转指令,OEM代号, BPB(BIOS Parameter Block,BIOS参数块),引导程 序,结束标志(55AA)。 FAT32文件系统DBR结构模块图 请参照下图
第二章 FAT32文件系统
2.1 FAT32文件系统结构总揽 FAT32文件系统是从微软Windows 95系统的OSR2版本开 始使用的,它能够支持大于32MB小于32GB的分区。虽然 第三方的格式化程序可以把超过32GB的分区格式化为 FAT32,但微软自身的系统不允许将大于32GB的分区格 式化为FAT32文件系统。 FAT32文件系统由DBR及其保留扇区,FAT1,FAT2, DATA区 四个部分组成。
具体结构如下图:
• 长文件名FDT项结构图
具体内容如下:
• 每一个长文件名登记项有26个字节记录长文件名称,表示 13个Unicode格式的文件名(每个文件名字符需要2个字节)。 顺序字节低5位指明长文件名登记项序号,第6位置“1”表 明本登记项是最后一个,“顺序号”数据结构如下:
• (“顺序号”字节含义图)

FAT32文件系统的存储机制及其在单片机上的实现(于振南)

FAT32文件系统的存储机制及其在单片机上的实现(于振南)

_No; //装入第一个 FAT 表扇区号到 FirstFATSector 中
arg->RootDirCount
=lb2bb((bpb->BPB_RootEntCnt) ,2);
//装入根目录项数到 RootDirCount 中
arg->RootDirSectors
=(arg->RootDirCount)*32>>9;
这就是大端模式与小端模式在作怪。上面我们合成 int 型变量的方法(00 为 高字节,02 为低字节)为小端模式。而如果我们改用大端模式来进行合成的话,
结果就会不同:将 02 作高字节,而把 00 作低字节,变量值就成了 0x0200(十进 制的 512),这样就和实际数据吻合了。可见 FAT32 中字节的排布是采用小端模式 的。在我们程序中需要将它转为大端模式的表达方式。在笔者的程序有这样一个
offset:19
unsigned char BPB_Media[1];
//存储介质
offset:21
unsigned char BPB_FATSz16[2]; //FAT32 为 0
offset:22
unsigned char BPB_SecPerTrk[2]; //磁道扇区数
offset:24
unsigned char BPB_NumHeads[2]; //磁头数
offset: 0
unsigned char BS_OEMName[8]; //
offset: 3
unsigned char BPB_BytesPerSec[2];//每扇区字节数
offset:11
unsigned char BPB_SecPerClus[1]; //每簇扇区数

读FAT32中的文件

读FAT32中的文件

读FAT32中的文件1.引言FAT32文件系统是微软比较成功的一个文件系统,虽然现在有被NFS代替的趋势,但由于广泛的认知性及易实现性,在嵌入式、便携产品上还广泛适用(几乎所有的基于windows 平台上的都是FAT32)。

FAT32文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。

引导区和文件分配表区又合称为系统区。

FA T32 文件系统DBR(引导扇区),FAT,FDT,DATA这四个基本结构:1.DBR:DBR记录了当前FA T32 磁盘的一些基本信息,在通常情况下,DBR位于磁盘分区的0号逻辑扇区在附件中有幅DBR的图形信息,里面详细说明了在DBR中我们能获取到哪些主要信息,当然,还有很多信息希望读者自己去查阅详2 FDT:FDT区简单的说就是记录的目录(文件夹)的信息,里面记录了当前目录下所有的文件(包括当前目录下的文件夹名)的信息,说通俗一点就是记录了当前目录下的所有文件的文件名,我们定位文件,必须要定位到该文件所在目录的FDT区的位置。

3 FA T:FA T区在FA T32文件系统中有2个:FA T1与FA T2,FA T2是FA T1的备份,所以我们只需要获取FA T1的位置,FA T区所在的扇区号我们可以由DBR获取,那FA T区究竟是什么呢?首先,我们知道磁盘是由扇区组成的,若干的扇区组成一簇,当一个目录的FDT 区需要占据多个簇的时候,FA T区记录了多个簇的连接信息,具体可以详细去查阅有关资料。

4 DA TA:DA TA区是由FDT区定位的,上面说过FDT区记录了某个目录下文件的信息,若这个信息记录的是文件而非文件夹(目录),则这个信息的一部分记录了这个文件的DA TA 区的位置,顾名思义,DA TA区储存了文件的内容,当一个簇无法记录一个完整的文件内容时,就要用到FA T区进行簇连。

2.提出问题2.1FA T32文件系统的结构,主引导记录(MBR)、引导扇区、FA T表、FDT表的结构。

U盘FAT32文件系统

U盘FAT32文件系统

U盘FAT32⽂件系统⼀、FAT⽂件系统分为四个部分参考别⼈的博客1. 保留扇区(引导区)最开始的位置,第⼀个保留扇区是引导区。

包括基本的⽂件系统信息,⽐如它的类型和其它指向其它扇区的指针。

通常包括操作系统启动调⽤代码。

保留扇区的总数记录在引导扇区中的⼀个参数中。

2. FAT区(⽂件分配表)包含两份⽂件分配表,分区信息的映射表,指⽰簇是如何存储的。

3. 根⽬录区在根⽬录中存储⽂件和⽬录信息的⽬录表。

4. 数据区域实际⽂件和⽬录数据存储的区域。

需要注意的是每个簇只能被⼀个⽂件占有。

主引导记录(主引导扇区),读设备时最开始读这个分区。

1. MBR(master boot record)MBR ⼜称作主引导记录占⽤ Boot Sector 的前 446 个字节 ( 0 to 0x1BD ), 存放系统主引导程序 (它负责从活动分区中装载并运⾏系统引导程序).2. DPT 即主分区表占⽤ 64 个字节 (0x1BE to 0x1FD),记录了磁盘的基本分区信息,主分区表分为四个分区项,,每项 16 字节,分别记录了每个主分区的信息(因此最多可以有四个主分区).3. Boot Record ID 即引导区标记占⽤两个字节 (0x1FE and 0x1FF), 对于合法引导区,它等于 0xAA55,这是判别引导区是否合法的标志。

⼆、主引导扇区(MBR)的具体结构如下图所⽰:OffsetDescription Size000h Executable Code (Boots Computer)446 Bytes1BEh1st Partition Entry (See Next Table)16 Bytes1CEh2nd Partition Entry16 Bytes1DEh3rd Partition Entry16 Bytes1EEh4th Partition Entry16 Bytes1FEh Executable Marker (55h AAh) 2 BytesUSB hound 得到的数据512 IN fa 31 c0 8e d8 8e c0 8e d0 bc 00 7c fb fc 89 e6 .1.............. 55.1.0(2)bf 00 06 b9 00 01 f3 a5 ea dc 06 00 00 10 00 01 ................ 55.1.1600 00 7c 00 00 00 00 00 00 00 00 00 00 80 3f 00 ..............?. 55.1.32ff 00 b4 03 1e 0e 1f 3a 16 10 00 74 06 1f ea 36 .......:...t...6 55.1.48e7 00 f0 3d fb 54 75 05 8c d8 fb eb 1d 80 fc 08 ...=.Tu......... 55.1.6475 1b e8 81 00 8a 36 13 00 fe ce 8b 0e 15 00 86 u.....6......... 55.1.80cd c0 e1 06 0a 0e 11 00 31 c0 f8 eb 65 80 fc 02 ........1...e... 55.1.9672 cb 80 fc 04 77 c6 60 80 cc 40 50 be 00 00 c7 r....w.`..@P.... 55.1.11204 10 00 30 e4 89 44 02 89 5c 04 8c 44 06 66 31 ...0..D..\..D.f1 55.1.128c0 66 89 44 0c 88 f0 f6 26 11 00 88 cf 88 eb c0 .f.D....&....... 55.1.144ef 06 81 e1 3f 00 01 c8 48 89 c7 a1 13 00 f7 26 ....?...H......& 55.1.16011 00 f7 e3 01 f8 81 d2 00 00 89 44 08 89 54 0a ...........D..T. 55.1.17658 30 c0 8a 16 10 00 e8 0c 00 88 26 03 00 61 a1 X0.........&..a. 55.1.19202 00 1f ca 02 00 9c ff 1e 22 00 c3 80 fa 8f 7f ........."...... 55.1.20804 88 16 2d 06 be 87 07 e8 8d 00 be be 07 31 c0 ...-..........1. 55.1.224b9 04 00 f6 04 80 74 03 40 89 f5 81 c6 10 00 e2 ......t.@....... 55.1.240f2 48 74 02 cd 18 bf 05 00 be 1d 06 c7 44 02 01 .Ht..........D.. 55.1.25600 66 8b 46 08 66 89 44 08 b8 00 42 8a 16 2d 06 .f.F.f.D...B..-. 55.1.272cd 13 73 0d 4f 74 49 30 e4 8a 16 2d 06 cd 13 eb ..s.OtI0...-.... 55.1.288d8 a1 fe 7d 3d 55 aa 75 37 fa 66 a1 4c 00 66 a3 ....=U.u7.f.L.f. 55.1.3043f 06 be 13 04 8b 04 48 89 04 c1 e0 06 8e c0 31 ?......H.......1 55.1.320ff be 1d 06 b9 60 00 fc f3 a5 c7 06 4c 00 17 00 .....`......L... 55.1.336a3 4e 00 fb 8a 16 2d 06 89 ee fa ea 00 7c 00 00 .N....-......... 55.1.352be aa 07 e8 02 00 eb fe ac 20 c0 74 09 b4 0e bb ......... .t.... 55.1.36807 00 cd 10 eb f2 c3 53 74 61 72 74 20 62 6f 6f .......Start boo 55.1.38474 69 6e 67 20 66 72 6f 6d 20 55 53 42 20 64 65 ting from USB de 55.1.40076 69 63 65 2e 2e 2e 0d 0a 00 42 6f 6f 74 20 66 vice......Boot f 55.1.41661 69 6c 65 64 00 00 00 ea eb d4 ca 00 00 00 00 ailed........... 55.1.432 第⼀分区硬盘分区表 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 55.1.448 第⼆分区00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 55.1.464 第三分区00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 04 ................ 55.1.480 第四分区05 00 0b fe ff b3 00 01 00 0080 8c e8 00 55 aa ..............U. 55.1.496过256扇区后是这个分区 *512byte=7.2G硬盘分区表地址字节数描述00~001可引导标志0x00不可引导,0x80可引导01~033分区起始CHS地址04~041分区类型05~073分区结束CHS地址08~0B4分区起始LBA地址0C~0F4分区⼤⼩扇区数分区起始CHS地址(U盘可以直接根据扇区,簇来寻址。

数据恢复技术FAT32分区结构

数据恢复技术FAT32分区结构
1. 搜寻FAT和数据区的起始位置。 2. 根据得到的数据算出每FAT占用扇区数。 3. 将保留扇区数、每FAT占用扇区数、每簇占用扇区数写
入到BPB中对应的位置。 4. 检查分区访问是否正常。
总结
1.FAT32分区的组成结构 2.引导扇区中的重要BPB参数 3.计算数据区起始扇区位置
二、分析引导扇区
跳转指令,跳至 引导程序处 BPB记录了该分 区的参数信息
DBR负责执行系统 引导功能
引导扇区结束标志 55H AAH
二、分析引导扇区
偏移 0H 3H 0BH 0DH 0EH 10H 11H 13H 15H 16H 18H 1AH 1CH 20H 24H 28H 长度 3B 8B 2B 1B 2B 1B 2B 2B 1B 2B 2B 2B 4B 4B 4B 2B 描 述 跳转指令,跳至后面引导记录开始处(FAT32从5AH处开始) 文件系统和版本的OEM标志(MSDOS 5.0或MSWIN4.1) 每扇区字节数(通常为200H) 每簇扇区数(值为2的N次方,通常小于64)* 保留扇区数(本分区中FAT表之前的扇区总数,通常FAT16为1,FAT32为20H或24H)* FAT表个数(通常为2) FAT16系统为根目录最大项,FAT32系统为0 小卷(<32MB)的分区扇区总数,大硬盘为0 介质描述,恒为F8 在小卷中为每FAT占用扇区数,大硬盘为0 每磁道扇区数(通常为3FH,63) 磁头数(通常为FFH,255) 隐含扇区数(本分区前的扇区总数,也就是本分区的起始逻辑扇区号) 大卷的本分区占用扇区数* 大卷的每FAT占用扇区数* 延迟标记(通常为0)
二、分析引导扇区
引导扇区,也称DBR扇区,它由BPB(BIOS参数 块)、DBR(磁盘引导记录)、以及引导扇区结束 标志(55 AA)组成。 BPB中记录了该分区的各项参数信息,因此至关重 要,如果BPB部分被破坏,此分区将不可用。 DBR在安装系统的时候写入,这是一段系统引导代 码,如果这部分缺失或被破坏,则该分区不可用 于启动系统。 引导扇区结束标志用于引导程序判断该扇区是否 为引导扇区。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FAT32文件系统的存储组织结构(一) (2012-05-19 16:57)标签: FAT32 文件系统分类:文件系统对磁盘的物理结构,逻辑结构和存储结构有了比较深入的了解后,我们来仔细探讨FAT32文件系统的存储组织结构。

说到文件系统的组织结构,我们应该马上意识到,这指的是文件系统在同一个分区内的组织结构,在这个话题上,我们完全可以不管分区之外的所有事情。

为了分析FAT32文件系统的存储组织结构,我们来建立一个实实在在的文件系统:将U盘插入电脑,将U盘格式化成FAT32分区格式:以建好的U盘FAT32文件系统为基础,下面从文件系统的各个组成来分别加以介绍。

分区引导扇区DBR用winhex打开U盘显示如下:这是FAT32分区引导记录,定义如下:偏移00H: 3字节的跳转指令 EB 58 90,跳过下面的BPB和扩展BPB部分偏移03H:8字节的硬盘分区类型文本字符名:4D 53 44 4F 53 35 2E 30 即:MSDOS5.0偏移0BH: 25字节的分区参数块(BPB),细分如下:偏移0BH:扇区字节数 00 02 即0X0200,512字节偏移0DH:每簇扇区数 08即每簇包括8个扇区偏移0EH:保留扇区数 24 00即保留36个扇区偏移10H:FAT表份数 02即两个FAT表偏移11H:未用 00 00偏移13H:未用 00 00偏移15H:介质类型 F8即本地硬盘偏移16H:未用 00 00偏移18H:每磁道扇区数 3F 00 即每磁道63扇区偏移1AH:磁头数 FF 00即255个磁头偏移1CH:隐藏扇区数 80 1F即8064个隐藏扇区偏移20H:磁盘总扇区数 80 F0 77 00即总共7860352个扇区(7860352*512=4024500224,因为我的U盘是4G)偏移24H:52字节的扩展分区参数块(扩展BPB),细分如下:偏移24H:FAT表占用扇区数 EE 1D 00 00即FAT表占7662个扇区偏移28H:未用 00 00 00 00偏移2CH:根目录入口簇号 02 00 00 00即根目录从02号簇开始偏移30H:文件系统信息扇区号 01 00即扇区1偏移32H:备份引导扇区的位置 06 00即6号扇区(第7个扇区),从WINHEX中我们也可以看到,6号扇区的内容和0号引导扇区内容是一样的偏移34H:未用 00 00 00 00 00 00 00 00 00 00 00 00偏移40H:物理磁盘号 00偏移41H:未用 00偏移42H:扩展引导标志 29即0X29偏移43H:磁盘序列号F1 2A 27 04通常为一随机数偏移47H:卷标ASCII 4E 4F 20 4E 41 4D 45 20 20 20 20 即NO NAME偏移52H:文件系统格式ASCII 46 41 54 33 32 20 20 20即FAT32偏移5AH:分区引导代码 420字节:33C98ED1BCF47B8EC18ED9BD007C884E028A5640B408CD1 37305B9FFFF8AF1660FB6C640660FB6D180E23FF7E286CDC0ED0641660FB7C96 6F7E1668946F8837E16007538837E2A007732668B461C6683C00CBB0080B90100 E82B00E94803A0FA7DB47D8BF0AC84C074173CFF7409B40EBB0700CD10EBEEA0FB 7DEBE5A0F97DEBE098CD16CD196660663B46F80F824A00666A0066500653666 810000100807E02000F852000B441BBAA558A5640CD130F821C0081FB55AA0F8514 00F6C1010F840D00FE4602B4428A56408BF4CD13B0F96658665866586658EB2A66 33D2660FB74E1866F7F1FEC28ACA668BD066C1EA10F7761A86D68A56408AE8C0E40 60ACCB80102CD1366610F8254FF81C300026640490F8571FFC34E544C44522020 202020200000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000D0A52656D6F7665206469736B73206F72 206F74686572206D656469612EFF0D0A4469736B206572726F72FF0D0A50726573732 0616E79206B657920746F20726573746172740D0A0000000000ACCBD80000偏移1FEH:有效扇区结束标志 55 AA到此分区引导扇区介绍结束。

文件分配表FAT简介:FAT表(文件分配表),是FAT文件系统中用于磁盘数据索引和定位而引进的一种链式结构。

在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。

同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。

FAT1表位置的定位:在我们前面介绍分区引导记录的时候提到,在偏移0EH处存储了保留扇区的个数,这个保留扇区数指的就是当前分区内DBR到FAT表之间的所有扇区的个数(包括DBR但不包括FAT表)。

因此,我们可以定位FAT表所在的起始偏移位置了,即24H*200H=4800H。

我们贴出4800H处得部分内容如下:显然没有错,这就是我们FAT1所存储的位置,只是当前没有存储文件,所以FAT比较简单罢了。

FAT2表位置的定位:在我们前面介绍分区引导记录的时候提到,在偏移24H处存储了FAT表所占用的扇区个数,我们又知道FAT2是紧邻FAT1的,所以可以很容易得到FAT2的存储位置的偏移地址:FAT1的起始偏移地址+FAT1的大小=4800H+1DEEH*200H=3C2400H,我们贴出3C2400H处的部分内容如下:显然没有错,这就是我们FAT2所存储的位置,内容与FAT1相同。

FAT表的特性:FAT表由一系列大小相等的FAT表项组成,它有如下特性:FAT32中每个簇的簇地址,使用32bit(4个字节)记录在FAT表中。

FAT表中的所有字节位置以4个字节为单位进行划分,并对所有划分后的位置由0进行地址编号。

0 号地址与1号地址被系统保留并存储特殊标志内容。

从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。

我们称FAT中的这些地址为FAT表项,FAT表项中记录的值称为FAT表项值。

当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。

由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,所以2号簇所对应的2号FAT表项也会被写入一个结束标记。

如果某个簇未被分配使用,它所对应的FAT表项内的FAT表项值即用0进行填充,表示该FAT表项所对应的簇未分配使用。

当某个簇已被分配使用时,则它对应的FAT表项值也就是该文件的下一个存储位置的簇号。

如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF。

如果某个簇存在坏扇区,则整个簇会用FAT表项值0x0FFFFFF7标记为坏簇,不再使用,这个坏簇标记就记录在它所对应的FAT表项中。

由于簇号起始于2,所以FAT表的0号表项与1号表项不与任何簇对应。

FAT32的0号表项值总是“F8FFFF0F”。

1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。

不过此值似乎并不重要,因此我们只要了解就可以。

正常情况下,1号表项值为“FFFFFFFF”或“FFFFFF0F"。

在文件系统中新建文件时,如果新建的文件只占用一个簇,为其分配的簇所对应的FAT表项将会被写入结束标记。

如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号,在最后一个簇对应的FAT表项中写入结束标记。

新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标记。

当目录增大超出一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述它所占用的簇情况。

对文件或目录进行删除操作时,它们所对应的FAT表项将会被清空,设置为0以表示其所对应的簇处于未分配状态。

根目录区简介:在FAT32文件系统中,根目录的位置不再硬性地固定,可以存储在分区内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表。

所以,我们看到的情况基本上都是根目录首簇紧邻FAT2,占簇区顺序上的第1个簇(即2号簇)。

同时,FAT32文件系统将根目录当做普通的数据文件来看,所有没有了目录项数的限制,在需要的时候可以分配空簇,存储更多的目录项。

起始偏移地址定位:根目录起始扇区=保留扇区数+FAT×2+(起始簇-2)x每簇的扇区数,在我们前面介绍分区引导记录的时候提到,偏移2CH处保存了根目录起始簇号是2,所以求得根目录起始扇区是24H+1DEEH*2H+(2-2)*8H=3C00H,即求得偏移地址3C00H*200H=780000H,我们贴出780000H处的部分内容如下:目录区的一个目录项占用32个字节,可以是长文件名目录项、文件目录项、子目录项等。

短文件名格式的目录项对于短文件名格式的目录项。

其参数意义如下:根据参数定义,我们来分析一下上图的目录项 54 45 53 54 5F 46 41 54 33 32 20 08 00 00 00 00 00 00 00 00 00 00 19 95 10 3F 00 00 00 00 00 00。

其中起始11字节54 45 53 54 5F 46 41 54 33 32 20 是卷标TEST_FAT32;第12字节08指示当前目录项保存的是卷标;第23-24字节19 95即9519H,是最近修改时间:19点40分50秒;第25-26字节10 3F即3F10H,是最近修改日期:2011年8月16日;长文件名格式的目录项FAT32的一个重要的特点是完全支持长文件名。

长文件名依然是记录在目录项中的。

为了低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址。

相关文档
最新文档