"EFI-Variablen werden auf diesem System nicht unterstützt."

18

Ich versuche, Arch Linux auf einem neuen (und sehr beschissenen) HP Pavillion 15-Notebook zu installieren.

Dies ist eine UEFI-basierte Maschine. Nach einigem Hin und Her habe ich es geschafft, ziemlich weit zu kommen. Der Legacy-Modus ist im System-Setup deaktiviert, und ich habe EFI auf die gebrannte Arch-DVD gebootet und bin durch das Arch -Handbuch für Anfänger und das erweiterte Installationshandbuch bis zu dem Punkt gegangen, an dem ich grub installiere.

Während der chrootBearbeitung führe ich aus:

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

Dies gibt eine Tonne Ausgabe aus, einschließlich:

EFI-Variablen werden auf diesem System nicht unterstützt

Als ich zum ersten Mal an diesem Punkt angelangt war, fuhr ich mit der Installation fort, ohne zu wissen, ob es sich tatsächlich um ein Problem handelte. Es stellte sich heraus, dass beim Neustart des Computers kein bootfähiges Medium gefunden werden konnte und der Computer sich weigerte, zu starten. Zu diesem Zeitpunkt konnte ich in das UEFI-Setup-Menü gehen und eine EFI-Datei zum Booten auswählen, und Arch Linux bootete.

Aber ich gehe jetzt zurück und wieder neu installieren und versuche, das Problem oben zu beheben.

Wie kann ich GRUB zur korrekten Installation bringen?

John Dibling
quelle

Antworten:

19

Das Problem war einfach, dass das efivarsKernelmodul nicht geladen wurde.

Dies kann bestätigt werden durch:

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

Wenn Sie chrootbei Ihrer neuen Installation angemeldet sind, gehen Sie zu " exitout" und aktivieren Sie Folgendes efivars:

exit
modprobe efivars

... und dann chrootwieder rein. In meinem Fall bedeutet das:

chroot /mnt

aber du solltest chrootgenauso sein wie vorher.

Sobald Sie wieder da sind, testen Sie es erneut:

efivar-tester

Dadurch wird kein Fehler mehr gemeldet und Sie können grub auf dieselbe Weise wie zuvor installieren.

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
John Dibling
quelle
Siehe auch rodbooks.com/efi-bootloaders/principles.html
Michael Shigorin
5
Aber was ist mit einem System, das UEFI nicht unterstützt? Wie in aller Welt installiere ich UEFI-fähigen GRUB auf meinem USB-Stick, um Arch auf einem neuen UEFI-Computer zu installieren, wenn mein Arbeitscomputer UEFI nicht unterstützt? Es muss einen Weg geben, es zu tun!
Trusktr
6
Das efivars-Modul wurde jetzt durch "efivarfs" ersetzt ( wiki.debian.org/UEFI#efibootmgr_and_efivar ).
pedroapero
1
Während der modprobe efivarfsArbeit bleibt das vom OP beschriebene Problem bestehen. Vielleicht braucht diese Antwort ein Update? Mir gehen die Ideen völlig aus.
Afr
2
Leider modprobe efivarsgibt modprobe: FATAL: Module efivars not found in directory /lib/modules/4.16.3-301.fc28.x86_64(frisch installierte Live-USB)
jozxyqk
5

Sie erhalten diesen Fehler, wenn Sie mit einer älteren Methode und nicht mit der UEFI-Methode gebootet haben. Sie müssen sicherstellen, dass Sie entweder das UEFI-Startelement im BIOS-Menü oder UEFI als Standardstartmethode auswählen.

Cengique
quelle
4

Ich weiß, das ist ein sehr alter Thread, aber vielleicht hilft er jemandem. Die meisten Handbücher schlagen die gleiche Lösung vor, um virtuelle Dateisysteme vor chroot bereitzustellen:

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

Aber jetzt (möglicherweise im Zusammenhang mit Änderungen an efivars / efivarfs) überspringt diese Schleife einen ganz speziellen Unter- /sys/firmware/efi/efivarsMount -Punkt - und efibootmgr / grub schlägt fehl.

Verwenden Sie stattdessen diese Zeile:

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

Aktuelle Erfolgsgeschichte: Debian mit 4.9.0-5 (efivars), gespeichert von Arch Linux Live-CD (ausgewählt, nur weil uefi sofort booten kann) mit 4.14.9-1-ARCH (efivarfs), nur durch Binden von mount / sys / firmware / efi / efivars

sorrytech
quelle
0

Unter Fedora 27 musste ich das mounten efivarfs. Ich habe das in den chrootfs gemacht, aber das funktionierte immer noch nicht, da der Boot-Eintrag mit angezeigt wurde efibootmgr- aber nach dem Neustart wurde er weder gebootet noch im Live-Betriebssystem einmal angezeigt.

Was schließlich funktionierte, war die Verwendung von Grub vom Live-Medium, das Ablegen in die Shell und das Eingeben. linuxefi /vmlinuz-<version> root=/dev/mapper/luks-<uuid> ro initrdefi /initramfs-<version>.img boot Unter dem normalen Betriebssystem, das gestartet wurde, konnte ich grub2-installohne ausgeführt werden chroot, und das funktionierte.

Ich bin nicht sicher, ob dies nur ein Problem mit meinem BIOS war oder ob noch etwas allgemeineres nicht in Ordnung ist, aber dies hat dazu grub2-installgeführt, dass es ohne Fehlermeldung ausgeführt wurde.

# 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

user3384414
quelle
-3

Das kannst du nicht! Bauen und Installieren sind zwei verschiedene Dinge. Die Maschine, auf der Sie bauen, muss uefi-fähig sein. Wenn Sie Linux auf Uefi-fähiger Hardware verwenden / installieren möchten, muss gpt bereits vorhanden sein. Sie können gpt / mbr auf uefi erstellen, aber nicht auf beiden, wenn Ihre Hardware alte BIOS verwendet.

Jim
quelle
Bitte lesen Sie den Beitrag genauer durch.
John Dibling