将 Windows 10 添加到 GRUB 操作系统列表

Hit*_*eek 49 boot grub2 dual-boot

我最近从学校得到了一台电脑。它安装了 Windows 8.1。然后,我安装了另一个 Windows 8.1 副本(因此它将使用内置的 Windows Pro 许可证)并将其升级到 Windows 10。然后我将 Ubuntu 与 Windows 8 和 10 一起安装。

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

现在,当我启动计算机时,我首先看到一个带有 Windows 8 和 Ubuntu 选项的 GRUB 提示(我已经取消隐藏 grub 提示,因为我喜欢那样)。但是,没有 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,但是,它并没有帮助任何人。

nor*_*raj 34

有时 os-prober 是错误的。

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

sudo blkid /dev/sda2
Run Code Online (Sandbox Code Playgroud)

然后编辑/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
}
Run Code Online (Sandbox Code Playgroud)

不要忘记更改 UUID。

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

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

来源

  • 不工作。它说:“错误:找不到命令‘ntldr’”。 (4认同)
  • 值得注意的是,对于windows 10,通常第一个分区不是windows系统分区,(即sdb2是正确的,sdb1不是)这是因为windows 10在安装过程中是如何存储在磁盘上的,系统保留分区或系统修复总是第一)。如果磁盘上的第一个分区已经提供了可引导的内容,则 Grub 通常无法找到第二个分区。找到正确 UUID 的最简单方法是通过 `sudo fdisk -l` 找到最大的分区,并将其与 blkid 的结果匹配。 (2认同)
  • @hlcs 使用“chainloader /EFI/Microsoft/Boot/bootmgfw.efi”而不是“ntldr /bootmgr”。这对我来说效果很好。 (2认同)

小智 29

此解决方案在 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
}
Run Code Online (Sandbox Code Playgroud)

要查找该--set=root行的 UUID (在示例中为CC66-4B02),您可以sudo fdisk -l用来标识 EFI 分区,然后sudo blkid /dev/sda1(或其他)查​​找 EFI 分区的 UUID。请注意,它不是 Windows 分区,而是您需要的 EFI 分区。保存编辑后,运行sudo update-grub以生成/boot/grub/menu.cfg文件,然后重新启动以进行测试。


小智 28

用:

sudo update-grub
sudo grub-install /dev/[BOOT PARTITION eg. Sda6]
Run Code Online (Sandbox Code Playgroud)

Ubuntu 终端中的命令,可能会解决您的问题。

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

  • `sudo update-grub` 做到了。 (8认同)
  • 不幸的是,这不起作用。它似乎没有检测到 Windows 10 分区。 (6认同)
  • 执行这两个命令(显然)并没有解决问题。 (2认同)

Ron*_*oid 12

使用此应用程序 EasyBCD for windows http://neosmart.net/EasyBCD/下载免费版本并安装。

当您打开它时,您将看到一个适用于 Windows 8 的条目和一个适用于 Windows 10 的条目。

删除 Windows 8 条目,您就可以开始了。

执行上述步骤后更新回到Ubuntu,

ctrl+ alt+打开终端T

然后将这个命令一个接一个地复制过去,

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
Run Code Online (Sandbox Code Playgroud)

通过这个,您将安装一个名为 boot-repair 的工具。

从dash打开引导修复,你会看到这个窗口

在此处输入图片说明

选择推荐的修复并按照步骤操作。

请注意,使用引导修复时必须连接到 Internet。

  • 另外,我注意到您说从破折号中打开引导修复,但是“sudo apt-get install -y boot-repair && boot-repair”行已经打开了它。 (2认同)

Liv*_*eBT 5

据我了解您的问题,您在一个或多个硬盘驱动器上安装了两个不同的 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 中的答案
    • 此答案确实bcdboot在 Grub 将调用它的不同位置安装了一个独立的 Windows 引导加载程序配置。为方便起见,我选择了 Windows 根分区。您将需要为每个Windows 安装执行此操作,以便每个 Windows 安装都有自己的并且只能引导自己(清除其他条目中的单个 Windows 引导菜单)。
    • 请记住,您需要为要启动的每个 Windows 安装创建一个单独的条目,/etc/grub.d/40_custom并按照有关 UUID、分区和分区表的说明和说明进行操作。
    • 可能会禁用检测不同操作系统的每个半智能功能,例如 Grub ( GRUB_DISABLE_OS_PROBER) 中的OS-prober或对 Windows 的引导问题进行故障排除或引导修复(或在它们之后手动清理)。

注意:您的要求是能够使用 Grub 管理所有操作系统,但是对于 UEFI,传统的“双引导”术语几乎变得用词不当。UEFI 允许多个引导加载程序在 ESP 上共存,您可以选择引导哪个引导程序(如果它们已在 UEFI 固件中注册,并且制造商固件不会像只引导 Windows 那样出于规范而光顾)。可悲的是,只有极少数人会考虑在一台计算机上安装多个(独立)版本的 Windows、Linux 或一个版本的 Ubuntu(或与多台计算机一起使用并在每台计算机上启动相同操作系统版本的不同安装的硬盘驱动器)。其中大部分已经是可能的,但是 Windows 和 Ubuntu(Fedora,...)中的机制在错误的假设下选择覆盖其命名空间中的内容,即只能存在一个。

(我确实在台计算机上启动了 Windows8/10、Ubuntu、Ubuntu LTS 和 Fedora,并且在不同的要求下对 UEFI 启动做了几次修改。)