FAT16文件系统结构扇区数据分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qlexcel/article/details/84308496

FAT,英文为File Allocation Table,文档分配表。先要记住几个概念:
扇区:一般扇区为512个字节。
:由若干个扇区组成,是存取数据的最小单位。如果簇大小为16K,文件大小为1字节,那也要用一个簇来存,而且该簇不用再拿来他用。
FAT文件系统就是专门管理这些簇的。一个文件可能占据一个或者多个簇,按正确的顺序去读取这些簇,就可以获取这个文件的内容了。
一、FAT16的基本结构
FAT16基本结构依次为:DBR扇区、FAT表1、FAT表2、根目录和数据区。
1、DBR扇区
DBR是操作系统可以直接访问的第一个扇区,包括一个引导程序和一个称为BPB的本分区参数记录表。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元的大小等重要参数。
在这里插入图片描述

在这里插入图片描述

2、FAT表1和FAT表2
FAT表1和FAT表2是保存簇状态的地方,从DBR可知一个FAT表是21个扇区。它里面的内容很简单就是指出下一个簇在哪里。盘里有多少个簇,FAT就有多少个项来描述它们。FAT16用16bit来描述一个簇。第0和第1个字节表示第0个簇,第2和第3个字节表示第1个簇,第4和第5个字节表示第2个簇…就这样,每个簇都有两个和它对应的字节,这两个字节里面存放的数据就是文件中下一个簇大小数据所在的簇号。
比如要读new.txt文件,从根目录中找到了它,读它的根目录信息知道它的第一个簇的簇号是5,于是把第5号簇的数据送出去,在FAT表中5号簇是第10和第11字节来表示的,于是去读第10和第11字节,得到0007,知道了文件接下来的数据保存在7号簇中,把7号簇的数据送出去,又去读第14和第15字节的数据,得到FFFF,说明文件到末尾了。
下面是FAT中数据的含义:
在这里插入图片描述

对于FAT16,每个簇用16Bit来表示,最大能表示65536,FAT16的簇最大为32K,因此FAT16最大只能支持6553632K约等于2G。因此大于2G的盘必须选择其他的文件系统,比如FAT32,没有簇用32bit来表示。
根据DBR的参数,我们可以算出FAT1的偏移地址以及根目录的偏移值。
FAT1偏移地址:保留扇区(FAT1之前的扇区,包括引导扇区)之后就是FAT1。因此可以得到,FAT1的偏移地址就是第1个扇区的位置,也就是512。大小为21个扇区,即21
512=10752字节。
FAT2偏移地址:FA1偏移地址+FAT1的大小,512+21512 = 11264。
在这里插入图片描述
3、根目录
根目录偏移地址: FAT2偏移地址+ FAT2的大小,11264+21
512= 22016。
根目录的偏移地址也是第1个簇的起始位置,根目录保存在第1个簇中,即第1个簇地址为22016,第2个簇为22016+32512=38400(每个簇占32个扇区)。我们来看看根目录的数据:
在这里插入图片描述
在根目录中,一个文件或者一个文件夹用32字节来表示。
在这里插入图片描述
根据这个我们就可以解读根目录的信息了,可以看到现在根目录中只有一个名字为IMAGE和名字为VERINFO的文件夹。可以看到VERINFO文件夹的首簇号是 9F 12 也就是 0x129F = 4767号簇。可以得到VERINFO文件夹的偏移地址是22016+(4767-1)51232 = 78108160。数据如下:
在这里插入图片描述
VERINFO文件夹下文件信息的组织方式和根目录一样,可以看到现在VERINFO文件夹下有两个不知名的文件夹和一个叫ver_info.txt的文件。又可以继续得到该文件的首簇号和文件的长度。首簇号是 A0 12 也就是0x12A0=4768。文件长度是1F 也就是31字节,小于簇大小512
32字节,因此只占一个簇,不需要回去查看FAT来找到剩下的簇。
该文件所在位置:22016+(4768-1)51232 = 78124544。
在这里插入图片描述
上面看到的数据就正好是ver_info.txt中保存的数据。

猜你喜欢

转载自blog.csdn.net/qlexcel/article/details/84308496