在阅读了大量有关从 Linux 安装 Windows 的安装算法、除了 Windows 之外还安装 Linux 的安装算法后……我有点疑惑。
例如,从 Linux 安装 Windows 时,大多数方法都会从 Windows MBR 的前 446 个字节中创建一个副本(或它们自己的)MBR,然后使用它在将要安装 Windows 的计算机上设置 MBR 的前 446 个字节(或者在出现问题时恢复这 446 个字节)。
现在令我感兴趣的是,有一个名为 ms-sys 的 Linux 程序(在 sourceforge 上,因此是开源的)可用于 win xp、win 7 等。来创建适当的 MBR 备份。
在网上读到一些信息说前 446 个字节是 MSDOS 留下的(可以这么说)之后,我开始疑惑以下问题:
不同 Windows 版本(XP、Windows 7、Windows 8 等)的 MBR(仅前 446 个字节)有什么区别吗?或者 Windows XP 的这 446 字节可以用于 Windows 7(反之亦然)。
答案1
我认为它们可能不同。一些检查确实表明,它们确实不同。
我并不认为它们的行为会有太大差异。这 446 个字节的基本作用是识别磁盘中需要执行的其他代码部分。这些附加代码通常存储在分区内。有些人喜欢使用“引导加载程序”,例如插科打诨或者使用 XFDisk 或 RPM(Ranish 分区管理器)安装的分区,其中 446 字节的作用略有不同,例如提供交互式界面,以便用户可以选择将控制权传递给不同的分区。基本上,这会启用“启动菜单”,以便用户可以轻松选择从不同的操作系统启动,从而启用“多重启动”选项(以便用户可以轻松启动不同的操作系统)。
这项基本工作可能很长时间没有发生太大变化。(但是,关于它如何执行功能的精确细节已经改变。)如果新操作系统有任何有用的更新,那么我会想象这些更新会做一些事情,比如支持更大的磁盘大小。所有最近的 Windows 版本(包括 XP)的启动代码都很有可能支持高达 2TB,这是 MBR 格式的极限。
(我应该指出,这个答案旨在解决依赖“MBR”获取基本分区信息的系统。使用 GPT 的系统也可能有一个 MBR,它需要满足 GPT 标准指定的特定要求。)
更新
我必须得出这样的结论:不同版本的 Windows 在前 446 个字节上确实存在一些差异。到目前为止,我发现的最令人信服的文档是TechNet:Windows Vista 详细信息:Bootsect 命令行选项这表明用户可以指定/nt52 或/nt60 开关来安装不同版本的引导代码。
可能还有更多。看起来MSDN:高级格式(4K)磁盘兼容性更新“是针对 Windows 7 SP1 和 Windows Server 2008 R2 SP1 发布的。此更新包含许多新信息,其中一些仅适用于 Windows 8 和 Windows Server 2012。”我尚未确认前 446 个字节是否也因这些更改而更改,但这种可能性似乎很大,因为进行了更改以允许启动过程具有不同的硬件兼容性。
如果您想了解 446 字节中的更多详细信息,我确实找到了一些有关旧版本的文档。 Win2K 引导扇区细节是一份较旧的文档,比MS KB 140418:Win NT 3.x 的引导扇区。
答案2
不同 Windows 版本安装的 mbr 代码存在(细微)差异。它们都检查分区表以查找哪个是可引导分区,然后将控制权转移到该分区的第一个扇区。因此,不同版本在很大程度上是可以互换的。例如,请参阅以下页面http://thestarman.narod.ru/asm/mbr/VistaMBR.htm#INTRO。这种 mbr 代码对于 Windows 来说并没有什么特别之处,它也可以启动任何其他操作系统。许多 Linux 启动管理器(如 GRUB)安装的 MBR 代码完全不同,甚至可能根本不查看分区表,并且在没有将 GRUB 启动文件存储在 Linux 分区或其自己的特殊启动分区中的系统中毫无用处。
较新的 GPT/UEFI 启动过程是一个完全不同的世界。
答案3
“这两个 MBR 不同吗?”这个问题是不是相当于这个问题“我可以在另一个 Windows 版本上使用一个 Windows 版本的 MBR 吗?”。
不同 Windows 版本的 MBR 之间存在一些差异。我知道的最广泛的在线参考资料是Starman 的网页。
在有关 Win2000/WinXP 的 MBR 的页面据称:
这个 512 字节扇区的前 300 个字节(000h 至 12Bh)是可执行代码......
而在有关 Windows 7/8 的 MBR 的页面我们可以读到:
该 512 字节扇区的前 355 个字节(000h 至 162h)是可执行代码
然后:
但是此代码必须先将其自身复制到内存的另一个区域。这是必要的,因为代码还必须将活动分区的引导扇区加载到刚加载后占用的内存的同一区域!与 Windows 2000/XP MBR 不同,此代码将其所有 512 个字节复制到新位置,从 0000:0600 开始。只有前三个指令与 Windows 2000/XP MBR 相同,因此如果您要比较两者,请务必保持警惕。
由此可见,两者是有差异的。
然而 TheStarman 指出(我自己从来没有尝试过,这就是我简单地报告这一点的原因),对于上述两个 MBR:
笔记:与本系列中介绍的所有其他代码一样,如果满足列出的条件,此 MBR 代码仍可用于启动 x86 PC 上的任何操作系统这里。
进而:
尽管我们正在研究由 Microsoft 操作系统创建的代码,但是此 MBR 也可用于启动基于 x86-CPU (PC) 的计算机上任何操作系统的引导记录的引导过程,只要该操作系统:1) 位于主硬盘上,2) 设置为唯一的活动分区,并且 3) 它在该分区的第一个扇区中有一个引导加载程序。
最后,我应该提到,相同的网页会报告所有 MBR 的完整版本(当然,分区表除外),这可能在任何情况下都有助于恢复丢失/损坏的 MBR。标准分区表可以手动重建,也可以使用 TheStarman 网页提供的工具重建。