通过 efibootmgr 设置的 EFI 设置在重新启动后将被忽略

Mis*_*saz 8 boot debian grub uefi syslinux

我在 UEFI 笔记本电脑上有 2 个磁盘(/dev/sda 和 /dev/sdb)。都是 GPT。

sda1 - NTFS  - Windows,
sda2 - FAT32 - EFI partition where is Windows Boot Manager and GRUB

sdb1 - NTFS  - another windows 
sdb2 - NTFS  - My data
sdb3 - FAT32 - EFI partition
sdb4 - EXT4  - Debian
Run Code Online (Sandbox Code Playgroud)

在 EFI 顺序中,我可以看到 Windows 启动管理器和 GRUB。我可以在那时进行更改,这样就可以工作了。我考虑使用 syslinux 引导到 debian。我想在 sdb3 上安装 syslinux,我安装了它并将这些文件复制到该分区的以下位置:

/EFI/SYSLINUX/initrd.img
/EFI/SYSLINUX/ldlinux.e64
/EFI/SYSLINUX/syslinux.cfg
/EFI/SYSLINUX/syslinux.efi
/EFI/SYSLINUX/vmlinuz
Run Code Online (Sandbox Code Playgroud)

vmlinuzinitrd我从 sdb4\boot 复制并重命名。syslinux.efildlinux.e64我从http://kernel.org下载的 syslinux-6.03.tar.gz 复制而来。我写的syslinux.cfg内容是

PROMPT 0
TIMEOUT 300
DEFAULT deb

LABEL deb
    LINUX vmlinuz
    APPEND ROOT=/dev/sdb4
    INITRD initrd.img
Run Code Online (Sandbox Code Playgroud)

然后我通过命令将记录添加到EFI

efibootmgr -c -d /dev/sdb3 -p 1 -l \\EFI\\SYSLINUX\\syslinux.efi -L "SYSLINUX2"
Run Code Online (Sandbox Code Playgroud)

efiboot 管理器响应成功并显示 SYSLINUX2 作为启动选项,但是当我重新启动计算机(通过重新启动命令)并进入 UEFI 设置时,没有添加 SYSLINUX2 选项。只有 GRUB 和 Windows 启动管理器。下次启动到 debian 后,efibootmgr 也仅响应 Windows 启动管理器和 GRUB。

我读到有些人在安全启动方面遇到了问题。我已经禁用了它,GRUB 对此没有问题。

怎么了?如何使 efibootmgr 设置持久?我哪里出错了(如果有的话)?

Rod*_*ith 5

您看到了一个错误,而且几乎可以肯定它与安全启动无关。我有几个建议,但都不能保证解决问题:

  • 更新固件——如果错误存在于固件中,则更新可能会解决问题。请咨询计算机(或主板)制造商以查找更新。(它们可能被称为“BIOS 更新”,尽管从技术上讲,您的固件不是 BIOS。)更新后,重新启动到 Linux 并重试。
  • 将固件重置为其默认设置- 有时 EFI 启动管理器列表会损坏,从而导致您所描述的症状。在设置实用程序中将所有固件设置重置为默认值可能会解决此问题。不幸的是,此步骤将删除所有工作启动管理器条目,因此您可能需要使用紧急工具(例如USB 驱动器或 CD-R 上的rEFInd 启动管理器)进行启动,直到重新创建工作条目。
  • 删除未使用的启动管理器条目- 删除未使用的启动管理器条目(使用选项-Befibootmgr也可以解决损坏的条目。单独尝试efibootmgrefibootmgr -v获得更详细的输出,以查找重复或不需要的条目。(请注意,当您重新启动时,固件可能会自动重新创建一些固件。例如,网络启动选项或启动外部媒体的选项可能会发生这种情况。)
  • 使用其他工具创建启动项——有时efibootmgr不起作用,但另一个操作系统中的工具(例如bcdeditWindows中的EasyUEFIbcfg )或EFI shell 中的工具可以完成工作。因此,您可以尝试这些工具而不是efibootmgr.
  • 使用后备文件名EFI/BOOT/bootx64.efi——如果其他方法不起作用,可以使用后备文件名(在 x86-64 系统上);但是,该文件名通常是计算机尝试启动的最后一个文件名。因此,如果它已经通过其他名称启动(例如 Windows 启动加载程序)EFI/Microsoft/Boot/bootmgfw.efi,您可能需要备份该名称,将所需的启动管理器/加载程序重命名为当前启动的默认值,然后重新配置新的启动加载程序以提供启动它伪装成使用新名称的那个。这充其量只是一种杂耍行为,并非所有 Linux 的 EFI 引导加载程序都可以链接加载到另一个 EFI 程序,因此它可能无法正常工作。(我不记得 SYSLINUX 是否可以链接加载另一个 EFI 程序。)
  • 切换到 BIOS/CSM/legacy 引导——大多数 EFI 提供兼容性支持模块 (CSM),使它们能够引导 BIOS 模式引导加载程序。因此,您可以为 Linux 安装 BIOS 模式引导加载程序,激活 CSM,并以这种方式引导。但是,如果您要双引导另一个操作系统,则还需要安装BIOS 模式引导加载程序,这可能需要从 GPT 更改为 MBR 分区。总的来说,这种方法可能有点痛苦;但对于某些 EFI(大多数是 2011 年左右的旧 EFI),这可能是最好的方法。
  • 退回计算机以获得退款- 如果所有其他方法均无效,并且计算机在商店退货期限内,您可以将其退回以换取可以正常使用的计算机。事实上,如果可能的话,我建议在使用前两个选项之前使用此方法。如果您这样做,请务必联系制造商,告诉他们您退回计算机的原因。EFI 从第一天起就存在严重的错误,一些制造商修复这些错误的速度很慢,部分原因是他们的客户从不抱怨,所以制造商没有意识到这些错误有多严重。

  • 如果 EasyUEFI 工作而 `efibootmgr` 不工作,请将此作为错误报告给您的发行版。在错误报告中包含您的确切计算机品牌和型号以及确切的内核和“efibootmgr”版本。此类错误只有在开发人员了解后才能得到纠正。 (3认同)
  • 如果 EasyUEFI 有时工作,有时失败,但如果 `efibootmgr` 总是失败,那么这表明 EasyUEFI/Windows 和 `efibootmgr`/Linux 之间存在差异,这*可能*被视为一个错误,因此仍然值得报告。无论哪种方式,都值得将其作为错误报告给计算机制造商,尽管我建议首先更新到最新的固件版本。 (这可能会导致所有引导条目被删除,因此请准备好恢复它们。) (2认同)