DBR开始于FAT16文件系统的第一个扇区,计算机启动时首先由BIOS读入主引导盘MBR的内容,以确定各个逻辑驱动器及其起始地址,然后调入活动分区的DBR,将控制权交给DBR,由DBR来引导操作系统。
FAT16文件系统的DBR由5部分组成,分别为跳转指令、OEM代号、BPB、引导程序和结束标志,图4-222是一个完整的FAT16文件系统的DBR。
跳转指令本身占用2字节,它将程序执行流程跳转到引导程序处。例如,当前DBR中的“EB 3C”,就是代表汇编语言的“JMP 3C”。需要注意该指令本身占用2字节,计算跳转目标地址时以该指令的下一字节为基准,所以实际执行的下一条指令应该位于3E。紧接着跳转指令的是一条空指令NOP(90H)。
OEM代号部分占8字节,其内容由创建该文件系统的OEM厂商具体安排,例如微软的Windows 95将此处设置为“MSWIN4.0”,Windows 98则设置为“MSWIN4.1”,Windows 2000以上的操作系统设置为“MSDOS5.0”。当前DBR中的OEM代号为“MSDOS5.0”,说明这个FAT16分区是由微软的Windows 2000以上的操作系统格式化创建的。
使用WinHex可以很轻易地改变这个OEM代号,不过即使改动也并不影响文件系统的使用。
BPB是BIOS Parameter Block的缩写,其含义为BIOS参数块。BPB从第DBR的第12(0BH偏移处)字节开始,占用51字节,记录了有关该文件系统的重要信息,其中各个参数的含义见表4-20。
表4-20 FAT16的BPB参数
这些参数也可以使用WinHex中的模板来查看。WinHex的模板管理器中提供FAT16的DBR模板。打开WinHex的模板管理器,选择FAT16的DBR模板,如图4-223所示。
双击模板后就可以查看FAT16的DBR信息了,如图4-224所示。
下面对这些参数做详细分析。
1)每扇区字节数:每扇区字节数记录每个逻辑扇区的大小,其常见值为512字节,但512并不是固定值。该值可以由程序定义,合法值包括512、1024、2048和4096字节。
2)每簇扇区数:每簇扇区数记录着文件系统的簇大小,即由多少个扇区组成一个簇。
“簇”是FAT12、FAT16以及FAT32文件系统下数据的最小存储单元,一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂,如1、2、4、8、16、32、64或128。在Windows 2000系统之前,簇的最大值为64扇区;从Windows 2000系统开始,簇的最大取值可以达到128扇区。
在FAT文件系统中,所有的簇从2开始进行编号,每个簇都有一个自己的地址编号,但所有的簇都位于数据区内,在数据区之前是没有簇的。
3)DBR保留扇区数:DBR保留扇区数是指DBR本身占用的扇区以及其后保留扇区的总和,也就是DBR到FAT1之间的扇区总数,或者说是FAT1的开始扇区号。
对于FAT16文件系统来说,DBR保留扇区数的取值范围是1扇区到8扇区之间。
4)FAT个数:FAT个数描述了该文件系统中有几个FAT表,一般在FAT文件系统中都有两个FAT,即FAT1和FAT2,FAT2是FAT1的备份。但依照微软的规定,一些小的存储介质可以只有一个FAT表。
5)根目录项数:根目录项数是指在FAT16的FDT中最大所能容纳的目录项数,这个数值一般都是512,也就是说FDT中只能存放512个目录项,而每个目录项的大小为32字节(目录项的结构后面会详细分析),这样算下来FDT的扇区数为32个。
6)分区总扇区数:小于32MB的分区记录在这里,因为这个位置只有2字节,也就是16位,所以能管理的最大分区为216×512=33 554 432Byte=32MB。对大于32MB的分区,用32位记录在20H~23H偏移处。
7)介质描述符:介质描述符是描述磁盘介质的参数,根据磁盘性质的不同,取不同的值。具体取值见表4-21。
表4-21 磁介质描述符
十六进制值 | 介质类型 |
---|---|
F8 | 硬盘 |
F9 | 双面5.25英寸软盘(15扇区高密度)、双面3.5英寸软盘 |
FA | 双面3.5英寸软盘、RAM虚拟盘 |
FC | 单面5.25英寸软盘(9扇区高密度)、双面8英寸软盘 |
FD | 双面5.25英寸软盘(9扇区低密盘) |
FE | 单面8英寸软盘(单、双密度)、单面5.25英寸软盘(8扇区低密盘) |
FF | 双面5.25英寸软盘(8扇区低密盘) |
8)每FAT扇区数:每FAT扇区数是指每个FAT表包含的扇区数,FAT2是FAT1的镜像,两个FAT一样大。
9)每磁道扇区数:这是逻辑C/H/S中的一个参数,其值一般为63。
10)磁头数:这也是逻辑C/H/S中的一个参数,其值一般为255。
11)隐藏扇区数:隐藏扇区数是指本分区之前使用的扇区数,该值与分区表中所描述的该分区的起始扇区号一致,对于主磁盘分区来讲,是MBR到该分区DBR之间的扇区数;对于扩展分区中的逻辑驱动器来讲,是其EBR到该分区DBR之间的扇区数。
12)分区总扇区数:对大于32MB的分区,其扇区总数记录在这个位置。
13)BIOS驱动器号:这是BIOS 的INT 13H所描述的设备号码,一般把硬盘定义为8xH。
14)扩展引导标记:扩展引导标记用来确认后面的三个参数是否有效,一般值为29H。
15)卷序列号:卷序列号是格式化程序在创建文件系统时生成的一组随机数值。曾经的Windows 98是把文件系统的创建时间中的月、日、时、分、秒和十分之一秒值都换算成一字节的十六进制值,把年份换算成两字节的十六进制值,将时和分组成一个二字节数值,时为高位,分为低位,然后将这个数值与年的二字节值相加,得到的十六进制值作为32位卷序号的高16位。将月和日组成一个二字节十六进制值,时为高位,日为低位;将秒和十分之一秒组成一个二字节十六进制值,秒为高位,十分之一秒为低位,然后将这两个值相加,得到的十六进制值作为卷序号的低16位,最后就产生了一个4字节的卷序列号。但是从Windows 2000以后,卷序列号就不再这样计算了。
16)卷标:卷标是由用户在创建文件系统时指定的一个卷的名称。原来的系统把卷标记录在这个地址处,现在的系统已经不再使用这个地址记录卷标,而是由一个目录项来管理卷标。
17)文件系统类型:BPB的最后一个参数,直接用ASCII码记录下当前分区的文件系统类型。
FAT16的DBR引导程序占用448字节(3EH~1FDH)。在Windows 98之前的系统之下,这段代码负责完成DOS三个系统文件的装入;在Windows 2000之后的系统中,其负责完成将系统文件NTLDR装入。对于一个没有安装操作系统的分区来讲,这段程序没有用处。
DBR的结束标志与MBR、EBR的结束标志都相同,为“55 AA”。
以上5个部分共占用512字节,正好是一个扇区,因此称它为DOS 引导扇区。该部分的内容中除了第5部分结束标志是固定不变之外,其余4个部分都不是完全确定的,因操作系统版本的不同而不同,也因硬盘的逻辑盘参数的变化而变化。