在 UEFI 模式下将 Linux 添加到 GRUB 启动菜单以与 Windows 10 双启动

在 UEFI 模式下将 Linux 添加到 GRUB 启动菜单以与 Windows 10 双启动

我有一台 Dell Inspiron 5559。目前它以 UEFI 模式启动,内置 Windows 10。我需要在 Kali Linux 和 Windows 10 之间双重启动。我遵循了网上的许多教程,但它们都是不同的。

谁能告诉我如何双启动 Kali Linux 和 Windows?我已经通过使用 USB 启动来安装 Kali。但我的问题是 GRUB 加载程序已安装,但它没有询问我是否选择 Windows 或 Linux。默认启动 Windows 10 的启动加载程序。

当我尝试在 Windows 中使用简单的 BCD 添加 Linux 时,它显示:

EFI boot loader Detected--- Easy BCD has detected that your machine is currently booting in EFI mode. Due to limitations set by Microsoft, many of easy BCD multi booting features cannot be used in EFi mode and have been disabled.

答案1

有几种可能出现问题的情况。

1.) Kali 安装程序可能安装了传统 BIOS/MBR 样式版本的 GRUB,而不是 UEFI 版本。如果您的固件更喜欢 UEFI 式引导而不是传统 BIOS 式,则此引导加载程序将完全无效,因为一旦固件发现 Windows UEFI 引导加载程序就位,它就根本不会加载旧式主引导记录。

2.) Kali 安装程序可能已安装 UEFI 版本的 GRUB,但没有shim.efi安全启动所需的版本 - 并且系统 UEFI 固件的安全启动实现可能会悄悄绕过任何不具有必要安全启动签名的启动加载程序,如果启用了安全启动。

(如果启用了安全启动,并且遇到安全启动签名丢失或无效的引导加载程序,其他 UEFI 实现将输出可怕的安全错误消息。这至少会使这种情况更容易排除故障。)

3.) Kali 安装程序可能已成功安装了支持安全启动的 UEFI 引导加载程序,但未能将其注册到固件 NVRAM 中。或者固件实现可能只接受标准 Windows 引导加载程序的引导文件名 - 这将被视为固件错误。


识别这些情况的第一步是让系统启动到 Windows 10,运行命令提示符作为管理员,并使用bcdedit /enum firmware命令。这将列出 NVRAM 中注册的引导选项和 BootOrder 设置。如果输出中没有提及 Kali,您现在可以暂时排除问题 #2 - 您肯定至少有问题 #1 或 #3。

如果可能出现问题 2,可以通过禁用安全启动或清除安全启动主密钥 (PK) 变量来解决。通常(但可能并非总是)UEFI BIOS 设置提供了一种执行其中一项或两项操作的方法。

下一步需要从实时 USB 启动 Kali(或其他一些 Linux)并使用它来访问 HDD 上的 Kali 安装。在 HDD 上安装 Linux 分区后,转到该目录<mountpoint>/usr/lib/grub并列出该目录的内容。如果有一个名为 的子目录x86_64-efi,则您安装了 UEFI 版本的 GRUB,并且绝对可以排除问题 #1。

另一方面,如果有一个名为 的子目录i386-pc,则您安装了传统 BIOS/MBR 版本的 GRUB,从而确认问题 #1。修复此问题需要对基于 HDD 的安装进行 chroot,并使用包管理工具分别将grub-pcgrub-pc-bin包替换为grub-efi-amd64[-signed]grub-efi-amd64-bin。 (如果无法禁用安全启动,请获取第一个包的签名版本(如果可用)以及该shim包。)

如果您遇到问题 #3,您可以使用efibootmgrKali Live USB 中的命令来修复它 - 但前提是该 Live USB 是可引导的UEFI原生风格。如果 Live USB 以旧版 BIOS/MBR 样式启动,则旧版兼容性固件代码将隐藏命令所需的接口efibootmgr

在 Windows 端修复问题 #3 的替代工具:

  • 曾经有一个EasyUEFI与 相同的制造商命名的程序EasyBCD。即使该程序的完全免费版本也足够了。不幸的是,现在只有免费的试用版。
  • 似乎有一个BOOTICE由中国开发人员调用的程序显然可以完成这项工作。我还没有测试过。
  • 我认为 Windows 10 的本机bcdedit命令可能能够注册新的 UEFI 引导加载程序,但该过程似乎有点尴尬,我还没有对此进行测试。
  • 您可以mountvol X: /S以管理员身份访问 Windows 中的 EFI 系统分区。完成后,再次使用 隐藏 ESP mountvol X: /D

答案2

您是否正在尝试将 Linux 的 Kali(或任何发行版)安装到具有 Windows 10 的现有硬盘上?

如果没有,并且您的 Linux 位于另一个硬盘上,那么最简单的方法是在启动之前按 F12 来访问 UEFI 启动菜单;这不是 GRUB2 菜单。此时,EFI 引导菜单(不是 BIOS 菜单,也不是 GRUB2 菜单)将允许您选择启动哪个引导分区上的哪个 .efi 文件。您可以通过这种方式进行双启动。

认识到您拥有一台戴尔灵越、一台笔记本电脑,那么您很可能只需要一个驱动器即可完成所有操作。报告显示 Windows 10 启动/重新启动时将修复/删除安装到 Windows 10 启动分区中的任何启动加载程序。 https://ubuntuforums.org/showthread.php?t=2294337

当您按 F2 进入 SETUP 并进入 BOOT 菜单时,您将有一个菜单选项来选择哪些 .efi 引导文件。您的笔记本电脑只有 1 个驱动器,因此只会出现一种选择,这将启动 Windows 10。但是,例如,如果您有一台塔式电脑,可以容纳 4 个硬盘驱动器,每个硬盘驱动器都有自己的启动分区,那么您将有 4 个选择:这个EFI启动菜单。

我相信你需要做什么,因为Windows 10是微软的,它不能很好地共享启动菜单/分区,你需要让主板EFI菜单自动选择与OEM Windows 10启动分区不同的启动分区不同的分区上只有 GRUB2。当事情发生时,Grub2 将先于 Windows 10 引导加载程序,然后让 GRUB2 的菜单提供选择 Windows 10 分区或 Linux 分区进行引导的选择。这样,Windows 10 只能在其自己的分区上看到自己的启动管理器,不受干扰。至少在Windows 7中,修改Windows启动分区更加宽容;我相信随着 Windows 10 和安全启动心态的出现,这一切都结束了。

所以你想在你的Dell oem win10硬盘上创建一个新分区,与windows分区完全分开,并在上面安装GRUB2。例如,这可能是分区 #4。

我不知道是否可以让主板固件/EFI 指向磁盘上的分区 #4(而不是分区 #1)来启动 GRUB2。与 GRUB2 相比,我更喜欢 ELILO,并且一直将引导分区作为磁盘上的分区 #1。但如果可以的话,请配置 GRUB2 以提供用于启动 Windows 10 或 Linux 的 2 个菜单选项。

相关内容