FAT32文件系统学习 |
您所在的位置:网站首页 › 如何修改sd卡簇容量 › FAT32文件系统学习 |
FAT32文件系统组成及介绍 FAT32文件系统结构图: 下图演示了FAT32文件系统的DBR: 1.DBR及其保留扇区:含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往有一些保留扇区 跳转指令:跳转指令本身占用2字节,它将程序执行流程跳转到引导程序处,在计算跳转目标地址是以该指令的系以字节为基准。OEM代号:这部分占8字节,由创建该文件系统的OEM厂商安排。BPB:FAT32的BPB从DBR的第12个字节开始,占用79字节,记录了有关该文件系统的重要信息,如下: 引导程序:FAT32的DBR引导程序占用420个字节(5AH~1FDH),这段代码负责完成DOS三个系统文件的装入 结束标志:DBR的结束标志与MBR,EBR的结束标志都相同,为“55 AA”。 以上五个部分共占用512字节,正好是一个扇区,因此称它为DOS引导扇区。该部分的内容中除了第5个部分结束标志是固定不变之外,其余四个部分都是不完全固定的。 通过上面了解到重要信息总结如下: 扇区字节数和每簇扇区数硬件扇区的大小为512Bytes,每个簇占用扇区数为32个扇区。 保留扇区数我们可以通过保留扇区数可以找到FAT表的起始位置,FAT Table Start Address = 0x4BB0 * 512 = 0x976000 Bytes。确实在地址0x976000位置找到了FAT表 通过总扇区数可以计算得到SD卡的总容量大小:0x07386880*512=62022287360Bytes 根目录开始地址 = ((保留扇区数) + (每 FAT 扇区数) * (FAT 数)) * 扇区字节数根目录开始地址 = (0x4BB0 + 0x00001CE8 * 0x02) * 512 = 0x10B0000Bytes 2.FAT1和FAT2:含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT,FAT2是备份FAT FAT表的作用及特点: FAT文件系统一般有两份FAT,它们由格式化程序在对分区进行格式化时创建,FAT1是活动FAT,FAT2是备份FAT。FAT1跟在DBR之后,其具体地址由DBR的BPB参数中偏移量为0EH~0FH的两字节描述;FAT2跟在FAT1之后,其地址可以用FAT1所在的扇区号加上每个FAT所占的扇区数获得。FAT表是由FAT表项构成的,我们把FAT表项简称为FAT项。FAT32文件系统的FAT项大小有32位,相当于四字节。每个FAT项都有一个固定的编号,这个编号从0开始,第一个FAT项是0号FAT项,以此类推。FAT表的前两个FAT项有专门的用途:0号FAT项通常用来存放分区所在的介质类型,1号FAT项则用来存储文件系统的肮脏标志,表明文件系统被非法卸载或者磁盘表面存在错误。分区的数据区中每一个簇都会映射到FAT表中的唯一一个 FAT项。因为0号FAT项和1号FAT项有特殊用途,无法与数据区中的簇形成映射,所以从2号FAT项开始跟数据区中的第一个簇映射,正因为如此,数据区中的第一个簇也就编号为2号簇,这也是没有0号簇和1号簇的原因,然后3号簇跟3号FAT项映射,4号簇跟4号FAT项映射,以此类推,直到数据区中的最后一个簇。分区格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。当一个文件占用多个簇时,这些簇的簇号不一定是连续的,但这些簇号在存储该文件时就确定了顺序,即每个文件都有其特定的“簇号链”。在分区上的每一个可用的簇在FAT 中有且只有一个映射 FAT项,通过在对应簇号的FAT 项内填入“FAT 项值”来表明数据区中的该簇是已占用、空闲或是坏簇三种状态之一。其各自对应的范围值如下:![]() 定位FAT表,首先定位FAT1: 系统通过该分区表信息,定位到其DBR扇区。读取DBR的BPB,通过读取0EH~0FH偏移处“DBR保留扇区数"这个参数。读取到DBR保留扇区数这个参数之后,跳转到该分区的对应的扇区,这里就是FAT1的开始。定位完FAT1,再来定位FAT2: 系统通过该分区表信息,定位到其DBR扇区。读取DBR的BPB,通过读取0EH~0FH偏移处“DBR保留扇区数"这个参数。读取DBR的24H~27H偏移处,得到每FAT扇区数的值为561。用DBR保留扇区数加上每FAT扇区数,得到的结果值就是FAT2的开始。强调:除了0号FAT项和1号FAT项以外,如果一个FAT项为非零值,那么可能有三种情况:除了坏簇标志和结束标志外,还有一种情况就是该FAT项被某个文件占用,但并不是文件的最后一个簇,那么该FAT项中的值就是文件下一个簇的簇号。 3.DATA:DATA是数据区,是FAT32文件系统的主要区域,包括目录区 FAT32文件系统的数据区定位分析 FAT32的数据区在文件系统中的具体位置是紧跟在FAT2之后,以定位DBR所在分区数据区为例,其定位步骤如下: 系统通过该分区表信息,定位到其DBR扇区。读取DBR的0EH~0FH偏移处,得到"DBR保留扇区数"的值。读取DBR的24H~27H偏移处,得到每FAT扇区数的值。用DBR保留扇区数加上2倍的每FAT扇区数,得到结果,跳转到结果所在的扇区,这就是数据区的开始。FAT32文件系统数据区的内容主要由三部分组成:根目录、子目录和文件内容。 FAT文件系统目录项分析 什么是目录项?它有什么作用? 分区中的每个文件和文件夹(也称为目录)都被分分配一个大小为32字节的目录项,用以描述文件名或目录名、文件或文件夹的属性、大小、起始簇号和时间、日期等信息(鼠标光标停留在一个电脑文件上时,右边显示的就是目录项)。在FAT文件系统中,目录被视为特殊类型的文件,所以每个文件也跟目录一样有目录项。FAT32文件系统目录项有四种:短文件目录项、长文件目录项、"."目录项和".."目录项、卷标目录项。 短文件目录项:即8.3格式,在这种限制下,用户在给文件起名时,主文件名不能超过8个字符,并且不能支持中文;扩展名不能超过3个字符,所以称为8.3格式;FAT16和FAT32短文件目录项的不同之处就在偏移“14H”处的两个字节,FAT16是不用这两个字节的,而在FAT32中,这两个字节是其实簇号的高位,偏移“1AH”是起始簇号的低位,这四个字节共同构成文件的其实簇号。 长文件目录项:即文件名8.3格式限制被打破了,超过8.3的格式限制的文件名实际存储着两个名字,一个短文件名和一个长文件名。如果是短文件名,则存储在短文件名目录项中。当创建一个长文件名时,其对应短文件名的存储有以下三个处理原则: 系统取长文件名前6个字符加上"~1"形成短文件名,其扩展名不变。如果已经存在这个名字的文件,则符号"~"后的数字自动增加。如果有DOS和Windows 3.x非法的字符,则以下画线"_"替代。"."目录项和".."目录项:"."表示当前目录,".."表示上级目录。 卷标目录项:卷标就是一个分区的名字,可以在格式化分区时创建,也可以随时修改,目前的系统把卷标当作文件,用文件目录项进行管理,系统为卷标建一个目录项,放在根目录中。 下面通过一个实例根目录文件:xatu.txt来练习FAT表的使用: 通过上面实例表格了解到重要信息总结如下: 文件起始簇号 文件起始簇号为0x00000006,说明该文件的起始地址为: 文件地址 = 根目录开始地址 + ((起始簇号 - 根目录簇号(Root Cluster Number)) * 每簇扇区数(Sectors Per Cluster) * 扇区字节数(Bytes Per Sector)) 文件地址 = 0x10B0000 + ((0x06 - 2) * 32 * 512) = 0x10F0000 Bytes 经过计算可以得到文件起始存放位置在0x1028000,然后验证果然在该位置找到了文件:xatu.txt存放的数据,如下: 为了验证是否是这个文件,将上述数据复制出来新建一个文件,保存在桌面,查看如下: 可以看到文件正确。 学习心得:通过对FAT32文件系统的学习,本人有一种恍然大悟的感觉,在平常的学习生活中,对于电脑或者U盘的文件,我们只是单纯的建立,写入,删除,对于底层的过程也从来没有探究过,比如对于删除的文件,在正常看来,这个文件确实已经没有了,但是通过WinHex分析就会发现,删除的文件底层数据还是在的,只要熟悉文件系统的工作原理,是可以根据基本数据进行恢复的,这对以后的工作生活是非常有帮助的,如果我们不小心误删除了某个文件,就不会感到手足无措了。在刚开始学习时,对于文件系统中那些专业词汇,也感到晦涩难懂,但是多看几遍后,就感到其中的奥妙了。对于技术性的学习,我认为不能像读课文一样逐字逐句的读,本人的学习方式是,先浏览几遍,了解文件系统的框架,然后再对其中的各个部分的进行细读,但是眼过千遍,不如手过一遍,本人会将文件系统的重点概念知识抄写一遍,加深记忆和理解,最后再根据书中的教程在Winhex上进行简单的实际操作,这样能更好的掌握课本上的知识。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |