首页 > 代码库 > FAT32文件系统定位FAT文件分配表以及根目录

FAT32文件系统定位FAT文件分配表以及根目录

一、FAT1起始扇区 =  DBR的扇区号 + 保留扇区号

1.获取DBR的扇区号

磁盘的0号扇区的 0X1C6~0X1C9是第一个分区的起始扇区,这个扇区就是DBR

下图是本人的磁盘的0号扇区,可以看到DBR的扇区号是0X00 00 00 3F(小端格式)


2.得到保留扇区

打开DBR扇区,偏移0X0E~0X0F表示保留扇区


由图可知保留扇区数为0X00 26.

FAT1起始扇区 =  DBR的扇区号 + 保留扇区号  = 0X3F + 0X26 = 0X65

打开扇区号为0X65的扇区,这就是FAT1的起始扇区


二 .FAT2的起始扇区

FAT2是紧邻FAT1的,所以  FAT2的起始扇区 = FAT1的起始扇区 + 一个FAT的扇区数

1.FAT1的起始扇区

按照上面的方法得到,本例是0X65.

2.一个FAT的扇区数

从DBR的偏移0X24~0X27得到,由第一个图可知本例是0X3A79。

 FAT2的起始扇区 = FAT1的起始扇区 + 一个FAT的扇区数 = 0X65 + 0X3A79 = 0X3ADE

打开扇区号为0X3ADE的扇区,可以看到FAT2与FAT1是一样的。


三、根目录区

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

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

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

根目录起始扇区 = 保留扇区数 + 一个FAT的扇区数 × FAT表个数 + (起始簇号-2) x 每簇的扇区数

1.保留扇区数

从DBR的偏移0X0E~0X0F得到,本例是0X65.

2.一个FAT的扇区数

从DBR的偏移0X24~0X27得到,由第一个图可知本例是0X3A79。

3.FAT表个数

从DBR的偏移0X10得到,由第一个图可知本例是0X02。一般有两个FAT表,FAT1和FAT2。

4.起始簇号

从DBR的偏移0X2C~0X2F得到,由第一个图可知本例是0X00 00 00 02。

5.每簇的扇区数

从DBR的偏移0X0D得到,由第一个图可知本例是0X08,一个簇是8个扇区。

所以 根目录起始扇区 = 保留扇区数 + 一个FAT的扇区数 × 2 + (起始簇号-2) x 每簇的扇区数 

                                      = 0X26  +  0X3A79 * 2 + (0X2 - 2) * 8 = 0XEA0A

打开扇区号为0XEA0A的扇区