NTFS文件系统的引导扇区是$Boot的第一个扇区,它的结构与FAT文件系统的DBR类似,所以习惯上也称该扇区为DBR扇区。DBR扇区在操作系统的引导过程起着非常重要的作用,如果这个扇区遭到破坏,系统将不能正常启动。
NTFS文件系统的DBR扇区与FAT文件系统的结构一样,也包括跳转指令、OEM代号、BPB参数、引导程序和结束标志。图4-401是一个完整的NTFS文件系统的DBR。
跳转指令本身占用2字节,它将程序执行流程跳转到引导程序处。例如,当前DBR中的“EB 52”,就是代表汇编语言的“JMP 52”。
注意:该指令本身占用2字节,计算跳转目标地址时以该指令的下一字节为基准,所以实际执行的下一条指令应该位于54H。紧接着跳转指令的是一条空指令NOP(90H)。
这部分占8字节,其内容由创建该文件系统的OEM厂商具体安排。例如,微软的Windows系统将此处直接设置为“NTFS”,在NTFS文件系统中也称为“文件系统ID”。
BPB是BIOS Parameter Block的缩写,其含义为BIOS参数块。BPB从DBR的第12(0BH偏移处)个字节开始,到偏移53H结束,占用73个字节,记录了有关该文件系统的重要信息,其中各个参数的含义见表4-29。
表4-29 NTFS文件系统BPB参数的含义
这些参数也可以使用WinHex中的模板来查看。WinHex的模板管理器中提供NTFS的DBR模板。打开WinHex的模板管理器,选择NTFS的DBR模板,如图4-402所示。
双击模板后就可以查看NTFS的DBR信息了,如图4-403所示。
(1)0BH~0CH:每扇区字节数
每扇区字节数记录每个逻辑扇区的大小,其常见值为512字节,但512并不是固定值,该值可以由程序定义,合法值包括512字节、1024字节、2048字节和4096字节。
(2)0DH~0DH:每簇扇区数
每簇扇区数记录着文件系统的簇大小,即由多少个扇区组成一个簇。
如果这个分区是在系统安装前被格式化而来的,一般大于2GB的分区每簇默认占用8个扇区,也就是每簇大小为4KB,这个字节的内容就为十六进制值“08”。如果这个分区是由一个FAT分区转换而来,则每个簇一般占用1个扇区的空间,也就是每簇大小为512字节,这个字节的内容就是“01H”。
在NTFS文件系统中所有的簇从0开始进行编号,每个簇都有一个自己的地址编号,并且从分区的第一个扇区就开始编簇。
(3)0EH~0FH:DBR保留扇区数
NTFS文件系统中DBR没有保留扇区,该值常为“0000”。
(4)10H~12H:总是0
这3个字节总是“00 00 00”。
(5)13H~14H:未用
这两个字节不用。
(6)15H~15H:介质描述符
这个字节为介质描述字节,一般硬盘为“F8H”;双面5.25英寸软盘为“F9H”;双面3.5英寸软盘RAM虚拟盘为“FAH”;3.5英寸、1.44MB的软盘一般为“F0H”。因为NTFS分区一定在硬盘上,所以此处常为16进制数“F8”。
(7)16H~17H:未用
这两个字节不用。
(8)18H~19H:每磁道扇区数
这是逻辑C/H/S中的一个参数,其值一般为63,NTFS已经不用此参数。
(9)1AH~1BH:磁头数
这是逻辑C/H/S中的一个参数,其值一般为255,NTFS已经不用此参数。
(10)1CH~1FH:隐藏扇区数
隐藏扇区数是指本分区之前使用的扇区数,该值与分区表中所描述的该分区的起始扇区号一致。对于主磁盘分区来讲,是MBR到该分区DBR之间的扇区数;对于扩展分区中的逻辑驱动器来讲,是其EBR到该分区DBR之间的扇区数。
(11)20H~23H:未用
这4字节不用。
(12)24H~27H:未用
这4字节不用,但总为80008000。
(13)28H~2FH:扇区总数
扇区总数是指分区的总扇区数。NTFS的BPB中记录的分区大小比分区表中记录的少一个扇区,因为分区最后一个扇区留给DBR备份使用了。
(14)30H~37H:$MFT的起始簇号
这8字节为$MFT的起始簇号,注意这个位置使用簇号定义的,而不是扇区号,并且该地址不是固定值。
(15)38H~3FH:$MFTMirr的起始簇号
这8字节为$MFTMirr的起始簇号,这个位置也使用簇号定义,而不是扇区号。$MFTMirr的地址也不是固定值的,可以在$MFT之后,也可以在$MFT之前。本例中,$MFTMirr的地址就在$MFT之前。
(16)40H~40H:文件记录的大小描述
这一个字节描述每个文件记录的簇数。注意该参数为带符号数,当其是负数时,说明每个文件记录的大小要小于每簇扇区数,在这种情况下,文件记录的大小用字节数表示,计算方法为:2-1×每个文件记录的簇数。例如,图4-401的DBR中该参数值为“F6H”,换算为十进制等于“-10”,所以每个文件记录的大小是2-1×-10=210=1024字节。
(17)41H~43H:未用
这3字节不用。
(18)44H~44H:索引缓冲的大小描述
这一个字节描述每个索引缓冲的簇数。注意该参数也是带符号数,当其是负数时,说明每个索引缓冲的大小要小于每簇扇区数,在这种情况下,索引缓冲的大小用字节数表示,计算方法为:2-1×每个索引缓冲的簇数。
(19)45H~47H:未用
这3字节不用。
(20)48H~4FH:卷序列号
这8字节为分区的逻辑序列号,也就是在命令行下输入DIR命令后显示的一排数据,这个序列号是硬盘格式化时随机产生的。
(21)50H~51H:校验和
BPB的最后四个字节是其校验和,一般都为0。
NTFS的DBR引导程序占用426字节(54H~1FDH),其负责完成将系统文件NTLDR装入。对于一个没有安装操作系统的分区来讲,这段程序没有用处。
DBR的结束标志与MBR、EBR的结束标志都相同,为“55 AA”。
以上5个部分共占用512字节,正好是1个扇区,这个扇区属于$BOOT文件的组成部分。该部分的内容中除了第5部分结束标志是固定不变之外,其余4部分都是不完全确定的,都因操作系统版本的不同而不同,也因硬盘的逻辑盘参数的变化而变化。