“此系统不支持 EFI 变量”

“此系统不支持 EFI 变量”

我正在尝试将 Arch linux 安装到一台新的(而且非常蹩脚的)HP Pavillion 15 笔记本上。

这是一台基于 UEFI 的机器。经过几次尝试后,我已经取得了相当大的进展。系统设置中禁用了传统模式,并且我已通过 EFI 引导至我刻录的 Arch DVD,并通过两个 Arch初学者指南以及更先进的安装指南到我正在安装 grub 的地步。

chroot编辑时,我执行:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug

这会发出大量输出,包括:

该系统不支持 EFI 变量

当我第一次到达这一点时,我继续安装,不知道这是否是一个实际问题。事实证明,当我重新启动机器时,找不到可启动介质,并且机器拒绝启动。此时我可以进入 UEFI 设置菜单并选择要启动的 EFI 文件,Arch Linux 就会启动。

但我现在回去重新安装,试图解决上述问题。

如何才能正确安装 GRUB?

答案1

我知道,这是非常古老的线程,但也许会对某人有所帮助。大多数指南建议使用相同的解决方案在 chroot 之前挂载虚拟文件系统:

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

但现在(可能与 efivars/efivarfs 更改有关)此循环会跳过一个非常特殊的子挂载点 -/sys/firmware/efi/efivars并且 efibootmgr/grub 失败。

因此,请改用这一行:

for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i; done

实际成功案例:Debian 4.9.0-5 (efivars) 由 Arch Linux live cd 保存(选择它只是因为可以开箱即用地启动 uefi),通过绑定安装 /sys 使用 4.14.9-1-ARCH (efivars) /固件/efi/efivars

答案2

问题很简单,就是efivarfs内核模块没有加载。

这可以通过以下方式确认:

sh-4.2# efivar-tester
UEFI variables are not supported on this machine.

如果您chroot进入新安装,exit退出,然后启用efivarfs

exit
modprobe efivarfs

efivarfs过去是这样efivars,所以如果这返回错误,请尝试modprobe efivars

...然后chroot返回。就我而言,这意味着:

chroot /mnt

但你应该chroot像以前一样。

重新进入后,再次测试:

efivar-tester

这样就不再报错了,就可以像之前一样安装grub了。

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug

答案3

如果您使用旧版而不是 UEFI 方法启动,您将收到此错误。您需要确保在 BIOS 菜单中选择 UEFI 启动项,或者选择 UEFI 作为默认启动方式。

答案4

经过一番折腾,终于找到了解决办法。就我而言,我在 EFI 系统上自定义编译并安装了 preempt-rt 内核(5.6.19-rt11(已修补))。

发现的问题是 preempt-rt 内核没有激活 efi 运行时,因此出现错误。

解决方案很简单:

添加efi=runtime到 /etc/default/grub 配置中的内核参数。

GRUB_CMDLINE_LINUX_DEFAULT="efi=runtime quiet"

别忘了sudo update-grub2

相关内容