FAT文件系统总结(二)

 四、 分区引导扇区

也常常称为启动扇区,Microsoft称它为 0 扇区(0th sector),通过前面的介绍我们知 道,称它为 0 扇区其实是不正确的,这样容易让人误解它为磁盘的最前面一个扇区,称它为 0 扇区只是表明它是FAT中扇区的参考点而已。  FAT文件系统总结(二)

                                                  图 2:DBR

该扇区中包含有我们关注的一个重要数据结构 BPB(BIOS Parameter Block)。以下表 格内容翻译自 Microsoft 的《Microsoft Extensible Firmware Initiative FAT32 File System Specification—version1.03》,其中包含 BPB 各项的描述。

NOTE:在以下的叙述中,名字以 BPB_开头的属于 BPB 部分,以 BS 开头的属于启扇区Boot Sector)部分,实际上并不属于BPB

 
offset
长度
描述
 
 
(byte) (byte)
 
 
 
 
BS_jmpBoot
0x00
3
跳转指令,指向启动代码
 
BS_OEMName
0x03
8
建议值为“MSWIN4.1”。有些厂商的 FAT 驱动可能会
 
 
 
 
检测此项,所以设为“MSWIN4.1”可以尽量避免兼容性
 
 
 
 
的问题
 
BPB_BytsPerSec
0x0b
2
每扇区的字节数,取值只能是以下几种:512,1024,
 
 
 
 
2048 或是 4096。设为 512 会取得最好的兼容性,目前
 
 
 
 
有很多 FAT 代码都是硬性规定每扇区的字节数为 512,
 
 
 
 
而不是实际的检测此值。但微软的操作系统能够很好支持
 
BPB_SecPerClus
0x0d
1
1024,2048 或是 4096
 
每簇的扇区数,其值必须中 2 的整数次方(该整数必须
 
 
 
 
>=0),同时还要保证每簇的字节数不能超过 32K,也就
 

 
 
 
 
 
是 1024*32 字节
 
 
BPB_RsvdSecCnt
0x0e
2
 
保留扇区的数目,此域不能为 0,FAT12/FAT16 必须为
 
 
 
 
 
 
1,FAT32 的典型值取为 32,,微软的系统支持任何非 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
BPB_BumFATs
0x10
1
 
分区中 FAT 表的份数,,任何 FAT 格式都建议为 2
 
 
BPB_RootEntCnt
0x11
2
 
对于 FAT12 和 FAT16 此域包含根目录中目录的个数(每
 
 
 
 
 
 
项长度为 32bytes),对于 FAT32,此项必须为 0。对
 
 
 
 
 
 
于 FAT12 和 FAT16 , 此 数 乘 以 32 必 为
 
 
 
 
 
 
BPB_BytesPerSec 的偶数倍,为了达到更好的兼容性,
 
 
 
 
 
 
FAT12 和 FAT16 都应该取值为 512
 
 
BPB_ToSec16
0x13
2
 
早期版本中 16bit 的总扇区,这里总扇区数包括 FAT 卷
 
 
 
 
 
 
上四个基本分区的全部扇区,此域可以为 0,若此域为 0,
 
 
 
 
 
 
那么 BPB_ToSec32 必须为 0,对于 FAT32,此域必为 0。
 
 
 
 
 
 
对于 FAT12/FAT16,此域填写总扇区数,如果该值小于
 
 
 
 
 
 
0x10000 的话,BPB_ToSec32 必须为 0
 
 
BPB_Media
0x15
1
 
对于“固定”(不可移动)存储介质而言,0xF8 是标准
 
 
 
 
 
 
值,对于可移动存储介质,经常使用的数值是 0xF0,此
 
 
 
 
 
 
域合法的取值可以取 0xF0,0xF8,0xF9,0xFA,0xFC,
 
 
 
 
 
 
0xFD,0xFE,0xFF。另外要提醒的是,无论此域写入
 
 
 
 
 
 
什么数值,同时也必须在 FAT[0]的低字节写入相同的
 
 
 
 
 
 
值,这是因为早期的 MSDOS 1.x 使用该字节来判定是何
 
 
 
 
 
 
种存储介质
 
 
 
 
 
 
 
 
 
BPB_FATSz16
0x16
2
 
FAT12/FAT16 一个 FAT 表所占的扇区数,对于 FAT32
 
 
 
 
 
 
来说此域必须为 0,在 BPB_FATZ32 中有指定 FAT 表的
 
 
 
 
 
 
大小
 
 
 
 
 
 
 
 
 
BPB_SecPerTrk
0x18
2
 
每磁道的扇区数,用于 BIOS 中断 0x13,此域只对于有
 
 
 
 
 
 
“特殊形状”(由磁头和柱面每分割为若干磁道)的存储
 
 
 
 
 
 
介质有效,同时必须可以调用 BIOS 的 0x13 中断得到此
 
 
 
 
 
 
数值
 
 
 
 
 
 
 
 
 
BPB_NumHeads
0x1A
2
 
磁头数,用于 BIOS 的 0x13 中断,类似于上面的 BPB_
 
 
 
 
 
 
SecPerTrk,只对特殊的介质才有效,此域包含一个至
 
 
 
 
 
 
少为 1 的数值,比如 1,4M 的软盘此域为 2
 
 
BPB_HidSec
0x1C
4
 
在此 FAT 分区之前所隐藏的扇区数,必须使得调用 BIOS
 
 
 
 
 
 
的 0x13 中断可以得到此数值,对于那些没有分区的存储
 
 
 
 
 
 
介质,此域必须为 0,具体使用什么值由操作系统决定
 
 
BPB_ToSec32
0x20
4
 
该卷总扇区数(32bit),这里的扇区总数包括 FAT 卷
 
 
 
 
 
 
四个个基本分的全部扇区,此域可以为 0,若此域为 0,
 
 
 
 
 
 
BPB_ToSec16 必须为非 0,对 FAT32,此域必须是非 0。
 
 
 
 
 
 
对于 FAT12/FAT16 如果总扇区数大于或等于 0x10000
 
 
 
 
 
 
的话,此域就是扇区总数,同时 BPB_ToSec16 的值为 0。
 

 
本站域名:www.mrtlab.com | QQ交流群:250649022 | 使用条款 | 备案:鄂ICP备2020023514号
MRT数据恢复网,专业的硬盘固件维修与数据恢复技术资料提供站!
Copyright 2003-2020 Powered By MrtLab