FAT文件系统数据格式
2021-07-01
222
0
FAT12、FAT16的DBR相同(以下称为FAT)。
FAT12/16格式:
偏移 | 意义 | 大小 | 解释 |
---|---|---|---|
0x00: | JMP指令 | 3字节 | SHORT跳转的话,是一个JMP一个NOP。 |
0x03: | OEM标识 | 8字节 | 比如MSDOS5.0等字符串。 |
0x0B: | 每个扇区的字节数 | 2字节 | 如:0x0200。 |
0x0D: | 每个簇的扇区数 | 1字节 | 如:0x01。 |
0x0E: | 保留扇区数 | 2字节 | 从分区开始到第一个FAT之前的扇区数。 |
0x10: | FAT的数量 | 1字节 | 一般为2 |
0x11: | 根目录最大项数 | 2字节 | 根目录文件(夹)个数上限。 |
0x13: | 分区总扇区数 | 2字节 | 这个分区的总大小。 |
0x15: | 介质类型 | 1字节 | 介质类型,如“软盘”“硬盘”。 |
0x16: | 每FAT扇区数 | 2字节 | 单个FAT占用的扇区数。 |
0x18: | 每磁道扇区数 | 2字节 | 每个磁道的扇区数。 |
0x1A: | 磁头数 | 2字节 | 磁头的总数。 |
0x1C: | 隐藏扇区数 | 4字节 | DBR前面的扇区数,也就是分区前的扇区数。 |
0x20: | 保留不用 | 4字节 | FAT32的分区总扇区数。 |
0x24: | 驱动器数 | 1字节 | 驱动器的数量。 |
0x25: | 当前磁头 | 1字节 | 当前使用的磁头。 |
0x26: | 磁盘扩展参数块 | 24字节 | 磁盘扩展参数块。 |
0x3E: | 引导指令 | 引导指令。 | |
0x1FE: | 可引导标识 | 2字节 | 0xAA55 |
FAT32文件系统前部有一个由若干个扇区组成的保留区,保留区的大小会记录在引导扇区(文件系统的0号扇区,也称DBR扇区)中,FAT32常见的保留区扇区个数为63。
FAT32文件系统保留扇区的第一个扇区一般叫做DBR,为512个字节。其数据结构如下:
FAT32格式:
偏移 | 意义 | 大小 | 解释 |
---|---|---|---|
0x00: | JMP指令 | 3字节 | SHORT跳转的话,是一个JMP一个NOP。 |
0x03: | OEM标识 | 8字节 | 比如MSDOS5.0等字符串。 |
0x0B: | 每个扇区的字节数 | 2字节 | 如:0x0200。 |
0x0D: | 每个簇的扇区数 | 1字节 | 如:0x01。 |
0x0E: | 保留扇区数 | 2字节 | 从分区开始到第一个FAT之前的扇区数。 |
0x10: | FAT的数量 | 1字节 | 一般为2。 |
0x11: | 保留不用 | 4字节 | FAT12、16的根目录项数、分区总扇区数,此处为0。 |
0x15: | 介质类型 | 1字节 | 介质类型,如“软盘”“硬盘”。 |
0x16: | 保留不用 | 2字节 | FAT12、16的每FAT扇区数,此处为0。 |
0x18: | 每磁道扇区数 | 2字节 | 每个磁道的扇区数。 |
0x1A: | 磁头数 | 2字节 | 磁头的总数。 |
0x1C: | 隐藏扇区数 | 4字节 | DBR前面的扇区数,也就是分区前的扇区数。 |
0x20: | 分区总扇区数 | 4字节 | 分区总扇区数。 |
0x24: | 单个FAT扇区数 | 4字节 | 单个FAT占用的扇区数。 |
0x28: | FAT是否非镜像 | 2字节 | FAT是否镜像。0:镜像(两FAT一致)1:非镜像 |
0x2A: | 版本号 | 2字节 | 可以为0。 |
0x2C: | 根目录起始簇 | 4字节 | 根目录的起始位置。FAT32的根目录不固定 |
0x30: | FSInfo的扇区号 | 2字节 | 以扇区为单位。 |
0x32: | DBR备份的扇区号 | 2字节 | 以扇区为单位,另一个DBR的备份。 |
0x34: | 保留未用 | 12字节 | 全为0。 |
0x40: | BIOS的设备ID | 2字节 | 也就是用INT 0x13访问此驱动器的时候指定的ID号。 |
0x42: | 磁盘扩展参数块 | 24字节 | 磁盘扩展参数块。 |
0x5A: | 引导指令 | 引导指令。 | |
0x1FE: | 可引导标识 | 2字节 | 0xAA55 |
其中0x42位置的磁盘扩展参数结构如下:
偏移 | 意义 | 大小 | 解释 |
---|---|---|---|
0x00: | 扩展参数块标识 | 1字节 | 值为0x29 |
0x01: | 分区ID | 4字节 | 随机数,用于区分硬盘。 |
0x05: | 卷标 | 11字节 | 卷标,也就是驱动器的“名字”、“标签” |
0x10: | 文件系统类型 | 8字节 | 值为“FAT12”、“FAT16”、“FAT32” |
假如有一FAT32的保留区如下图所示:、
使用WINHEX可以查看数据详情
引导代码
FAT文件系统和MBR类似,是将引导代码和数据结构整合在一。引导代码的前2个指令为跳转指令,跳转到配置数据后面的代码;0X90为NOP指令。
在系统的启动过程中,MBR的引导代码找到可引导扇区的引导代码(如FAT32的DBD)并将控件权交给它,由它找到适当的操作系统文件并进行加载。
无论这个FAT卷是不是可引导文件系统,也会存在引导代码。
FSINFO信息扇区
FAT32在保留扇区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量及下一个可用簇的簇号等信息。
FSINFO一般位于保留于的1号扇区中,大小为512字节。
偏移 | 意义 | 大小 | 解释 |
---|---|---|---|
0x00: | FSInfo标识 | 4字节 | 值为“RRaA”,0x41615252。 |
0x04: | 保留不用 | 480字节 | 全为0。 |
0x1E4: | FSInfo标识2 | 4字节 | 值为“rrAa”,0x61417272。 |
0x1E8: | 空闲簇数 | 4字节 | 统计目前空闲可用的簇数,计算磁盘剩余容量可用。 |
0x1EC: | 下一可用簇号 | 4字节 | 下一个可用的簇号。 |
0x1F0: | 保留不用 | 14字节 | 全为0。 |
0x1FE: | 可引导标识 | 2字节 | 0xAA55 |
FAT32保留区的备份
通常情况下,文件系统的2号扇区结尾也会被置为55AA.6号扇区会有一个引导扇区的备份,7号扇区也会有一个扇区备份FSINFO.8号扇区也有一个是2号扇区的备份,也有一个55aa标志。