我最近从学校买了一台电脑。它预装了 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 -l
sudo blkid /dev/sda1
sudo 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 的计算机。
- 请检查计算机是否确实支持 UEFI(如果不支持,我将删除我的答案),并熟悉 BIOS 和 UEFI 之间的区别(不同的启动模式、efibootmgr、不同的分区表、EFI 系统分区(ESP)、EFI 加载器……)。
- 然后检查所有操作系统是否均以 UEFI 模式安装,以及查看您有一个 GPT 分区表。您可以使用 Windows
dism
备份并将分区恢复到新的分区表布局,并使用最新 Windows 安装介质中的命令提示符重新安装引导加载程序,有关此内容的更多详细信息,请参阅下一点。- 由于有人建议您尝试各种无法解决您的问题的其他工具,因此您必须将这些更改恢复为原始状态,否则这会变得越来越令人困惑。很抱歉。 :(
- 你可以使用我的答案如何通过 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 将调用它的不同位置安装了一个独立的 Windows 引导加载程序配置
注意:您的要求是能够使用 Grub 管理所有操作系统,但是使用 UEFI,传统的“双启动”一词几乎成了一个误称。UEFI 允许多个引导加载程序在 ESP 上共存,您可以选择启动哪一个(如果它们已在 UEFI 固件中注册,并且制造商固件不会进行超出规格的傲慢行为,例如仅启动 Windows)。可悲的是,只有极少数人会考虑安装多个(独立)版本的 Windows、Linux 或 Ubuntu 的一个版本到一台计算机上(或者一个硬盘驱动器用于多台计算机,并在每台计算机上启动同一操作系统版本的不同安装)。其中大部分已经是可能的,但 Windows 和 Ubuntu(Fedora,…)中的机制显然选择覆盖其命名空间中的内容,错误地假设只能有一个。
(我确实在一计算机并根据不同的要求对 UEFI 启动进行了几次调整。)