本文描述windows系统下已经确定文件系统下的磁盘主引导扇区,文件系统为NTFS。其他操作系统下是否完全相同,暂时不知。
MBR以及DBR扇区分析
1 MBR
MBR全称为Master Boot Record ,俗称为主引导扇区。它是系统运行时第一块加载到内存中的扇区,其结构为:引导程序、磁盘签名、主分区信息和结束标记。每一部分在MBR中所占的位置如下图:

图1 MBR扇区结构
黑框内为引导程序,绿色框内为 磁盘签名,红色框内为结束标志。引导程序不是我们感兴趣的不做分析。
磁盘签名在上图中标记占用了6B,但是实际上磁盘签名仅仅占用了前4个字节。磁盘签名的作用是说明当前物理磁盘已经完成了格式化和分区,如果磁盘签名为空,即4个字节的数据全部为00,那么说明磁盘尚没有完成初始化,操作系统无法识别和加载,从而导致系统崩溃。如果我们连续两次对物理磁盘进行格式化,那么每次格式化得到的磁盘签名是不相投的。
结束标志,结束标志的值始终是55 AA,占用2个字节。如果结束标志不是55 AA,那么在系统加载磁盘时候会报错。
在磁盘签名和结束标志之间是当前物理磁盘的分区信息。众所周知,通过操作系统界面,我们看到的磁盘分区有好多个。如果你通过管理界面查看分区信息,会看到有的磁盘分区是主分区,有些磁盘分区是扩展分区。之所以有这些差别,其原因就在这里。在MBR中每个分区记录占用16个字节,所以在仅仅占用64个字节中包含所有的磁盘分区信息是不肯能的。在MBR中最多包含4个分区的信息,而这4个分区称之为主分区;不在MBR中的分区信息称之为扩展分区。第一个扩展分区的位置信息在MBR中最有一个分区记录中表示。下面对分区记录中每个字节所代表的意义进行分析和阐述。
我们对图1中的第一条分区记录和最后一条分区记录进行分析,之所与选择这两条记录,原因是:当前物理磁盘总共划分了8个分区,第一条记录是普通的一条主分区记录,最后一个分区记录包含了扩展分区信息所在位置等信息。
第一条分区记录是:80 6B 10 00 07 86 0E 30 00 80 00 00 00 20 03 00
最后一条分区记录是:00 86 CE FF 0F 86 CE FF B1 A1 A9 03 60 10 6E 21
为了更加直观和清晰的表示每个字节所代表的意义,采用列表方式,如下表
|
偏移量 |
值 |
长度 |
意义 |
|
1BE |
80 |
1B |
引导标志,指明该分区是否为活动分区 |
|
1BF |
6B |
1B |
开始磁头 |
|
1C0 |
10 |
6b |
起始扇区,并且只是用了“10”字节中的0~5位,后面两位6、7用于起始柱面 |
|
1C1 |
00 |
10b |
该字节的8为加上10字节中的后两位,总共8为表示该分区起始柱面 |
|
1C2 |
07 |
1B |
表示分区类型,该条记录表示是分区本身文件系统类型或者分区是否为扩展分区(即该记录指向扩展分区信息所在扇区) |
|
1C3 |
86 |
1B |
该分区的结束磁头 |
|
1C4 |
0E |
6b |
结束扇区,同起始扇区类似,只占用当前字节中的0~5为,后面6、7位用于结束柱面 |
|
1C5 |
30 |
10b |
结束柱面,共10为,包括本字节的八位和上一个字节的6、7两位 |
|
1C6 |
00 80 00 00 |
4B |
偏移扇区,即当前扇区到分区起始扇区的距离(单位:扇区) |
|
1C9 |
00 20 03 00 |
4B |
分区所拥有的总扇区数 |
表1 分区记录字节意义表
(如果字段长度超过一个字节,那么该字段代表的数值是按照由左到右有地位到高位)
表1 是以分区记录中的第一条记录为例进行说明其意义的。如果我们将最后一条 分区记录的数据按照表1进行分析,分区类型为0F,查找分区类型表可知为扩展分区(windows 95 Extended 大于8GB)。由于分区类型表比较大,所以在这里对分区类型不进行详细列举。如果分区类型为0F,那么偏移扇区为第一扩展分区信息所在扇区的偏移量,而总扇区数表示所有扩展分区拥有的扇区数目累加和。
下图扩展分区信息所在的扇区数据

