背景
FAT32作为一个文件系统,有着广泛的应用。在安装操作系统时,许多个人用户默认都选择FAT32文件系统,因此,了解FAT32文件系统下的文件、目录的管理方式就显得非常必要了。
FAT32文件系统与FAT16文件系统有着较大的区别。其中,FAT32采用4字节共32位来表示文件的FAT项,因此,一个FAT32文件系统管理的分区最多可管理的簇数目为:2^32= 4294967296,若选择4K大小的簇,则该分区的最大容量可达:16384G。
FAT32文件系统分布图
DBR及保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。
FAT1:FAT的含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。
FAT2:FAT2是FAT32的第二份文件分配表,也是FAT1的备份。
DATA:DATA也就是数据区,是FAT32文件系统的主要区域,其中包含目录区域。
FAT表项
FAT表即文件分配表(File Allocation Table)。FAT32文件表是由一个个表项组成的一张表,其中每一个表项由一个32位的二进制组成,其值对应了相应簇的使用情况,如2号表项对应了2号簇的使用情况,3号表项对应了3号簇的使用情况。
表项数值 | 对应含义 |
0x00000000 | 空闲簇,即表示可用 |
0x00000001 | 保留簇 |
0x00000002 - 0x0FFFFFEF | 被占用的簇,其值指向下一个簇号 |
0x0FFFFFF0 - 0x0FFFFFF6 | 保留值 |
0x0FFFFFF7 | 坏簇 |
0x0FFFFFF8 - 0x0FFFFFFF | 文件最后一个簇 |
如果某簇是文件的最后一簇,填入的值为0x0FFFFFFF;如果该簇不是文件的最后一簇,则填入的值为该文件占用的下一簇号
任务
1)新建目录、文件,观察硬盘分区的变化,比较新建项目前与新建项目后分区的变化,掌握FAT32文件系统下目录、文件的管理方式。
2)理解FAT32下长文件名的处理方式
3)了解FAT32下子目录的管理
4)理解FAT32下目录、文件删除的实质
操作步骤及工作要点
1. 文件的管理
1) 打开一个FAT32分区,拷贝一个大于20K的文件到根目录下,更名为”shun.txt”
2) 打开WINHEX,打开文件所在的分区。
FAT表第0项 : 0x0FFFFFF8
FAT表第1项 : 0xFFFFFFFF
这两项不代表任何簇的使用情况,而是FAT表的表头,表征了介质描述,是固定值,所以0x00和0x01这两个簇号是不用的
3) 查找文件目录。抓图
4) 计算出起始簇的FAT表项在FAT表中的偏移量
表1 FAT32短文件名目录项参数表
由此表知,0x0005为其簇号,查看FAT表,其内容为“06 00 00 00”
5) 查找FAT表中该文件的相应纪录项,抓图
6) 记录文件的所有簇号。
文件大小为34KB,一个簇8个扇区,合计4KB,所以需要9个簇,如下所示,最后的为0x0FFFFFFF,为文件最后一个簇
记录文件的所有簇号
2. 长文件名的处理
1) 新建一个文本文件,文件名称超过8个字符。
建立文件"cptbtptpbcptdtptp.txt",内容为Hello pt!
2) 在WINHEX中,查找该文件的各种目录项(短文件目录项和长文件目录项)。抓图
了解到:
当创建一个长文件名文件时,系统会自动加上对应的短文件名,其原则如下:
(1)、取长文件名的前6个字符加上"~1"形成短文件名,扩展名不变。
(2)、如果已存在这个文件名,则符号"~"后的数字递增,直到5。
那么系统是如何判断当前目录项是短文件名目录项呢还是长文件名目录项,这里关键是看目录项的第12个字节的值,如果为0x0F时则系统认为是长目录项。
故对应的短文件名为cptbtp~1
3) 在图形中间标出相应的短文件目录项,和长文件目录项。
长目录项:
表2 FAT32长文件名目录项参数表
参考上表,
第一部分
第1目录项unicode为tptp
第2目录项unicode为cptbtptpbcptd
由于逆序,合起来就是我们的文件名
短目录项:长文件名目录项后面还会跟一个短文件名目录项,这个目录项记录了除文件名以外的这个文件的信息,而文件名部分则用上面提到的短文件名目录项替换。
4) 分析数据:比较长目录项和短文件名目录项的差别
3. 子目录的管理
1) 新建一个文件夹,更名成“qwer”
2) 在WINHEX中间查找该子目录的目录项。抓图
3) 计算该目录项中起始簇在fat表中的纪录项偏移量,使用WINHEX跳到相应的位置。抓图
由上图,记录项偏移量为0010,为16号簇,FAT对应值为0x0FFFFFFF
4) 分析数据:比较文件和子目录的目录项的区别和相同的地方。
4. 文件和目录的删除
1) 新建一个文本文件。
2) 使用两种方法删除文件:delete和shift+delete,对比两种方法的区别。
delete只是普通删除文件,可以从回收站之中找回来,而shift+delete是彻底删除文件,不经过回收站,类似于linux的rm指令
3) 彻底删除第1部分和第2部分中的文件,然后查找相应的文件目录和FAT表中的表项,抓图对比删除前后的区别。
可以看到文件目录已经不存在了.
原来的5号簇也全部变成0,表示未占用
4) 彻底删除第3部分中新建的文件夹,然后查找该目录的目录项和FAT表项。抓图,对比删除前后的区别。
文件夹的目录表也被删去
至于FAT表,原始簇号为16,现16簇为0000 0000,未被占用
参考
1.https://www.cnblogs.com/fantacity/p/3897933.html
2.https://www.cnblogs.com/fantacity/p/3900237.html
3.https://blog.csdn.net/yangyang031213/article/details/79030247
簇