主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。
主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。主引导扇区内的信息可以通过任何一种基于某种操作系统的分区工具软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统(操作系统是创建在高级格式化的硬盘分区之上,是和一定的文件系统相联系的)。
对于硬盘而言,一个扇区可能的字节数为128×2n(n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。
地址 | 描述 | 长度 (字节) | |||
---|---|---|---|---|---|
Hex | Oct | Dec | |||
0000 |
0000 |
0 | 代码区 | 440 (最大446) |
|
01B8 |
0670 |
440 | 选用磁盘标志 | 4 | |
01BC |
0674 |
444 | 一般为空值; 0x0000 | 2 | |
01BE |
0676 |
446 | 标准MBR分区表规划 (四个16 byte的主分区表入口) |
64 | |
01FE |
0776 |
510 | 55h | MBR有效标志: 0x55AA |
2 |
01FF |
0777 |
511 | AAh | ||
MBR,总大小:446 + 64 + 2 = | 512 |
启动代码
主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。
硬盘分区表
偏移 | 长度(字节) | 意义 |
---|---|---|
00H | 1 | 分区状态:00-->非活动分区;80-->活动分区; 其它数值没有意义 |
01H | 1 | 分区起始磁头号(HEAD),用到全部8位 |
02H | 2 | 分区起始扇区号(SECTOR),占据02H的位0-5; 该分区的起始磁柱号(CYLINDER),占据 02H的位6-7和03H的全部8位 |
04H | 1 | 文件系统标志位 |
05H | 1 | 分区结束磁头号(HEAD),用到全部8位 |
06H | 2 | 分区结束扇区号(SECTOR),占据06H的位0-5; 该分区的结束磁柱号(CYLINDER),占据 06H的位6-7和07H的全部8位 |
08H | 4 | 分区起始相对扇区号 |
0CH | 4 | 分区总的扇区数 |
/***** DPT1 分区表1:从 0x1be 到 0x1cd ******/
000001BE 80 /* boot indicator */
/* 00: 不可启动分区 */
/* 80: 可启动分区(只可有1个启动分区)*/
000001BF 20 /* 起始 header 号 */
000001C0 21 /* 起始 sector 号 */
000001C1 00 /* 起始 cylinder 号 */
000001C2 07 /* 系统属性 ID 标记 */
00h:未知操作系统
01h:DOS FAT12(16位扇区数)
02h:XENIX
04h:DOS FAT16(16位扇区数)
05h:DOS 扩展分区(DOS 3.3+)
06h:DOS 4.0 (Compaq 3.31), 32位扇区数
07h:HPFS/NTFS
0ah:OS/2
0bh:win95 fat32
0ch:win95 fat32 (LBA)
... ...
000001C3 DF /* 结束 header 号 */
000001C4 13 /* 结束 sector 号 */
000001C5 0C /* 结束 cylinder 号 */
000001C6 00080000 /* 此分区前的扇区总数 */
000001CA 00200300 /* 此分区的扇区总数 */
硬盘分区表占据主引导扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。下面是一个例子:
如果某一分区在硬盘分区表的信息如下
- 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
则我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导[1];"01 01 00"表示分区开始的磁头号为1,开始的扇区号为1,开始的柱面号为0;"0B"表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);"FE BF FC"表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;"3F 00 00 00"表示首扇区的相对扇区号为63(小端序);"7E 86 BB 00"表示总扇区数为12289662(小端序)。
对于大于8.4G的现代硬盘,CHS已经无法表示, BIOS使用LBA模式,对于超出的部分,CHS值通常设为0xFEFFFF,并加以忽略,直接使用Offset 0x08-0x0c的4字节相对值,再进行内部转换。
结束标志字
结束标志字55,AA(偏移1FEH-偏移1FFH)最后两个字节,是检验主引导记录是否有效的标志。
磁盘空间为:disk size = cylinders * 63 * heads * 512