将 Windows 10 添加到 GRUB OS 列表

将 Windows 10 添加到 GRUB OS 列表

我最近从学校买了一台电脑。它预装了 Windows 8.1。然后我又安装了另一个 Windows 8.1 副本(这样它就可以使用内置的 Windows Pro 许可证)并将其升级到 Windows 10。然后我在 Windows 8 和 10 旁边安装了 Ubuntu。

请注意,我为 /boot 创建了一个单独的 255MB ext2 分区。

现在,当我启动计算机时,我首先会看到一个 GRUB 提示符(我已经取消隐藏了 grub 提示符,因为我喜欢这样),其中有 Windows 8 和 Ubuntu 选项。但是,没有 Windows 10 选项。如果我选​​择 Ubuntu,计算机将启动到 Ubuntu。但是,如果我选择 Windows 8 选项,我将被发送到 Windows 引导加载程序,然后它会给我启动 Windows 8 或 Windows 10 的选项。(但是,此时,计算机已经加载了内核和所有内容。显然微软误解了引导加载程序,并决定这意味着“在实际显示引导加载程序之前几乎启动整个系统”。典型的微软。)

如何禁用 Windows 引导加载程序并向 GRUB 添加 Windows 10 选项?

编辑:有人回答说要禁用 Windows 引导加载程序。但是,我仍然不知道如何将 Windows 添加到 GRUB OS 列表中。有人能帮忙吗?

编辑2:使用 EasyBCD 从 Windows 引导加载程序中删除 Windows 10 后,似乎在几次重启后,它会不断取消隐藏,Windows 10 会重新出现。但是,我后来从 msconfig 中的操作系统列表中删除了 Windows 10,它似乎一直处于被删除的状态。

然而,我还是没能让 Windows 10 出现在 GRUB 中。就好像 GRUB 根本检测不到它一样。

另外,我会把这个问题放在问题中,以便人们看到它 - 我曾尝试使用boot-repair,但是,它没有任何帮助。

答案1

有时 os-prober 是错误的。

查看 Windows 10 分区的 UUID,例如:

sudo blkid /dev/sda2

然后编辑/etc/grub.d/40_custom,并在文件末尾添加:

menuentry "Windows 10" --class windows --class os {
   insmod ntfs
   search --no-floppy --set=root --fs-uuid $your_uuid_here$
   ntldr /bootmgr
}

不要忘记更改 UUID。

最后更新你的 grub 配置文件:

sudo update-grub

来源

答案2

此解决方案在 grub2 菜单中提供了正确的条目,并直接在 Windows 10 中加载,而无需参考 BIOS。它来自此网页所以我没有功劳。找到一个可行的解决方案真是令人欣慰。

简要编辑/etc/grub.d/40_custom并添加:

menuentry 'Windows 10' {
    search --fs-uuid --no-floppy --set=root CC66-4B02
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

要找到用于识别 EFI 分区的--set=root行(示例中为 CC66-4B02)的 UUID,然后(或任何其他方式)找到 EFI 分区的 UUID。请注意,您需要的不是 Windows 分区,而是 EFI 分区。保存编辑后,运行以生成文件,然后重新启动以进行测试。sudo fdisk -lsudo blkid /dev/sda1sudo update-grub/boot/grub/menu.cfg

答案3

使用:

sudo update-grub
sudo grub-install /dev/[BOOT PARTITION eg. Sda6]

Ubuntu 终端中的命令,也许它可以解决你的问题。

通过此命令,系统将自动检测您的 Windows 安装并将其添加到 GRUB 列表中。

答案4

据我理解,您的问题意味着您在一个或多个硬盘上安装了两个不同的 Windows,并且您不希望 Windows 加载程序妨碍或管理这两个 Windows 安装。我记得在旧版设置上可以直接从 Grub 启动 Windows 内核(我可能错了),但我无法在 UEFI 设置上执行此操作。拥有两个可从 Grub 独立调用的独立 Windows 引导加载程序配置应该非常接近您想要的。

它预装了 Windows 8.1。

我假设这是一台支持 UEFI 的计算机。

  1. 请检查计算机是否确实支持 UEFI(如果不支持,我将删除我的答案),并熟悉 BIOS 和 UEFI 之间的区别(不同的启动模式、efibootmgr、不同的分区表、EFI 系统分区(ESP)、EFI 加载器……)。
  2. 然后检查所有操作系统是否均以 UEFI 模式安装,以及查看您有一个 GPT 分区表。您可以使用 Windowsdism备份并将分区恢复到新的分区表布局,并使用最新 Windows 安装介质中的命令提示符重新安装引导加载程序,有关此内容的更多详细信息,请参阅下一点。
    • 由于有人建议您尝试各种无法解决您的问题的其他工具,因此您必须将这些更改恢复为原始状态,否则这会变得越来越令人困惑。很抱歉。 :(
  3. 你可以使用我的答案如何通过 GRUB 以 UEFI 模式从旧式 MBR 分区启动 Windows 8?
    • 此答案确实在 Grub 将调用它的不同位置安装了一个独立的 Windows 引导加载程序配置bcdboot。为方便起见,我选择了 Windows 根分区。您需要执行此操作每一个Windows 安装,以便每个 Windows 安装都有自己的并且只能自行启动(从其他条目中清除单独的 Windows 启动菜单)。
    • 请记住,您需要为要启动的每个 Windows 安装创建一个单独的条目/etc/grub.d/40_custom,并按照有关 UUID、分区和分区表的说明和解释进行操作。
    • 可能需要禁用所有检测不同操作系统的半智能功能,例如 Grub 中的 OS-prober(GRUB_DISABLE_OS_PROBER) 或对 Windows 的启动问题进行故障排除或启动修复(或手动清理)。

注意:您的要求是能够使用 Grub 管理所有操作系统,但是使用 UEFI,传统的“双启动”一词几乎成了一个误称。UEFI 允许多个引导加载程序在 ESP 上共存,您可以选择启动哪一个(如果它们已在 UEFI 固件中注册,并且制造商固件不会进行超出规格的傲慢行为,例如仅启动 Windows)。可悲的是,只有极少数人会考虑安装多个(独立)版本的 Windows、Linux 或 Ubuntu 的一个版本到一台计算机上(或者一个硬盘驱动器用于多台计算机,并在每台计算机上启动同一操作系统版本的不同安装)。其中大部分已经是可能的,但 Windows 和 Ubuntu(Fedora,…)中的机制显然选择覆盖其命名空间中的内容,错误地假设只能有一个。

(我确实在计算机并根据不同的要求对 UEFI 启动进行了几次调整。)

相关内容