首页 > 代码库 > 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的扇区