参考文件
FAT32文件系统有几个基本的几个概念:
先拿一个真实的4G SD卡分析数据:
使用winhex物理方式查看,截一部分图:
全称Master Boot Record,即主引导记录。
主引导记录分为两个部分,一个部分是前446字节,另外一个部分是后64字节。
前446个字节,一般取值为0,不过有的时候也会有其他的设置值。
这部分也叫DPT,全称Disk Partition Table,即磁盘分区表。
磁盘分区表有4个区,每个区有16字节,总体是64字节。因此,MBR字节数为512字节,刚好是一个扇区的数量。
DPT的4个部分,每一个部分的16字节含义如下表:
00 82 03 00 0B E6 DC CA 00 20 00 00 00 E0 ED 00(16进制)
这里,就贴出来上面截图的数据内容。(我们使用的是小字节序)
0x00 :
通常的取值。
0x82 :
开始磁头。
0x03 0x00 :
实际为0x0003,按照2进制编码为0000 0000 0000 0011。
那么开始扇区为:0。
开始柱面为:3。
0x0B :
分区类型,为Win95 FAT32类型。
0xE6 :
结束磁头为230。
0xDC 0xCA:
实际为0xCADC,按照2进制编码为1101 1100 1100 1010。
那么结束扇区为:55。
结束柱面为:220。
0x00 0x20 0x00 0x00 :
实际为:0x00002000,也就是8192,为分区的开始扇区地址。那么我们后面就可以从这里去找DBR。
0x00 0xE0 0xED 0x00 :
实际为:0x00EDE000,也就是15589376,为分区的总扇区数。
从这里其实可以算出SD卡的容量。
也就是:
分区大小:15589376x512 = 7981760512。这个值大约是7.612G。
从物理0地址到起始地址:8192*512 = 4194304
那么总容量为:7981760512+4194304 = 7985954816。
该部分包括一个叫BPB的内容。
先截出DBR部分的实际SD卡上的内容:
在WinHex下使用逻辑磁盘打开FAT32文件系统的存储介质来看,偏移位置与表示的含义有如下表所示:
25字节的分区块(BPB):
扩展分区BPB:
按照定义,将实际的图 MBR.png分析如下:
从偏移为0x0BH地址开始:
00 02 10 96 04 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 20 00 00 00 E0 ED 00 B5 1D 00 00
00 02 :
即0x0200,表示扇区字节数,也就是512字节。
10:
即0x10,每簇扇区数为16。也就是16 512=8 1024=8K。
96 04:
即0x0496,保留扇区数为1174。
02:
即0x02,FAT表份数为2。
00 00:
即0x0000,为保留。
00 00:
即0x0000,为保留。
F8:
即为本地硬盘。
00 00:
即0x0000,为保留。
3F 00:
即0x003F,即每磁道扇区数为63。
FF 00:
即0x00FF,即磁头数为255。
00 20 00 00:
即0x00002000,即隐藏扇区数为8192。
00 E0 ED 00:
即0x00EDE000,即磁盘总扇区数为15589376。
B5 1D 00 00 :
即0x001DB5,即FAT表占用扇区数为7605。
好了,根据这些内容,可以计算出两个参数:
FAT1的开始扇区 = 分区开始扇区+ 保留扇区=8192+1174 = 9366。
FAT2的开始扇区 = FAT1的开始扇区+FAT表占用的大小 = 9366 + 7605 = 16971。
首目录簇 = FAT1的开始扇区+FAT的表份数 x FAT表占用的大小=9366+2*7605 = 24576。
继续追踪,找到首目录簇中的已经新建的文件。
现在,先解析粘贴出来的每个部分的内容的含义。
具体内容下面的FAT中会说。
a.txt部分的解析:
41 20 20 20 20 20 20 20 54 58 54 20 18 8B 2A 90
96 4A A1 4A 00 00 0F 8C A1 4A 03 00 10 00 00 00
41 20 20 20 20 20 20 20:
表示文件名:“A TXT”
20 :
表示的是文件的属性。归档。
18:
为系统保留。
8B:
创建时间的10ms位。也就是1390ms。
2A 90:
也就是0x902A,换成2进制为1001 0000 0010 1010 。表示的是创建时间。
细分如下:
则时间值为:
时:0x12 = 18,
分:0x1 = 1,
秒:0xAx 2s + 1390ms= 10x 2s + (1390ms) = 21s,
所以创建时间为18:01:21。
96 4A:
也就是0x4A96,换成2进制为0100 1010 1001 0110,表示的是创建日期。
细分如下:
则日期值为:
年:1980+0x25 = 2017,
月:0x4 = 4,
日:0x16= 22,
所以,创建日期为2017年4月22日。
A1 4A:
也就是0x4AA1,换成2进制为0100 1010 1010 0001,表示的是最后访问日期。
则日期为:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最后访问日期为2017年5月1日。
00 00:
起始簇高16位。
0F 8C:
也就是0x8C0F,换成2进制为1000 1100 0000 1111,表示的是最近修改时间。
时:0x11 = 17,
分:0x20 = 32,
秒:0xf x 2 = 30s,
所以最近修改时间为17:32:30。
A1 4A:
也就是0x4AA1,换成2进制为0100 1010 1010 0001,表示的是最近修改日期。
则日期为:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最近修改日期为2017年5月1日。
03 00:
即0x0003,表示起始簇低16位,也就是说,起始簇高位与起始簇低位相或,得到0x00000003,起始簇为3。
10 00 00 00:
即0x00000010,表示文件数据长度,也就是16字节。
分析完a.txt,b.txt也一样分析即可。
从而可以得到的是,a.txt的内容位置在:(3-2)*16+24576 = 24592上。
后使用winhex进行验证,确认是正确的。
文件分配表(FAT),是FAT文件系统中用于磁盘数据索引和定位而引进的一种链式结构。在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。
如DBR所述,偏移0EH处存储了保留扇区的个数,而保留扇区数指的就是当前分区内DBR到FAT表之间的所有扇区的个数(包括DBR但不包括FAT表)。据此,可以定位FAT表所在的起始偏移位置了。
如DBR所述,偏移24H处存储了保留扇区的个数,知道FAT2是紧邻FAT1的。那么FAT2表的位置为:FAT1的起始偏移地址+FAT1的大小。
FAT表由一系列大小相等的FAT表项组成,它有如下特性:
在FAT32文件系统中,根目录的位置不再硬性地固定,可以存储在分区内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表。所以,我们看到的情况基本上都是根目录首簇紧邻FAT2,占簇区顺序上的第1个簇(即2号簇)。同时,FAT32文件系统将根目录当做普通的数据文件来看,所有没有了目录项数的限制,在需要的时候可以分配空簇,存储更多的目录项。
对于短文件名格式的目录项:
注意:*表示此字段在段文件目录项中,不可取值0FH。若取值为0FH,目录段为长文件名目录段。
0BH字段取值如下:
FAT32的一个重要的特点是完全支持长文件名。长文件名依然是记录在目录项中的。为了低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址。不支持长文件名的OS或程序会忽略它认为不合法的长文件名字段,而支持长文件名的OS或程序则会以长文件名为显式项来记录和编辑,并隐藏起短文件名。
长文件名的实现有赖于目录项第12字节属性字节,当此字节的值为0FH时,支持长文件名的系统会将其当做长文件名的依据,而只支持短文件名的系统会认为是异常而忽略掉。系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项。所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中,以防与其他文件名混淆。
长文件名中的字符采用unicode形式编码,每个字符占据2字节的空间。其目录项定义如:
B. fat32的启动扇区系统由哪三部分组成
简单理解文件系统,就是文件的储存方式。也可以理解为一个门牌系统,为储存设备划分门牌号,每个文件分配一个门牌,然后就能按照门牌找到文件。
今天主要介绍一下windows的三种文件系统。
FAT32
NTFS
exFAT
格式化硬盘的时候,Windows 系统会提供这三种文件系统让你选。这时应该选哪一种呢?
1、FAT32
FAT(File Allocation Table,文件分配表)文件系统是windows操作系统所使用的一种文件系统,它的发展过程经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值为64个扇区,即32KB。所有簇从2开始进行编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。
FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项:
文件分配表:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多于一个簇的空间,则用FAT表来描述,如何找到另外的簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统之间的主要区别在与FAT项的大小不同。
目录项:FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。
FAT32 是最老的文件系统,所有操作系统都支持,兼容性最好。但是,它是为32位计算机设计的,文件不能超过 2 32 - 1 个字节,也就是不能超过 4GB,分区不能超过 8TB。目前来看,这个文件系统有点过时了,只适合小文件,如果有大的视频文件,就不能使用它。
特点:
FAT32文件系统用4个字节(32位)空间来表示每个扇区配置文件的情形,所以叫FAT32。分区容量最低是512M,而上限的话不同的操作系统都不一样,WinXP系统最大可以做到2TB的FAT32分区。
2、NTFS
NTFS 是 Windows 的默认文件系统,用来替换 FAT32。Windows 的系统盘只能使用这个系统,移动硬盘买来装的也是它。与FAT32对比如下:
特点:
NTFS文件系统是windows NT核心和高级服务器网络操作系统环境的文件系统。NTFS系统比FAT32的可靠性更高,可以支持更大的分区和更大的文件,此外还有不少FAT32没有的功能,比如压缩分区、文件索引、数据保护和恢复、加密访问等。
3、exFAT
exFAT 可以看作是 FAT32 的64位升级版, ex 就是 extended 的缩写(表示"扩展的 FAT32"),功能不如 NTFS,但是解决了文件和分区的大小问题,两者最大都可以到 128PB。由于 Mac 和 Linux 电脑可以读写这种系统,所以移动硬盘的文件系统可以改成它。 (全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在 Windows Embeded 5.0 以上(包括 Windows CE 5.0 、6.0、 Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决 FAT32 等不支持4G及其更大的文件而推出。对于闪存, NTFS文件系统不适合使用,exFAT更为适用。
特点:
exFAT文件系统是微软在windows embeded5.0以上引入的一种适合于闪存的文件系统,主要是为了解决FAT32不支持4G或更大文件的问题而推出的。
FAT32与exFAT可用4GB文件的区别
大多数U盘在格式化时默认FAT32,最大优点就是在一个不超过8GB的分区中,FAT32的每个簇容量都固定为4KB,与前代相比可以大大地减少磁盘的浪费,提高磁盘利用率。
虽然对于最大分区容量的支持上面,FAT32的2TB最大分区容量至今仍不过时,但FAT32无法传输并存放超过4GB容量的光盘ISO镜像、高清视频、各种图形作品文件等等,这是最致命的弊端。而exFAT格式在苹果本或者是Windows电脑上都可以格式化,并且在两个系统之间可以互相无障碍使用。相比之下,exFAT格式就没有4GB文件传输限制了。
其实FAT32与exFAT存在着一个升级关系,这两种文件系统都支持OS X系统与Windows系统,如果你将U盘格式化成这两种文件系统,在不同操作系统电脑上可以畅通无阻地使用。
NTFS相比FAT会让闪存性能降低
NTFS是相当流行的,但多见于硬盘。XP、Vista、Win7默认都会将分区格式化为NTFS系统,可以说NTFS是目前最好的磁盘文件系统。
U盘在格式化为NTFS时,实际可用容量与其他文件系统形式也有所差别,虽然使用中感受并不是很大。另外,在格式化U盘时,容量在64G甚至更大规格时,系统识别自动格式化为exFAT与NTFS格式,会便于优盘在不同操作系统电脑上无障碍使用。
但是,NTFS也有他的缺点,NTFS分区采用“日志式”,因为要记录磁盘的详细读写操作,对U盘这种快闪存储介质会造成较大的负担,比如同样存取一个文件或目录,在NTFS上的读写次数就会比FAT32更多,理论上NTFS格式的U盘比较容易损坏。并且由于U盘带宽有限,NTFS频繁读写占据通道会让磁盘性能降低。
总结
FAT32与exFAT之间最大的差别在于能否支持4GB及以上容量单个文件的传输、查看与编辑;而FAT系列文件系统与NTFS之间最大的区分在于文件存取的方式,后者长期使用可能会让闪存类存储产品性能降低.
C. 请指出下面FAT32分区中的目录项的文件名,文件属性和起始簇号
文件名:44 4F 43 53 即:DOCS
文件属性:10 即:子目录
起始簇号:00 00 D2 06
D. fat文件系统采用什么来记录文件的名称
FAT文件系统采用目录项(Directory Entries)来记录文件的名称。
FAT(File Allocation Table)文件系统是一种早期的、相对简单的文件系统,广泛应用于各种存储设备,如闪存盘、SD卡和旧版Windows操作系统中。在FAT文件系统中,文件的组织和管理主要通过文件分配表来实现,而记录文件名称这一任务则交由目录项完成。
具体来说,目录项是存储在磁盘上的数据结构,它们包含了关于文件和目录的元数据,如文件名、文件大小、创建时间等。在FAT文件系统中,每个文件或目录都对应一个或多个目录项。这些目录项被组织在特定的目录结构中,通常是一个线性的列表或是一个层级化的树状结构。当用户创建一个新文件时,系统会在目录区域分配一个新的目录项,并将文件的名称和其他相关信息写入这个目录项中。
以FAT32为例,这是FAT文件系统的一种版本,它使用32位的文件分配表来管理磁盘空间。在FAT32文件系统中,目录项是构成文件目录的基础单元,每个目录项占用固定的磁盘空间,通常是32字节。这个目录项中包含了文件名、文件属性、文件大小以及指向文件数据在磁盘上位置的指针等信息。当用户需要访问某个文件时,操作系统会首先查找目录项,根据目录项中的信息定位到文件数据在磁盘上的具体位置,从而实现对文件的读写操作。
总的来说,FAT文件系统通过目录项来记录文件的名称和其他关键信息,这种机制虽然简单直观,但随着文件数量的增加和磁盘容量的扩大,也暴露出了一些性能和管理上的局限性。尽管如此,FAT文件系统因其兼容性好、实现简单等特点,在特定场景下仍然有着广泛的应用。
E. FAT32系统文件详解
MBR:主引导记录 (主引导记录区)
DBR:DOS 引导扇区 (引导扇区)
FAT:文件分配表 (文件分配表)
硬件:本文SD卡为Kingston 4GB,采用FAT32格式,簇大小4KB,每扇区512字节。
第一章 硬盘与SD卡结构
1.1 硬盘结构
硬盘结构图展示了硬盘的构成,硬盘的主引导扇区(MBR)位于物理地址0处,包含MBR与DPT(分区表),其中DPT由4个分区表组成,每个16字节。分区表中的信息,如起始地址、字节数、类型、结束地址等,对理解分区与数据存储至关重要。
1.2 MBR分析
MBR包括主引导记录与分区表,分区表中的信息指示了分区的偏移量与大小。分区表中的内容对于管理多分区硬盘特别重要。
1.3 SD卡结构
SD卡默认为一个分区,通过WinHex打开SD卡,可以看到非分区空间与分区1。非分区空间即为MBR所在区域,分区1起始于第8192个扇区,剩余扇区功能未知。
第二章 FAT32文件系统
2.1 FAT文件系统简介
FAT32文件系统采用簇作为数据存储单元,簇由连续的扇区组成,最大可达64个扇区。FAT表记录文件的簇分配状态与簇号,目录项则包含文件名、大小等信息。FAT32文件系统在硬盘结构中的分布与功能作用清晰。
2.2 FAT32文件系统结构
FAT32文件系统由保留区、FAT表与数据区构成。保留区包含系统引导扇区(DBR),FAT表包含FAT1与FAT2,数据区存储用户数据。
2.2.1 保留区
保留区由若干个扇区组成,其大小记录在DBR中,通常为32、34或38个扇区。DBR中包含系统标志、版本号、扇区字节数等重要信息。
2.2.1.1 引导扇区(DBR)
DBR的大小为512字节,包含跳转指令、文件系统标志、扇区字节数、簇数等关键数据。
2.2.2 文件分区FAT表
FAT表位于保留区之后,包含FAT1与FAT2,用于记录簇的分配状态与簇号。FAT表与数据区中的簇号对应,提供文件管理功能。
2.2.3 数据区
数据区用于存储用户数据,紧随在FAT表之后,簇从2号开始编号。数据区中的根目录通常位于起始扇区,2号簇,记录文件与目录信息。
2.2.3.1 根目录
根目录由目录项组成,目录项包含文件名、大小、起始簇号等信息。根目录所在扇区为数据区起始位置,2号簇,计算公式可得具体地址。
通过以上内容,我们深入了解了FAT32文件系统的结构与工作原理,包括MBR、DBR、FAT表与数据区的构成与功能,以及如何管理文件与目录。