MBR 签名和 Windows 启动

标准 MBR 从偏移量 0x1b8 开始的 4 个字节是签名,用来标识一个磁盘。这个标记在大多数操作系统里并没有使用,而且很容易被改写掉。 Windows 使用签名来作为识别磁盘的依据,并结合卷的起始偏移量来判定如何分配盘符,如果某个卷的 (签名, 起始偏移量) 组合和盘符的对应关系已保存在注册表里,就给它分配相应的盘符。

直到 Windows 5.x 系列, MBR 签名并不影响 Windows 基本系统的启动过程。 NTLDR 在 boot.ini 里读取的启动配置,磁盘标识是按照 BIOS 约定来编号的。也有资料表明 MBR 签名可以被用于帮助 Windows 在 BIOS 无法处理的情况下完成启动,但并不是强制的。所以操作系统安装程序、磁盘分区管理软件和启动管理软件把 MBR 签名改写之后, Windows 的启动不受影响。也许正是因为如此,这些软件(包括 Windows 自己的安装程序)改 MBR 的时候并不会小心翼翼保留 MBR 签名的值。

然而在 Windows 6.x 时代,这种做法就行不通了。 Windows 6.x 的启动信息放在 BCD 里,不再使用 BIOS 的磁盘编号和 MBR 分区表编号来寻找启动卷,而是 (签名, 起始偏移量) 组合。这样,如果意外改写了 MBR 签名(或者把启动卷移动了位置),就会造成无法启动。然而不幸的是相当多的操作系统(包括 Windows 5.x 在内)的安装程序以及启动管理软件都会去改写 MBR 签名;幸运的是,修复并不麻烦。可以把 MBR 签名改回来,也可以用 Windows 6.x 的安装盘或者 PE 启动盘去修复。

另外网上还有文章说明可以让 Windows 不检查 MBR 签名确定系统盘,从哪个盘引导的就把哪个盘作为系统盘:

BCDEDIT /set {bootmgr} device boot
BCDEDIT /set {default} device boot
BCDEDIT /set {default} osdevice boot

对于引导盘和系统盘一致的情况应该是好用的。

在不远的将来,使用 UEFI boot 和 GPT 分区表的系统将不存在这个问题,因为在 GPT 分区的磁盘里 MBR 只是起防犯旧式软件误操作的作用。操作系统识别卷的依据是 128 位的 GUID,没必要再用 (签名, 起始偏移量) 这种组合了。而移动卷的位置也不会带来什么问题。

评论

发表新评论

此内容将保密,不会被其他人看见。
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.