混合 MBR/GPT 上的 Windows

Pat*_*hes 11 windows windows-7 partitioning gpt hybrid-mbr

我以为我终于在虚拟机中将Windows 降级为生活,但是,我遇到了一些我想玩的游戏,但在该设置中无法实现。自从 Windows 上次占用自己指定的磁盘块以来,我已经对不同的操作系统和 Linux 发行版进行了大量翻转,结果发现虽然我有可用空间,但支持的分区数已达到最大值通过MBR 分区表。因此,我相信在 21 世纪它应该是 Just Work®,并且粗略地检查了谷歌表明它应该可以工作,我转换到GUID 分区表 (GPT)并尝试安装 Windows 7。瞧,瞧, Windows 7 仅适用于 EFI 系统上的 GPT,而我的使用 BIOS。一世应该在我早期的研究中注意到这一点,但这太容易了。

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

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

Jde*_*eBP 9

不需要回归到 MBR 分区方案,甚至不需要“混合 MBR”分区方案。(我的其中一台机器上有这样的东西,证明它们不适合胆小的人。)

Windows 7 可以很好地使用 EFI 分区的光盘。它只是不能在非 EFI 机器上从它们引导,并且(为了保护您自己,以 Microsoft 方式)首先拒绝安装在它们上。就您而言,您的问题是固件的根本缺陷,根本不是Windows问题。您的固件不了解 EFI 分区表。

如果您想将自己的操作系统引导程序转换为 EFI 分区的磁盘,那么这种理解是必要的。自己的固件需要知道要打开 EFI Boot Manager 菜单,然后从 EFI System Partition 加载选定的操作系统加载程序。 但是,您的固件不是很智能,除了加载“主引导记录”并运行其引导代码外,不知道如何做更多的事情。在 EFI 分区的磁盘上,“主引导记录”中没有代码来启动 EFI 引导过程的其余部分。

现在充其量,您拥有 MBR 引导程序代码,它与您的固件一样不了解 EFI 分区表方案,并且期望找到并处理 MBR 分区表。你需要的是两件事:

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

第一个并非不可能。这种 EFI 分区感知 MBR 引导程序有两个来源:

  • 我已经写并出版了一个(实际上是在第一次写这个答案之后)。
  • 由 H. Peter Anvin 编写的 SYSLINUX 中所谓的“GPT”MBR boostrap 是另一个。

两者都将查找“活动”分区,并加载并运行其 VBR,以旧的 PC/AT 和 PC98 方式有效引导,但使用 EFI 分区表。如果没有这两个,您现在将获得的最佳选择是:

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

第二个(说服 Windows 7 安装在 EFI 分区磁盘上)是可以实现的,至少具有 Windows 7 的 x86-64 风格。它很复杂,Microsoft 没有正式支持,并且需要制作实际上是您自己的 Windows 安装光盘,上面有 Microsoft 引导管理器的 EFI 版本,并以某种方式从 EFI 引导环境中运行它。(如果您安装了 UEFI DUET,这当然相当容易。)但它使 Windows 7 相信它的安装程序是在 EFI 系统上引导的,安装程序使用该标准来确定是否允许将 Windows 安装在一个 EFI 系统上。 EFI 分区硬盘。

当然,一旦安装,每天引导 Windows 7 还有额外的、最终的、复杂的;因为安装程序知道您有 EFI 固件,将安装 Microsoft 引导管理器的 EFI 版本。因此,您将需要:

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

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

  • 出于兴趣,为什么您将分区布局称为“EFI 分区”而不是 GPT(GUID 分区表)或 GPT 样式?由于您似乎对术语非常挑剔,我很想知道为什么您避免将其称为 GPT 或 GUID 分区。 (2认同)

小智 7

这个问题有几种可能的解决方案。总而言之,或多或少是我的偏好顺序:

  • 升级您的主板——如果您获得了具有 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 所建议的(并链接到我的主题页面),UE​​FI DUET 是可能的。恕我直言,这种方法的缺点没有 JdeBP 建议的那么大,如果UEFI DUET 甚至可以在您的系统上启动。(如果你有一个 64 位的 Intel CPU,赔率是好的,在 64 位的 AMD CPU 上不太好,而且它在 32 位 CPU 上根本无法工作。)你必须小心并有一个好的不过,请注意技术故障排除以尝试此操作。你可以用U盘做一些初步的探索;将 UEFI DUET 安装到它,看看你是否可以让它启动。如果它启动,您可能能够安装和启动 Windows,即使是定期启动,尽管存在缺陷,如我在该主题页面上所述。一旦设置完毕,UEFI DUET 本质上就变成了一个相当大的 Windows 的 GPT 引导加载程序。
  • 使用虚拟化——这不是你所要求的,但可以想象 Windows 可以在虚拟机中正常工作。不过,对于游戏,我有点怀疑您是否会获得所需的性能,但这可能值得一试。
  • 混合 MBR——您可以设置它并将 Windows 安装到混合分区。Windows 将清除您当前驻留在 MBR 的引导加载程序,因此请准备好重新安装它。就个人而言,我不推荐此解决方案,因为混合 MBR 很危险。但是,如果所有其他选项都失败了,则可能是在 Windows 上放弃了。

我还想澄清一些误解:

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

  • 一段时间后我发现了SYSLINUX EFI-aware MBR bootstrap **之后**我找到了T13提案,从头开始写了一个我自己的MBR引导程序来读取EFI分区表,并于2011-06发布给全世界-26; 所有这些反过来都是在我写下上述答案并注意到需要填补的空白之后。我真的应该在这里更新我的答案,以指出我是世界上迄今为止填补空白的两个人之一。☺ (3认同)