混合 MBR/GPT 上的 Windows

混合 MBR/GPT 上的 Windows

我以为我终于把 Windows 放进了虚拟机里,但是,我遇到了一些我想玩的游戏,但就是不能在这种设置下玩。自从 Windows 上次占用了我磁盘上的指定块以来,我已经对不同的操作系统和 Linux 发行版进行了大量调整,结果发现,虽然我有可用空间,但我的分区数量已达到MBR 分区表。因此,我相信它在 21 世纪应该可以正常工作,而且在对谷歌进行了粗略检查并表明它应该可以工作后,我转而使用GUID 分区表 (GPT)并尝试安装 Windows 7。结果发现,Windows 7 只适用于 EFI 系统上的 GPT,而我的系统使用的是 BIOS。我应该有我在之前的研究中就注意到了这一点,但那太简单了。

因此,我只能选择转换回 MBR,并尝试调整我的分区布局,以便我可以为 Windows 制作一个,或者使用混合型MBR后者听起来更有吸引力。不幸的是,互联网上有很多关于混合 MBR 的可怕警告,所以我有几个问题。

由于我的引导程序实际上是在 GPT 上,但它会看到 MBR,Windows 是否会对我的引导程序做一些不好的事情?这是否比从 LiveCD 启动并运行需要更多的修复grub-install?除了确保我从不接触 Windows 上的分区工具外,还有什么需要避免的吗?我的电脑会爆炸吗?如果我切换回 MBR,是否会省去很多麻烦?(我知道 Mac 使用混合 MBR 和 Boot Camp,所以希望这不会像我所说的那么困难。)

答案1

没有必要回归到 MBR 分区方案,甚至也不需要“混合 MBR”分区方案。(我的一台机器上就有这种方案,我敢肯定,这种方案不适合胆小的人。)

Windows 7 可以很好地使用 EFI 分区的磁盘。但它无法在非 EFI 机器上从这些磁盘启动,并且(为了保护你自己,微软的做法)一开始就拒绝安装。就你的情况而言,你的问题是固件的根本缺陷,并不是真正的视窗问题。您的固件不了解 EFI 分区表。

如果想要将操作系统引导程序转换为 EFI 分区磁盘,则必须具备这样的理解。固件需要知道调出 EFI Boot Manager 菜单,然后从 EFI 系统分区加载选定的操作系统加载程序你的但是固件并不是很智能,除了加载“主引导记录”和运行其引导代码之外,它不知道如何做更多的事情。在 EFI 分区磁盘上,“主引导记录”中没有代码来执行其余的 EFI 引导过程。

目前,您拥有的 MBR 引导代码与固件一样不了解 EFI 分区表方案,并且期望找到并处理 MBR 分区表。您需要两件事:

  • 拥有知道如何读取 EFI 分区表的 MBR 引导代码,并找到同样支持 EFI 分区表的第二阶段引导加载程序,这将使您能够依次加载和运行操作系统引导加载程序
  • 说服 Windows 7安装在 EFI 分区磁盘上

第一种情况并非不可能。这种支持 EFI 分区的 MBR 引导程序有两种来源:

  • 我写过并出版过一篇(事实上​​,在这个答案第一次被写下之后)。
  • SYSLINUX 中的所谓“GPT”MBR bootstrap 是另一种,由 H. Peter Anvin 编写。

双方都将寻找“活动”分区,加载并运行其 VBR,以旧的 PC/AT 和 PC98 方式有效地引导但使用 EFI 分区表。如果上述两种方法都行不通,那么目前最好的替代方案是:

  • GRUB 2:不幸的是,这仍然依赖于将硬连线数字插入其 MBR 引导代码中,以告诉它在哪里找到其加载器的下一部分。但第二阶段,一旦加载并运行,完全能够理解 EFI 分区表并从分区内引导操作系统引导加载程序。但它不知道如何运行 EFI 操作系统引导加载程序,它只知道如何应对 VBR 或 Linux 和 BSD。
  • UEFI 二重奏:罗德·史密斯(Rod Smith)详细讨论了这一点。) 同样不幸的是,尽管这会安装在卷中并启动功能齐全的 EFI Boot Manager 和 EFI Shell,但它仍然需要其他东西来加载和运行其 VBR。而现在,其他东西必须是 GRUB2 之类的东西,它本身依赖于 MBR 代码中的硬连线扇区号,或 SYSLINUX,或者实际上是我的 EFI 分区感知 MBR 引导程序。但您将能够运行正确的 EFI 操作系统引导加载程序。

第二种方法(说服 Windows 7 安装在 EFI 分区磁盘上)至少对于 x86-64 版本的 Windows 7 是可以实现的。这种方法很复杂,Microsoft 并未正式支持,并且需要制作您自己的 Windows 安装磁盘,其中包含 Microsoft 启动管理器的 EFI 版本,并以某种方式在 EFI 启动环境中运行它。(如果您安装了 UEFI DUET,这当然相当容易。)但它会让 Windows 7 相信其安装程序是在 EFI 系统上引导的,安装程序将使用此标准来确定是否允许将 Windows 安装在 EFI 分区硬盘上。

当然,安装 Windows 7 后,每天启动 Windows 7 还会带来额外的复杂性;因为安装程序知道您有 EFI 固件,因此会安装 Microsoft 启动管理器的 EFI 版本。因此,您需要:

  • 安装 PC/AT 版本的 Microsoft Boot Manager,并让 GRUB2 知道它在哪里(如果您正在使用 GRUB2);或者
  • 始终启动 UEFI DUET 并从那里运行 EFI 版本的 Microsoft Boot Manager。

