grub-efi 拒绝链式加载 Windows 8.1

grub-efi 拒绝链式加载 Windows 8.1

安装 Windows 8.1 后,我安装了 LMDE(MBR 中带有 grub)。然后,我安装了软件包grub-efi并添加了自定义 Windows 选项:

#!/bin/sh
exec tail -n +3 $0

menuentry "Windows" {
    search --fs-uuid --no-floppy --set=root A89A-7F4C
    chainloader (${root})/EFI/Boot/bkpbootx64.efi
}
menuentry "Windows (backup bootloader)" {
    search --fs-uuid --no-floppy --set=root A89A-7F4C
    chainloader (${root})/EFI/Microsoft/Boot/bkpbootmgfw.efi
}

这些基本上是我以前安装的 Ubuntu 留下的。但是,grub 拒绝加载它们,抱怨签名无效。我现在该怎么办?

答案1

“无效签名”投诉听起来像是安全启动错误。我不确定 Ubuntu 对此有何看法,但某些版本的 GRUB 在安全启动处于活动状态时拒绝链式加载 Windows,这需要禁用安全启动或者使用其他启动管理器(比如大多数 EFI 中内置的启动管理器,橡胶靴,或者rEFInd,代替或补充 GRUB。最简单的解决方案可能是禁用安全启动。如果您想保持安全启动处于活动状态,最简单的解决方案可能是安装 rEFInd;但是,您应该阅读有关安全启动的 rEFInd 文档,因为你需要完成一些额外的工作才能让它发挥作用。


编辑:首先,重新阅读您的描述后,您提到了 MBR 中的 GRUB(这意味着 BIOS 模式 GRUB 安装)和grub-efi包(即 EFI 版本的 GRUB)。您的 Windows GRUB 节显然是针对 EFI 模式 GRUB 的。如果您同时安装了两者,那么可以想象您是在意外启动 BIOS 模式版本的 GRUB,这在启动 EFI 模式 Windows 条目时会失败。如果这是根本原因,您需要找到一种方法来强制启动 EFI 版本的 GRUB。您可以使用计算机的内置启动管理器或固件启动设置来执行此操作;或者您可能需要通过在终端窗口中键入来清除 MBR 中的 GRUB sudo dd if=/dev/zero of=/dev/sda bs=440 count=1非常小心但是,使用此命令时,如果省略或错误输入参数,可能会对硬盘造成严重损坏。bs=count=选项尤其重要。

如果您启动了 EFI 版本的 GRUB 但仍然遇到问题,请尝试以下条目/etc/grub.d/40_custom(并sudo update-grub在进行更改后运行):

menuentry "Windows" {
    insmod part_gpt
    insmod chain
    set root='(hd0,gpt1)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

更改(hd0,gpt1)为您的 EFI 系统分区 (ESP) 的 GRUB 标识符。此外,如果您以前运行过启动修复(如您的示例条目所示),则可能需要更改为bootmgfw.efibkpbootmgfw.efi您现有条目中的 FAT 文件系统代码可能是错误的,或者存在其他错误的细节,这就是为什么我建议使用这个条目(它过去对我有用)作为模型。(这些 GRUB 链式加载器条目是出了名的挑剔。)

如果失败,请尝试使用我的 USB 闪存驱动器或 CD-R 版本rEFInd 启动管理器。如果可以启动 Windows,您可以在硬盘上安装 Debian 版本的 rEFInd。然后它将接管 GRUB,您不再需要 GRUB。rEFInd 比 GRUB 更容易手动维护;GRUB 之所以容易,只是因为它有大量的配置脚本,可以完成大多数安装所需的大部分自定义操作。

相关内容