我想将我的 Debian 配置为在启用安全启动的情况下启动,但事实并非如此,原因如下...
操作系统特定的引导加载程序存储在ESP
安装在的分区上/boot/efi
Debian 系统有它自己的子目录,debian
以下是该文件夹的内容:
sudo ls /boot/efi/EFI/debian
命令的输出是:
BOOTX64.CSV fbx64.efi grub.cfg grubx64.efi mmx64.efi shimx64.efi
根据我的理解,为了使 Debian 启动时启用安全启动,EFI 应该执行,shimx64.efi
而 EFI 又会执行grubx64.efi
(当前正在执行启动加载程序)
那是对的吗?如果没有请纠正我。
我确实通过发出以下命令调查了为什么我的 Debian 无法使用安全启动:
efibootmgr -v
这是上述命令的输出(请向右滚动)
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001
Boot0001* debian HD(1,GPT,4cc75323-a915-4249-9c01-e553cf705ad4,0x800,0x100000)/File(\EFI\debian\grubx64.efi)..BO
此输出代表启动条目(存储在 中NVRAM
),目前只有一个执行GRUB
名为 的启动管理器grubx64.efi
。
据此,很明显 EFIgrubx64.efi
直接执行而不是执行shimx64.efi
,这一定是安全启动不适用于我的 Debian 系统的原因。
我的问题是,如何编辑此启动项以便执行它shimx64.efi
,以及这是否会使 Debian 在启用安全启动的情况下工作而不会使系统无法启动?
您能否另外告诉我们为什么没有shimx64.efi
设置为NVRAM
而不是grubx64.efi
使安全启动开箱即用。
这很奇怪,因为许多人报告说安全启动可以开箱即用。
有关更多信息,我使用的是 Debian 12,它是全新安装的,没有任何会干扰安全启动的自定义或专有驱动程序。
编辑:
我已发出以下命令来添加新条目:
sudo efibootmgr -c -d /dev/sdb -p 1 -L DebianShim -l \\EFI\\debian\\shimx64.efi
现在会产生两个条目:
sudo efibootmgr -v
输出:
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0000,0001
Boot0000* DebianShim HD(1,GPT,4cc75323-a915-4249-9c01-e553cf705ad4,0x800,0x100000)/File(\EFI\debian\shimx64.efi)
Boot0001* debian HD(1,GPT,4cc75323-a915-4249-9c01-e553cf705ad4,0x800,0x100000)/File(\EFI\debian\grubx64.efi)..BO
当然,我确保通过更改顺序来激活我的新条目:
sudo efibootmgr -b 0001 -o 0000
不管怎样,问题是重新启动后我的新条目没有保留,它消失了。
这是具有相同问题的相关问题:
https://superuser.com/questions/1166398/efi-settings-set-via-efibootmgr-are-ignored-after-reboot
我还尝试删除原始引导条目并添加新条目,但它会恢复到旧条目,即执行的条目grubx64.efi
谷歌的进一步研究表明,这可能是MSI
主板的一个错误,即它们的固件。
但值得注意的是,设置一些其他选项(例如超时)效果也很好。
答案1
问题
如果我没看错的话,听起来好像 EFI 启动管理器没有更新 NVRAM 中的变量。我这样说是因为我有同样的问题,并且“解决它”需要一些时间,我将尝试解释这一点。问题是,如果不直接访问 UEFI 固件,EFI 变量将以只读权限加载
解决方案
正如您所说,我假设您有一个 MSI 品牌主板,上面安装了 LiveUpdate 固件版本(与我拥有的主板品牌相同,但也有错误的 UEFI 固件)。如果没有,请注意无论制造商如何,此过程都将有效,因为它通过 UEFI Shell 访问 NVRAM。无需使用操作系统。
脚步:
- 将 USB 记忆棒(大小至少 8GB)格式化为 FAT32
- 从 Roderick Smith 的 Great EFI Bootloader 下载 ISO 映像/CD-R 映像:获取 rEFInd。我已经链接到下载页面,以防您想研究引导加载程序(这样做的原因是为了防止先有鸡还是先有蛋的问题 - 您必须至少有一个 shell 才能访问 shell。此磁盘映像已包含一个原始的 EFI 外壳)。
- 如果您只想有一个可启动的 shell,您可以从此 Github 存储库下载更新的预编译二进制文件:UEFI外壳
- 使用 Rufus 或其他映像创建工具(如
dd
将 CD-R 映像写入 USB)。- 如果您只下载了 shell,请按照如何创建 UEFI-Shell 引导设备,跳过步骤 3,因为您已经在上面的步骤 2 中下载了二进制文件。
- 使用新创建的 USB 设备重新启动您的电脑。
- 如果您选择 CD-R 方法,请使用箭头键并按向右箭头,直到突出显示 UEFI shell,然后按
Enter
- 如果您仅选择 Shell 方法,系统应立即启动并直接进入 shell。
- 如果您选择 CD-R 方法,请使用箭头键并按向右箭头,直到突出显示 UEFI shell,然后按
下一步
您现在应该处于 UEFI shell 中,并且能够直接修改变量和值。请执行下列操作:
- 查看已有的内容:
bcfg boot dump
- 确定需要更新的 EFI 分区的位置:
dir fsX:
其中 X 是从 0 开始到磁盘计数减 1 结束的磁盘编号。我们正在查找目录所在的磁盘EFI
,即fs0:\EFI
- 继续列出 EFI 中嵌套的目录,直到找到要添加的 Shim.efi 文件的位置。我相信你的情况,这将是:
fsX:\EFI\debian\shimx64.efi
- 获取步骤 3 的结果,并发出以下命令:
cfg boot add 0 <location from step 3> DebianShim
DebianShim 实际上可以是任何东西,因为这是引导加载程序用来显示条目的文本。我相信 0 可以是 0 到 9 之间的任何数字。这是启动顺序,因此 0 将位于顶部。
边注:我相信要完成此更改,您必须启动 LiveUpdate 设置实用程序并关闭 CSM,前提是您的 Windows 版本是在 UEFI 模式下安装的。
来源
使用 rEFInd 和 Rufus 恢复 EFI NVRAM 启动项- 这是我第一次用来解决这个问题的链接。忽略评论回复:灾难就像efibootmanager
你所使用的那样。