„Zmienne EFI nie są obsługiwane w tym systemie”

19

Próbuję zainstalować Arch Linux na nowym (i bardzo kiepskim) komputerze przenośnym HP Pavillion 15.

Jest to maszyna oparta na UEFI. Po kilku huśtawkach udało mi się dojść dość daleko. Tryb starszej wersji jest wyłączony w konfiguracji systemu, a EFI uruchomił się na Arch DVD, który wypaliłem, i przejrzałem zarówno Arch Arch dla początkujących, jak i bardziej zaawansowany Podręcznik instalacji, aż do instalacji gruba.

Podczas chrootedycji wykonuję:

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

To emituje masę produkcji, w tym:

Zmienne EFI nie są obsługiwane w tym systemie

Gdy pierwszy raz dotarłem do tego punktu, kontynuowałem instalację, nie wiedząc, czy to rzeczywiście problem. Okazuje się, że tak było, ponieważ po ponownym uruchomieniu komputera nie można znaleźć nośnika startowego, a maszyna odmówiła uruchomienia. W tym momencie mogłem wejść do menu ustawień UEFI i wybrać plik EFI do uruchomienia, a Arch Linux uruchomi się.

Ale teraz wracam i ponownie instaluję, próbując naprawić powyższy problem.

Jak mogę poprawnie zainstalować GRUB?

John Dibling
źródło

Odpowiedzi:

20

Problem polegał po prostu na tym, że efivarsmoduł jądra nie został załadowany.

Można to potwierdzić przez:

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

Jeśli jesteś chrootzalogowany do nowej instalacji, exitwyłącz, a następnie włącz efivars:

exit
modprobe efivars

... a potem z chrootpowrotem. W moim przypadku oznacza to:

chroot /mnt

ale powinieneś zrobić chrootto samo, co wcześniej.

Po powrocie przetestuj ponownie:

efivar-tester

To nie będzie już zgłaszać błędu i możesz zainstalować gruba w taki sam sposób jak wcześniej.

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
John Dibling
źródło
Zobacz także rodsbooks.com/efi-bootloaders/principles.html
Michael Shigorin
5
Ale co z systemem, który nie obsługuje UEFI? Jak na świecie mam zainstalować GRUB obsługujący UEFI na mojej pamięci USB, aby zainstalować Arch na nowym komputerze UEFI, jeśli mój komputer nie obsługuje UEFI? Musi być na to sposób!
trusktr
6
Moduł efivars został teraz zastąpiony przez „efivarfs” ( wiki.debian.org/UEFI#efibootmgr_and_efivar ).
pedroapero,
1
Podczas modprobe efivarfspracy problem opisany przez PO nadal występuje. może ta odpowiedź wymaga aktualizacji? Skończyły mi się pomysły.
Afr
3
Niestety modprobe efivarsdaje modprobe: FATAL: Module efivars not found in directory /lib/modules/4.16.3-301.fc28.x86_64(świeżo zainstalowane usb na żywo)
jozxyqk
5

Ten błąd pojawi się, jeśli wykonałeś rozruch przy użyciu starszej wersji, a nie metody UEFI. Musisz upewnić się, że wybrałeś element rozruchowy UEFI w menu BIOS lub wybierz UEFI jako domyślną metodę rozruchu.

cengique
źródło
4

Wiem, to bardzo stary wątek, ale może komuś pomoże. Większość przewodników sugeruje to samo rozwiązanie do montowania wirtualnych systemów plików przed chroot:

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

Ale teraz (być może związane ze zmianami efivars / efivarfs) ta pętla pomija jeden bardzo specjalny podpunkt - /sys/firmware/efi/efivarsi efibootmgr / grub nie działa.

Zamiast tego użyj tej linii:

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

Rzeczywista historia sukcesu: Debian z wersją 4.9.0-5 (efivars) zapisaną przez Arch Linux live cd (wybrany tylko dlatego, że można uruchomić system po wyjęciu z pudełka) z 4.14.9-1-ARCH (efivarfs) po prostu przez bind-mount / sys / firmware / efi / efivars

sorrytech
źródło
0

Korzystając z Fedory 27, musiałem zamontować efivarfs. Zrobiłem to wewnątrz chrootfs, jednak to wciąż nie działało, ponieważ pokazany został wpis bootowania efibootmgr- ale po ponownym uruchomieniu został uruchomiony z poziomu Nether, ani raz nie został pokazany w systemie operacyjnym na żywo.

To, co w końcu zadziałało, to użycie gruba z nośnika na żywo, upuszczenie do powłoki i wejście linuxefi /vmlinuz-<version> root=/dev/mapper/luks-<uuid> ro initrdefi /initramfs-<version>.img boot Z normalnego systemu operacyjnego uruchomionego, mogłem grub2-installbez niego uruchomić chrooti to działało.

Nie jestem pewien, czy to był tylko problem z moim BIOS-em, czy nadal jest coś bardziej ogólnie nie tak, ale właśnie to grub2-installuruchomiło się bez zgłaszania żadnego błędu.

# 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

użytkownik3384414
źródło
-3

Nie możesz! Budowanie i instalowanie to dwie różne rzeczy: maszyna, na której zbudujesz, musi być zdolna do uefi. Jeśli chcesz używać / instalować Linuksa na sprzęcie obsługującym Uefi, gpt musi już istnieć. Możesz zbudować gpt / mbr na uefi, ale nie na obu, jeśli twój sprzęt używa starych bios.

Jim
źródło
Przeczytaj uważniej post.
John Dibling