今天我安装了 Windows 8.1,但它破坏了我的 GRUB。我尝试在 Ubuntu 的实时会话上运行启动修复 GUI,但重启 PC 后,GRUB 仅显示 Ubuntu。
安装之前,我在第一个 HD 上同时安装了 Ubuntu 和 Windows 7,并且 grub 可以毫无问题地显示它们。
在第二个 HD 上安装 Windows 8.1 后,引导加载程序(?)被 Windows 替换,我只能在 Windows 7 和 8 之间选择启动,但不能选择 Ubuntu。
我现在该如何修复 GRUB?我希望 GRUB 可以显示所有三个操作系统(即使是不同的硬盘)。如果不可能,我希望我可以选择要启动哪个硬盘,然后 grub 可以正确显示该硬盘的操作系统。
这是启动修复的输出(链接失效)。
答案1
我很高兴你解决了这个问题。为了将来参考,你可以使用 GRUB(或任何其他 EFI 启动管理器)在两个版本的 Windows 之间切换。不过,我知道这样做需要在安装第二个 Windows 之前进行规划:
- 正常安装第一个Windows。
- 启动 Linux 紧急磁盘(“安装前尝试”模式下的 Ubuntu 安装程序应该可以正常工作)。
- 更改类型代码EFI 系统分区 (ESP)更改为 Windows 会忽略的内容。
gdisk
在这方面最为灵活,因为您可以将类型代码设置为任何您喜欢的代码,例如 8300(Linux 使用的代码)。 您也可以选择更改 Windows 分区的类型代码,以使其不出现在第二个安装的引导加载程序中。 如果您使用gdisk
,请务必使用 保存您的更改w
。 - 安装第二个 Windows。安装应在磁盘上创建第二个 ESP,并且您的计算机应启动到此版本的 Windows。(如果您没有通过更改其类型代码来隐藏第一个 Windows,它可能会作为 Windows 引导加载程序中的一个选项显示。)
- 再次以“安装前尝试”模式启动 Ubuntu 安装程序。
- 将第一个 ESP 上的类型代码改回正确的值(中的 EF00 )。如果您更改了第一个 Windows 分区的类型代码,请同时
gdisk
将其改回(中的 0700 )。gdisk
- 运行 Ubuntu 安装程序并安装 Ubuntu。
当该过程完成后,您应该让 GRUB 控制启动并为您提供两个 Windows 安装或 Ubuntu 的选项。但我不确定它是否会告诉您两个 Windows 安装的名称/版本;它可能只会为每个 Windows 安装显示“Windows”。
此过程的许多变体也应该可行,例如在安装 Ubuntu 后安装第二个 Windows(这将需要将 GRUB 重置为默认引导程序)。在安装两个 Windows 副本后,可能可以通过调整 ESP 和 Windows 分区的类型代码并使用每个 Windows 版本的安装/修复磁盘来执行类似操作,使其在目标 ESP 上重新安装 Windows 引导加载程序。
在任何一种情况下,关键在于您将拥有(至少)两个 ESP,每个版本的 Windows 一个。(Ubuntu 并不关心它使用哪个 ESP。)但是,双 ESP 设置在将来可能会造成混乱。例如,如果 Windows 7 安装程序看到两个 ESP,它就会感到困惑,因此重新安装将失败。(我不知道 Windows 8 或 10 是否有同样的问题。)当然,您更改了一次 ESP 类型代码,因此如果您需要重新安装 Windows,您可以再次更改。
答案2
我sudo update-grub
这样做了,问题解决了。