总结FAT32文件系统
记下学习fat32文件系统的过程,备忘
一、fat32总体结构
按在磁盘中顺序储存如下
主引导记录 MBR
DPT
分区引导扇区 DBR
保留区域
FAT文件表 FAT1
FAT2(FAT1的备份)
数据区 根目录
数据区
二、剖析
1.MBR
MBR位于磁盘的首部,占用446byte(磁盘一个扇区),该扇区的其余64byte留给DPT(磁盘分区表),并以 0x55AA 结束
DPT确定了以下信息
注意:磁盘中数据的的读取是little ending 也就是将数据高位的放在前面
起始地址 |
字节数 |
描述 |
0x1BE |
1 |
可引导标志,0x00不可引导,0x80可引导 |
0x1BF~0x1C1 |
3 |
分区起始CHS地址(CHS=磁头、柱面、扇区),起始地址 |
0x1C2 |
1 |
分区类型 |
0x1C3~0x1C5 |
3 |
分区结束CHS地址 |
0x1C6 |
4 |
从磁盘开始到该分区开始的偏移量(分区起始LBA地址Little-endian顺序) |
0x1CA |
4 |
总扇区数(Little-endian顺序) |
DPT中预留了四个分区的位置,当分区大于4时,第四个分区为扩展分区,并在其分区头部储存有下一个分区位置的信息
--------------------------------------------------------------
写的东西丢了= =补充
--------------------------------------------------------------
通过从此盘开始的偏移量找到分区地址,注意这里是小端编址
2.DBR
DBR是分区的首部,记录了以下信息:
主要关注扇区字节数 、簇扇区数、 保留扇区数 、FAT个数、 FAT大小
【2】0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOC5.0。
【3】0x0B~0x0C:2字节,每扇区字节数,512(0X02 00)。
【4】0x0D~0x0D:1字节,每簇扇区数,8(0x08)。
【5】0x0E~0x0F:2字节,保留扇区数,38(0x00 26),符合FAT1起始地址为38扇区。
【6】0x10~0x10:1字节,FAT表个数,2。
【7】0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
【8】0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
【9】0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质,常用的 0xF0。
【10】0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
【11】0x18~0x19:2字节,每磁道扇区数,只对于有“特殊形状”(由磁头和柱面每 分割为若干磁道)的存储介质有效,63(0x00 3F)。
【12】0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,255(0x00 FF)。
【13】0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,8192(0x00 00 20 00),与MBR中地址0x1C6开始的4个字节数值相等。
【14】0x20~0x23:4字节,文件系统总扇区数,7736320(0x 00 76 0C 00),7736320 * 512 = 3960995840 ≈ 3.67GB。
【15】0x24~0x27:4字节,每个FAT表占用扇区数,7541(0x 00 00 1D 75)。
【16】0x28~0x29:2字节,标记,此域FAT32 特有。
【17】0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
【18】0x2C~0x2F:4字节,根目录所在第一个簇的簇号,2。(虽然在FAT32文件系统 下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)
【19】0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号1,该扇区为操作 系统提供关于空簇总数及下一可用簇的信息。
【20】0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统 的6号扇区。
【21】0x34~0x3F:12字节,用于以后FAT 扩展使用。
【22】0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不
同的位置而已。
【23】0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不
同的位置而已 。
【24】0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过 两者位于启动扇区不同的位置而已
【25】0x43~0x46:4字节,卷***。通常为一个随机值。
【26】0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷 标,会保存在此。
【27】0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。
★【28】0x5A~0x1FD:90~509共410字节,未使用。该部分没有明确的用途。
【29】0x1FE~0x1FF:签名标志“55 AA”。
通过计算 保留区域+FAT表个数×FAT表大小=根目录偏移量
3.FAT
FAT32中每个簇的簇地址是有32bit(4个字节),FAT表中的所有字节位置以4字节为单位进行划分,并对所有划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。我们称FAT表中的这些地址为FAT表项,FAT表项中记录的值称为FAT表项值。
当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,与之对应的2号FAT表项记录为2号簇,被写入一个结束标记。
【0号表项】:0x0FFFFFF8;FAT表起始固定标识【1号表项】:0xFFFFFFFF;不是用,默认值
【2号表项】:0x0FFFFFFF;根目录所在簇
4.根目录
目录所在的扇区,都是以32 Bytes划分为一个单位,每个单位称为一个目录项(Directory
Entry ),即每个目录项的长度都是32 Bytes 。根目录由若干个目录项组成,一个目录项占用32个字节,可以是长文件名目录项、文件目录项、子目录项等。32字节的具体定义如下图: