引用 硬盘(U盘、移动硬盘)MBR、DBR简介

 一、几个概念

BIOS(Basic Input/Output System)

基本输入输出系统,全称是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电脑提供最低级最直接的硬件控制的程序。

CMOS(Complementary Metal Oxide Semiconductor)
本意是指互补金属氧化物半导体,一种大规模应用于集成电路芯片制造的原料,在计算机领域,CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片。

CMOS 的功耗很低,计算机主板上一个纽扣电池就可以给它长时间地提供电力,即使系统掉电,信息也不会丢失。而当主板电池供电不足时CMOS的信息会丢失,此时启动机器会有一些特殊的现象,如启动时提示 CMOS 参数丢失需重新设置,甚至机器黑屏,不能启动,更换主板上的纽扣电池即恢复正常

有时人们会把CMOS和BIOS混称,其实CMOS是主板上的一块可读写的RAM芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定。而对CMOS中各项参数的设定要通过专门的程序,现在多数厂家将CMOS设置程序做到了BIOS芯片中,在开机时通过按下某个特定键就可进入CMOS设置程序而非常方便地对系统进行设置,因此这种CMOS设置又通常被叫做BIOS设置。

ESCD(Extended System Configuration Data)
扩展系统配置数据,ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中,通常ESCD数据只在系统硬件配置发生改变后才会更新

扇区(Sector)
硬盘划分的最小单位,一个扇区固定为 512 个字节(Byte)

MBR(master boot record)
即主引导记录,有时也称主引导扇区。位于整个硬盘的 0 扇区(硬盘的 0~62 即前 63 个扇区为保留扇区,目前只有 MBR 占用其中的第一个或前几个扇区),可以看作是硬盘的第一个扇区,通常只占用这一个扇区,如 XP 的 MBR,grub4dos占用 0~17 共 18 个扇区

DBR(DOS boot record)
即操作系统引导记录区,也称分区的主启动代码,位于分区的第 0 扇区,通常只占用这一个扇区,特殊情况也要占用其它保留扇区,而 grub4dos 如果是写入硬盘 MBR 方式则不修改也不使用 DBR

以 H 结尾或以 0x 开头的数字表示该数字为十六进制数


二、主机启动过程
1. 内部电源打开,初始化,等待一小段时间用来产生稳定的电流。如果主板芯片和 CPU 收到了不符合规定的电流,将自动产生一个RESET信号。在主板没有收到电源的 Power Good 信号之前,重复步骤1

2. 执行 BIOS 中 0FFF0h 处的代码。这里只有一条 JMP 指令,将跳转到真正的 BIOS 启动程序处

3. BIOS 开始加电自检(Power-On Self Test, POST),如果出现错误,启动停止

4. BIOS 开始寻找显卡,找到的话将执行显卡的 BIOS,接着显卡初始化,将显示一段显卡信息,我们开机看到的第一屏就是它

5. BIOS 开始执行所有其他设备的 BIOS,包括软驱,硬盘、光驱等

6. BIOS 显示启动信息

7. BIOS 开始额外的检测。一般有内存检测,如果内存有问题,将显示错误消息

8. BIOS 探测所有的硬件,将显示如硬盘、光驱信息等

9. BIOS 给出一个已知硬件的列表

10. BIOS 更新 ESCD

10. BIOS 按照设置的驱动器顺序找驱动器,如果驱动器存在的话继续找 MBR,如果找不到驱动器,系统显示错误信息并停止

11. MBR 从分区表中找到第一个活动分区(分区描述中第一个字节为 80H),然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责引导系统(如 XP)

步骤11中若为 grub4dos MBR则依次查找各个分区的根目录是否有 grub4dos 的启动文件(通常为 grldr,写入 MBR 时可以指定此文件名),也就是说若是 grub4dos MBR 可以不设置活动分区

上面是打开电源开关(或按Reset键)进行冷启动时的过程,在DOS下按Ctrl+Alt+Del组合键(或从Windows中选择重新启动计算机)来进行热启动时将从步骤8开始


三、硬盘(U盘、移动硬盘)MBR简介
这里用到一个强大的磁盘查看编辑工具 WinHex,可以手动保存和恢复 MBR、DBR

运行 WinHex,选择工具->打开磁盘,如图
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

其中 HD0 为本机硬盘,RM1 为 U 盘,选择 HD0,确定
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

上方为硬盘的分区情况,下方为硬盘的内容,打开是默认位置在 0 扇区,即上方的“起始扇区”,点击上方的分区即可切换到各分区的起始扇区

完整的 0 扇区(XP 的 MBR)如下
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

其中 0x0000~0x01FF 即为硬盘的 0 扇区,这个扇区的内容分为 3 部分

第 1 部分(0x0000~0x01BD)446 个字节为完整的 XP MBR,选中这部分内容保存到文件即可作为 MBR 的备份,将此备份内容写入硬盘的 0x0000~0x01BD 位置即可恢复 XP MBR,其中左边可读的部分即为 MBR 找不到活动分区时的错误信息,使用 Paragon Partition Manager、PTDD 磁盘分区表医生等工具均可将硬盘的 MBR 恢复为(写入) XP MBR

第 2 部分(0x01BE~0x01FD)64 个字节为硬盘的分区表(Disk Partition Table, DPT),每 16 个字节描述一个主分区,所以一个硬盘最多可以有 4 个主分区
分区表的每一分区的第 1 个字节是活动标志,其值为80H时,表示该分区是当前活动分区,可引导,其值为00H时,表示该分区不可引导

第 3 部分(0x01FE~0x01FF)2 个字节“55 AA”是分区有效结束标志

下图为 grub4dos MBR 的第一个扇区
其他扇区内容请参考附件
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

其中 0x0003 处一个字节为启动时等待按键的延时,图中为 0x06 就是 6 秒


四、硬盘(U盘、移动硬盘)DBR简介
没有深入研究 DBR 到底占用几个扇区,对于 ntldr 的 DBR,用 WinHex 查看时可以看到 ntfs 分区的前 7 个扇区有内容,fat32 前 3 个扇区有内容,不同的分区软件可能会有不同,有兴趣者可以试试先将有内容的前几个扇区保存为文件,然后清除第 1 个扇区(分区的 0 扇区)之外的其他扇区的内容(用 0 填充,可以用 U 盘或者光盘启动 PE 再用 WinHex 恢复),若能正常启动表示只用第 1 个扇区即可,否则后面的内容也是有效内容

NTBOOT.EXE(#1附件中有) 可以修复 ntldr 的 DBR
Bootsect.exe(好像 vista 安装盘中有,没有使用过) 可以修复 bootmgr 和 ntldr 的 DBR,微软官方说法:Bootsect.exe 更新硬盘分区的主启动代码以在 BOOTMGR 和 NTLDR 之间切换。可以使用此工具还原计算机上的启动扇区。此工具会替换 FixFAT 和 FixNTFS
这两个工具都是只能修改 DBR,而不能修改 MBR

下面是 ntfs 分区中 ntldr DBR 的第一个扇区(用 XP 做的分区)
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

其中左边可读的部分即为 DBR 在分区根目录找不到 ntldr 文件时的错误信息,最后两个字节“55 AA”是分区有效结束标志

下面是 fat32 分区中 ntldr DBR 的第一个扇区(用Paragon Partition Manager做的分区)
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂


五、使用 WinHex 保存或写入磁盘

写入操作具有一定危险性,请慎用

保存磁盘的前 63 (0~62)个扇区的内容到文件
1. 计算 62 扇区的结束位置为 63*512 - 1=32555=0x7DFF

2. 在十六进制代码区右键选择编辑->定义选区,输入开始 0,结束 7DFF,确定
如果只保存当前扇区,右键选择编辑->复制扇区->至新文件即可
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

3. 右键选择编辑->复制选块->至新文件,若复制到剪贴板则右键选择编辑->复制选块->正常


将硬盘中的 XP MBR 复制到 U 盘

1. 选中硬盘 0 扇区的 0x0000~0x01BD,右键选择编辑->复制选块->正常
    注意不可以选中整个扇区,否则会覆盖 U 盘(目标盘)的分区表

2. 将光标移至 U 盘的 0x0000 处,如下图
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

3. 右键选择编辑->剪贴板数据->写入,此时会提示写入的偏移地址,注意检查偏移地址是否正确
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

4. 还有可能会提示选择剪贴板格式,选择 ASCII Hex,如果用这种格式写入不正确,试试选择别的格式
硬盘(U盘、移动硬盘)MBR、DBR简介 - 教父 - 梦幻天堂

5. 如果写入正确,选择保存,否则选择撤销(Ctrl+Z)