相当多全部如果有人首先拥有 EFI 固件,那么这些废话就会消失。 Windows 7 (x86-64) 将顺利安装,以及一个 EFI 启动管理器,它可以理解 EFI 分区表,并直接从 EFI 系统分区中的普通程序映像文件加载和运行 Microsoft 的启动管理器(以及任何其他可 EFI 启动的操作系统),并随固件一起提供。

答案2

这个问题有几种可能的解决方案。总结一下,我的偏好顺序大致如下:

  • 升级主板-- 如果您购买了具有 UEFI 启动功能的主板,那么您就准备好了,因为您可以在 UEFI 模式下安装 Windows。大多数(可能是所有)基于英特尔 Sandy Bridge 的主板都支持 UEFI,尽管有些主板没有宣传这一点。许多新的 AMD 主板也支持 UEFI。事实上,您可能已经拥有了这样的主板。过去几年销售的许多英特尔品牌主板在其 CMOS 设置屏幕中都隐藏了 UEFI 启动选项。您可以尝试搜索这样的选项。不过,您可能需要对所有操作系统使用 UEFI 模式。幸运的是,Linux 转换起来相当容易,一旦设置为以任何一种方式启动,就可以来回切换而无需重新配置。请注意,您需要 64 位版本的 Vista 或 7 才能在 UEFI 模式下安装 Windows。
  • 使用第二块硬盘-- 您可以将 Windows 安装到 MBR 磁盘,并将 Linux 保留在 GPT 磁盘上。如果您愿意,您甚至可以将 Windows 数据分区放在 GPT 磁盘上(前提是您使用的是 Vista 或 7);只有 Windows 启动盘必须位于 MBR 上。即使您有一些旧的 20 GB 驱动器,它也足以容纳 Windows C: 分区,然后您可以将 Windows 程序文件放在 GPT 分区上,前提是您使用的是 Vista 或 7。
  • 转换为 MBR-- 您可以使用以下方式执行此操作GPT fdisk (gdisk),但有一些注意事项。最值得注意的是,您必须在要创建的每个逻辑分区前面至少有一个空闲扇区,并且所有逻辑分区都必须连续。如果您当前的磁盘不满足这些规范,您将在转换过程中丢失分区,或者您需要调整某些分区的大小以创建必要的间隙。还存在一些数据丢失的风险,特别是如果您必须调整分区大小。
  • 使用 UEFI DUET-- 正如 JdeBP 所建议的(并链接到我关于这个主题的页面), UEFI DUET 是一种可能性。恕我直言,这种方法的缺点并不像 JdeBP 所说的那么大,如果UEFI DUET 甚至可以在您的系统上启动。(如果您使用的是 64 位 Intel CPU,那么成功率很高,如果是 64 位 AMD CPU,成功率就低一些,如果是 32 位 CPU,则根本无法运行。)不过,您必须小心谨慎,并且具备良好的技术故障排除能力才能尝试此操作。您可以使用 USB 闪存驱动器进行一些初步探索;将 UEFI DUET 安装到其中,看看是否可以启动它。如果它可以启动,您可能能够让 Windows 安装和启动,甚至可以定期进行,尽管存在一些陷阱,如我在有关此主题的页面上所述。设置完成后,UEFI DUET 本质上就变成了 Windows 的一个相当大的 GPT 引导加载程序。
  • 使用虚拟化-- 虽然这不完全符合您的要求,但可以想象 Windows 在虚拟机中可以正常工作。不过,对于游戏而言,我有点怀疑您是否能获得所需的性能,但也许值得一试。
  • 混合型MBR-- 您可以设置它并将 Windows 安装到混合分区。Windows 将清除您当前的 MBR 驻留引导加载程序,因此请做好重新安装它的准备。就我个人而言,我不推荐这种解决方案,因为混合 MBR 很危险。但是,如果所有其他选项都失败了,那么这可能是放弃 Windows 的借口。

我还想澄清几个误解:

  • Windows 无法在基于 BIOS 的计算机上从 GPT 启动,这绝对是 Windows 的限制,而不是固件 (BIOS) 的限制。Linux、FreeBSD 和一些其他操作系统可以从基于 BIOS 的计算机上的 GPT 磁盘正常启动。我不知道为什么微软不想支持在基于 BIOS 的计算机上从 GPT 启动 Windows,但如果他们愿意,他们当然可以这样做。如果没有其他选择,他们可以采用 UEFI 实现,将其剥离到基本部分,并将其用作引导加载程序。
  • SYSLINUX 的 GPT 加载程序不使用硬编码的扇区值;它有足够的智能来读取 GPT 并跳转到设置了 Legacy BIOS Bootable 标志的分区。并不是说硬编码扇区值有什么问题,就像 GRUB 2 所做的那样;这两种解决方案只是各有优缺点。

答案3

如果你甚至有一个小的MBR 驱动器,您无需任何破解即可完成此操作。即使使用Windows 32 位。软盘或 USB 记忆棒即可。

启动 Windows 安装/修复光盘。在记忆棒上创建系统驱动器,并使用bcdboot将启动文件放在记忆棒上。使用 添加引导扇区bootsect。将 更改为{bootmgr} deviceboot从记忆棒启动。

步骤很详细这里

相关内容