图2 扩展分区分区记录所在扇区数据
在扩展分区的分区记录所在扇区,除最后两字节为结束标记以及两条分区记录外,其他位置的值是不确定的。图2中黑色方框内的数据为当前扩展分区的分区记录信息,红色方框内的数据时下一扩展分区的分区记录信息。如果当前扩展分区为最后一个扩展分区,那么红色方框内的数据为00。扩展分区记录的数据结构与MBR中分区记录的数据结构相同,所以在此不再累赘介绍,具体字节意义请参照表1
2 DBR
DBR全称为Driver Boot Record,俗称分区引导扇区。在DBR中包含分区引导程序、分区信息记录,比如文件$MFT起始簇、跳转代码、OEM、结束标志等信息。下图为DBR扇区数据:

图3 DBR扇区数据分布情况
上图为DBR所在扇区分布情况。DBR 扇区总共有五部分数据组成,即跳转程序,绿色方框内的数据,共占3B;OEM代号,浅绿色方框内,共占8B;BPB数据,红色方框内,共占73B;引导程序,红色方框和黑色方框之间数据,共占426B;结束标志,黑色方框内,数值为 55 AA,占用2B。其中OEM代号的值与系统厂商有关,这里不做具体分析,由厂方设置其值。在本文中,分析的重点为BPB,具体如下所述。
BPB在DBR整个扇区的的起始地址为0X0B,共73个字节,并且包含了丰富的关于当前分区的信息。我们以图3为例,对BPB进行详细分析,具体如下表:
|
偏移量 |
字段值 |
字段长 |
字段意义 |
|
0X0B |
00 02 |
2B |
每个扇区字节数目 |
|
0x0D |
08 |
1B |
每个簇所拥有扇区数 |
|
0X0E |
00 00 |
2B |
保留扇区(在NTFS中无用) |
|
0x10 |
00 00 00 |
3B |
无意义 |
|
0X13 |
00 00 |
2B |
NTFS未使用 |
|
0X15 |
F8 |
1B |
介质描述,F8代表硬盘, |
|
0x16 |
00 00 |
2B |
总为0 |
|
0x18 |
13 00 |
2B |
每个磁道扇区数 |
|
0X1A |
E0 00 |
2B |
磁头数,是逻辑C/H/S中的一个参数,一般为FF,NTFS中已经不使用了。 |
|
0X1C |
B0 04 00 00 |
4B |
隐藏扇区数,即MBR分区到当前DBR分区的扇区总数。 |
|
0X20 |
00 00 00 00 |
4B |
NTFS未使用 |
|
0X24 |
80 00 80 00 |
4B |
NTFS 未使用 |
|
0x28 |
FF 5F EF 07 00 00 00 00 |
8B |
扇区总数 |
|
0x30 |
00 00 0C 00 00 00 00 00 |
8B |
$MFT文件起始簇号 |
|
0x38 |
02 00 00 00 00 00 00 00 |
8B |
$MFTMirr文件起始簇号 |
|
0x40 |
F6 |
1B |
文件记录大小描述,该字节待用符号,当其为负数时,说明每个文件记录的大小要小于每个簇的扇区数,计算方法为2-1X每个文件记录的簇树。 |
|
0x41 |
00 00 00 |
3B |
未用 |
|
0X44 |
01 |
1B |
索引缓冲区的大小描述,该字节与文件记录大小描述以及其计算方法相同。 |
|
0X45 |
00 00 00 |
3B |
未用 |
|
0X48 |
BE 6B 50 4C B1 50 4C 78 |
8B |
卷序列号 |
|
0X50 |
00 00 00 00 |
4B |
校验和 |
表2 DBR扇区中BPB字段分析表
表2中提到簇的概念,所谓的簇是指文件系统划分的以若干个扇区为单位,一个簇至少包含1个扇区。在对文件分配空间或者文件预读取等,文件系统可以以簇为单位,来减少磁盘碎片和减少磁盘操作次数等。在BPB中,我们可以获取分区许多信息,比如磁盘大小、簇大小、$MFT文件起始位置、索引缓冲区大小等等,而这些信息也是我们以后分析$MFT文件记录和读取文件等操作所必须的信息。
本文详细分析了Windows系统下NTFS文件系统的MBR(主引导扇区)和DBR(分区引导扇区)。MBR包含引导程序、磁盘签名和分区信息,最多存储4个主分区信息。DBR则包含分区引导程序、OEM代号、BPB(BIOS参数块)等,其中BPB提供了关于分区的重要信息,如簇大小、$MFT起始位置等。

2546

被折叠的 条评论
为什么被折叠?



