MBR主引导记录

主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。

即MBR有两种理解:
1、MBR包含:446字节引导代码区、64字节DPT、2字节结束标志(55AA);
2、MBR包含:446字节引导代码区。

在这里插入图片描述

主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。主引导扇区内的信息可以通过任何一种基于某种操作系统的分区工具软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统(操作系统是创建在高级格式化的硬盘分区之上,是和一定的文件系统相联系的)。

对于硬盘而言,一个扇区可能的字节数为128×2n(n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。

启动代码
主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。

硬盘分区表
DPT (Disk Partition Table) 。硬盘分区表占据主引导扇区的64个字节(偏移01BEH–偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。
在这里插入图片描述
如果某一分区在硬盘分区表的信息如下
80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
则我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导;"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)最后两个字节,是检验主引导记录是否有效的标志。

主引导扇区的读取流程
系统开机或者重启。
BIOS加电自检(Power On Self Test – POST)。BIOS执行内存地址为FFFF:0000H处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
读取主引导记录(MBR)。当BIOS检查到硬件正常并与CMOS中的设置相符后,按照CMOS中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H处。
检查0000:01FEH-0000:01FFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处,然后继续执行。
根据MBR中的引导代码启动引导程序。
事实上,BIOS不仅检查0000:01FEH-0000:01FFH(MBR的结束标志位)是否等于55AAH,往往还对磁盘是否有写保护、主引导扇区中是否存在活动分区等进行检查。如果发现磁盘有写保护,则显示磁盘写保护出错信息;如果发现磁盘中不存在活动分区,则显示类似如下的信息“Remove disk or other media Press any key to restart”。

### MBR主引导记录中Reserved字段的含义与作用 #### 1. MBR结构概述 主引导记录MBR,Master Boot Record)位于硬盘的第一个扇区(通常为512字节),是计算机启动过程中至关重要的部分。它由三个主要部分组成:主引导记录代码、分区表和结束标志[^2]。在具体实现中,MBR的结构还包含了一些保留字段(Reserved Fields),这些字段虽然未被明确指定用途,但在某些场景下具有特定意义。 #### 2. Reserved字段的位置 在标准的512字节MBR扇区中,前446字节用于存储主引导记录代码,接下来的64字节用于定义四个分区项(每个分区项占用16字节),最后两个字节为结束标志(AA55h)。在分区项的16字节中,除了明确分配给分区类型、起始/结束柱面等信息外,还存在一些未使用的字节,这些字节即为保留字段(Reserved Fields)[^3]。 #### 3. Reserved字段的作用 保留字段的主要作用包括以下几点: - **兼容性扩展**:保留字段为未来可能的功能扩展提供了空间。例如,随着技术发展,操作系统或固件可能会利用这些字段存储额外的信息,而不破坏现有MBR结构的兼容性。 - **标识或校验**:某些实现中,保留字段可能被用作标识符或校验码,以确保分区表数据的完整性。例如,通过在保留字段中存储简单的校验值,可以检测到分区表是否被意外修改[^1]。 - **特殊用途标记**:在特定场景下,保留字段可能被操作系统或磁盘管理工具用来标记分区的某些属性。例如,某些备份软件可能会利用保留字段来标记某个分区是否为备份源。 #### 4. 实际应用中的保留字段 尽管保留字段的存在是为了提供灵活性,但在实际应用中,大多数操作系统对这些字段的使用非常谨慎,以避免与其他系统产生冲突。例如,在Windows系统中,保留字段通常保持为空,而Linux系统可能会根据具体需求对其进行有限的利用。 ```python # 示例:读取MBR并解析保留字段 def read_mbr_reserved_fields(disk_path): with open(disk_path, "rb") as disk: mbr = disk.read(512) # 解析分区表 partition_table = mbr[446:510] partitions = [partition_table[i:i+16] for i in range(0, 64, 16)] reserved_fields = [] for partition in partitions: # 提取保留字段(假设为第14和15字节) reserved_field = partition[14:16] reserved_fields.append(reserved_field) return reserved_fields # 调用示例 reserved_fields = read_mbr_reserved_fields("/dev/sda") print("Reserved Fields:", reserved_fields) ``` #### 5. 注意事项 - 保留字段的具体用途依赖于操作系统或磁盘管理工具的实现,因此在修改或使用这些字段时需格外小心,以免导致系统不稳定或数据丢失。 - 某些现代磁盘管理工具可能会忽略保留字段,仅关注明确分配的字段(如分区类型、起始扇区等)[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值