“此系统不支持EFI变量”


19

我正在尝试将Arch linux安装到新的(而且非常笨拙的)HP Pavillion 15笔记本电脑上。

这是基于UEFI的计算机。经过几次摇摆后,我设法走得很远。在系统设置程序中,传统模式已禁用,并且我已将EFI引导至刻录的Arch DVD,并逐步完成了《 Arch 初学者指南》和更高级的《安装指南》,直至安装grub。

chrooted期间,我执行:

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

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

该系统不支持EFI变量

第一次到这一点,我继续安装,不知道这是否是实际问题。原来是这样,因为当我重新引导计算机时,找不到可引导介质,并且计算机拒绝引导。那时,我能够进入UEFI设置菜单并选择要启动的EFI文件,然后Arch Linux将启动。

但是我现在回去重新安装,尝试解决上面的问题。

如何使GRUB正确安装?

Answers:


20

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

可以通过以下方式确认:

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

如果您要chroot进行新安装,请exit退出,然后启用efivars

exit
modprobe efivars

...然后再chroot返回。对于我来说,这意味着:

chroot /mnt

但是您应该chroot使用以前的方法。

再次进入后,再次测试:

efivar-tester

这将不再报告错误,并且您可以像以前一样安装grub。

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


5
但是在不支持UEFI的系统上呢?如果我的工作计算机不支持UEFI,我该如何在USB记忆棒上安装支持UEFI的GRUB以便在新UEFI计算机上安装Arch?一定有办法做到!
trusktr

6
efivars模块现在已由“ efivarfs”替换(wiki.debian.org/UEFI#efibootmgr_and_efivar)。
pedroapero 2015年

1
虽然modprobe efivarfs可行,但OP所描述的问题仍然存在。也许这个答案需要更新?我完全没有想法了。
AFR

3
可悲的modprobe efivarsmodprobe: FATAL: Module efivars not found in directory /lib/modules/4.16.3-301.fc28.x86_64(新安装的实时USB)
jozxyqk

5

如果使用旧版而不是UEFI方法启动,则会出现此错误。您需要确保在BIOS菜单中选择UEFI引导项,或选择UEFI作为默认引导方法。


4

我知道,这是很老的话题,但也许会对某人有所帮助。大多数指南建议在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

实际的成功故事:通过绑定安装/ sys,由Arch Linux live cd(仅因为可以直接启动uefi)保存了具有4.9.0-5(efivars)的Debian和4.14.9-1-ARCH(efivarfs) / firmware / efi / efivars


0

运行Fedora 27,我需要安装efivarfs。我是在chrootfs内部执行此操作的,但是仍然无法正常工作,因为引导项与efibootmgr- 一起显示-但在重新引导后,它已被完全引导,也没有在实时操作系统中再次显示。

最终有效的方法是,从活动介质中使用grub,放到shell中,然后输入。 linuxefi /vmlinuz-<version> root=/dev/mapper/luks-<uuid> ro initrdefi /initramfs-<version>.img boot 从正常的OS引导下,我可以在grub2-install没有的情况下运行chroot,并且行得通。

我不确定这是否只是我的BIOS的问题,还是仍然存在更普遍的错误,但这是在grub2-install运行时未报告任何错误的原因。

# Open encrypted root partion cryptsetup luksOpen /dev/sda4 a4 mount /dev/mapper/a4 /mnt mount /dev/sda2 /mnt/boot mount -t proc proc /mnt/proc mount -t sysfs sys /mnt/sys mount -o bind /dev /mnt/dev mount -t devpts pts /mnt/dev/pts/ mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf chroot /mnt # run inside the chroot: mount /dev/sda1 /boot/efi mount -t efivarfs efivarfs /sys/firmware/efi/efivars grub2-install


-3

你不能!构建和安装是两件事,构建的计算机必须具有uefi功能。如果要在支持uefi的硬件上使用/安装linux,则必须已经存在gpt。如果您的硬件使用旧的BIOS,则可以在uefi上构建gpt / mbr,但不能同时构建两者。


请更仔细地阅读该帖子。
John Dibling '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.