18

I am attempting to install Arch linux to a new (and very crappy) HP Pavillion 15 Notebook.

This is a UEFI-based machine. After several swings at it, I have managed to get pretty far. Legacy mode is disabled in the system setup, and I have EFI-booted to the Arch DVD I burned, and progressed through both the Arch Beginner's Guide and the more advanced Installation Guide to the point where I am installing grub.

While chrooted, I execute:

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

This emits a ton of output, including:

EFI variables are not supported on this system

The first time I got to this point, I continued with the installation, not knowing if it was an actual problem. Turns out it was, as when I rebooted the machine no bootable medium could be found and the machine refused to boot. I was able at that point to go in to the UEFI setup menu and select an EFI file to boot, and the Arch Linux would boot up.

But I am now going back and reinstalling again, trying to fix the problem above.

How can I get GRUB to install correctly?

19

The problem was simply that the efivars kernel module was not loaded.

This can be confirmed by:

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

If you are chrooted in to your new install, exit out, and then enable efivars:

exit
modprobe efivars

...and then chroot back in. In my case, this means:

chroot /mnt

but you should chroot the same way you did before.

Once back in, test again:

efivar-tester

This will no longer report an error, and you can install grub the same way you did before.

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
  • 5
    But what about on a system that doesn't support UEFI? How in the world do I install UEFI-capable GRUB on my USB stick to install Arch on a new UEFI computer if my working computer doesn't support UEFI? There's gotta be a way to do it! – trusktr Nov 12 '13 at 22:35
  • 6
    The efivars module has been replaced by "efivarfs" now (wiki.debian.org/UEFI#efibootmgr_and_efivar). – pedroapero Oct 12 '15 at 13:54
  • 1
    While modprobe efivarfs works, the issue described by the OP persists. maybe this answer needs an update? I'm totally running out of ideas. – Waqar Lim Jul 19 '17 at 11:37
  • 2
    Sadly modprobe efivars gives modprobe: FATAL: Module efivars not found in directory /lib/modules/4.16.3-301.fc28.x86_64 (freshly installed live usb) – jozxyqk Jun 8 '18 at 2:17
5

You will get this error if you have booted using legacy and not the UEFI method. You need to make sure to either select the UEFI boot item in the BIOS menu, or select UEFI as the default boot method.

4

I know, that's very old thread, but maybe will help for someone. Most guides suggest the same solution to mount virtual filesystems before chroot:

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

But now (maybe related to efivars/efivarfs changes) this loop skips one very special sub-mountpoint - /sys/firmware/efi/efivars and efibootmgr/grub fails.

So use this line instead:

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

Actual success story: Debian with 4.9.0-5 (efivars) saved by Arch Linux live cd (picked just because can boot uefi out of the box) with 4.14.9-1-ARCH (efivarfs) just by bind-mounting /sys/firmware/efi/efivars

0

Running Fedora 27, I needed to mount the efivarfs. I did this inside the chrootfs, however this still wasn't working, as the boot entry was shown with efibootmgr - but after reboot it was nether booted nor was shown once back in the live OS.

What finally worked, was using grub from the live medium, drop to the shell, and enter linuxefi /vmlinuz-<version> root=/dev/mapper/luks-<uuid> ro initrdefi /initramfs-<version>.img boot From the normal OS booted, I could run grub2-install without chroot, and that worked.

I am not sure whether this was just an issue with my BIOS, or there is still something more generally wrong, but this is what made grub2-install run without reporting any error.

# 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

You can't! Building and installing are two different things, the machine you build on must be uefi capable. If you want to use/install linux on uefi capable hardware gpt must already exist. You can build gpt/mbr on uefi but not both if your hardware uses old bios.

  • Please read the post more carefully. – John Dibling Apr 28 '16 at 22:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.