«Переменные EFI не поддерживаются в этой системе»

19

Я пытаюсь установить 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 правильно установить?

Джон Диблинг
источник

Ответы:

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
Джон Диблинг
источник
См. Также rodsbooks.com/efi-bootloaders/principles.html
Михаил Шигорин,
5
Но как насчет системы, которая не поддерживает UEFI? Как в мире установить GRUB с поддержкой UEFI на USB-накопитель для установки Arch на новый компьютер UEFI, если мой рабочий компьютер не поддерживает UEFI? Должен быть способ сделать это!
trusktr
6
Модуль efivars теперь заменен на «efivarfs» ( wiki.debian.org/UEFI#efibootmgr_and_efivar ).
Pedroapero
1
Пока modprobe efivarfsработает, проблема, описанная ОП, сохраняется. может быть, этот ответ нуждается в обновлении? У меня полностью заканчиваются идеи.
Afr
3
К сожалению, modprobe efivarsдает modprobe: FATAL: Module efivars not found in directory /lib/modules/4.16.3-301.fc28.x86_64(недавно установленный живой USB)
Jozxyqk
5

Вы получите эту ошибку, если вы загрузились, используя устаревший, а не метод UEFI. Необходимо убедиться, что вы выбрали либо пункт загрузки UEFI в меню BIOS, либо выберите UEFI в качестве метода загрузки по умолчанию.

cengique
источник
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

Фактическая история успеха: Debian с 4.9.0-5 (efivars), сохраненный Arch Linux live cd (выбран только потому, что может загружать uefi из коробки) с 4.14.9-1-ARCH (efivarfs) просто с помощью bind-mount / sys / прошивки / EFI / efivars

sorrytech
источник
0

Запустив Fedora 27, мне нужно было смонтировать efivarfs. Я сделал это внутри chrootfs, однако это все еще не работало, так как загрузочная запись была показана с efibootmgr- но после перезагрузки она не загружалась ни разу, и не была показана снова в живой ОС.

То, что в итоге сработало, использовало grub из live-среды, переместилось в оболочку и вошло. linuxefi /vmlinuz-<version> root=/dev/mapper/luks-<uuid> ro initrdefi /initramfs-<version>.img boot Из обычной загруженной ОС я мог работать 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

user3384414
источник
-3

Ты не можешь! Сборка и установка - это две разные вещи, машина, на которой вы строите, должна поддерживать UEFI. Если вы хотите использовать / установить linux на оборудовании с поддержкой uefi, gpt должен уже существовать. Вы можете собрать gpt / mbr на uefi, но не на обоих, если ваше оборудование использует старый BIOS.

Джим
источник
Пожалуйста, прочитайте пост более внимательно.
Джон Диблинг