Настройки EFI, установленные через efibootmgr, игнорируются после перезагрузки

У меня есть 2 диска (/dev/sda и /dev/sdb) на ноутбуке UEFI. Оба GPT.

sda1 - NTFS  - Windows,
sda2 - FAT32 - EFI partition where is Windows Boot Manager and GRUB

sdb1 - NTFS  - another windows 
sdb2 - NTFS  - My data
sdb3 - FAT32 - EFI partition
sdb4 - EXT4  - Debian

в порядке EFI я вижу Windows Boot Manager и GRUB. Я могу измениться между тем, и это работает. Я считаю, использовать syslinux для загрузки в Debian. Я хочу иметь syslinux на sdb3, я смонтировал это и скопировал эти файлы в этот раздел по адресу:

/EFI/SYSLINUX/initrd.img
/EFI/SYSLINUX/ldlinux.e64
/EFI/SYSLINUX/syslinux.cfg
/EFI/SYSLINUX/syslinux.efi
/EFI/SYSLINUX/vmlinuz

vmlinuz и initrd я скопировал из sdb4\boot и переименовал. syslinux.efi и ldlinux.e64, которые я скопировал с syslinux-6.03.tar.gz, загруженного с http://kernel.org/. syslinux.cfg я написал и содержимое

PROMPT 0
TIMEOUT 300
DEFAULT deb

LABEL deb
    LINUX vmlinuz
    APPEND ROOT=/dev/sdb4
    INITRD initrd.img

Затем я добавил запись в EFI через команду

efibootmgr -c -d /dev/sdb3 -p 1 -l \\EFI\\SYSLINUX\\syslinux.efi -L "SYSLINUX2"

Менеджер efiboot ответил успешно и показывает SYSLINUX2 в качестве параметров загрузки, но когда я перезагружаю компьютер (с помощью команды перезагрузки) и переходит к настройкам UEFI, опция SYSLINUX2 не добавляется. Есть только GRUB и Windows Boot Manager. После следующей загрузки в Debian efibootmgr также отвечает только на Windows Boot Manager и GRUB.

Я читал, что у некоторых людей были проблемы с безопасной загрузкой. Я отключил его, и у GRUB нет проблем с этим.

Что случилось? Как сделать настройку efibootmgr постоянной? Где я ошибся (если есть)?

4 ответа

Решение

Вы видите ошибку, и она почти наверняка не связана с безопасной загрузкой. У меня есть несколько предложений, но ни одно из них не может решить проблему:

  • Обновите прошивку - если ошибка в прошивке, обновление может решить проблему. Обратитесь к производителю компьютера (или материнской платы), чтобы найти обновления. (Они, вероятно, называются "обновлениями BIOS", хотя технически ваша прошивка не является BIOS.) После обновления перезагрузитесь в Linux и попробуйте снова.
  • Сбросьте вашу прошивку к настройкам по умолчанию - Иногда списки менеджера загрузки EFI повреждаются, вызывая симптомы, подобные описанным вами. Сброс всех настроек прошивки до значений по умолчанию в утилите настройки может решить эту проблему. К сожалению, этот шаг удалит все рабочие записи менеджера загрузки, поэтому вам может потребоваться использовать аварийный инструмент (например, мой загрузочный менеджер rEFInd на USB-накопителе или CD-R) для загрузки до тех пор, пока вы заново не создадите свои рабочие записи.
  • Удалить неиспользуемые записи менеджера загрузки - удаление неиспользуемых записей менеджера загрузки (с помощью -B возможность efibootmgr) также может работать с поврежденными записями. Пытаться efibootmgr один или efibootmgr -v для более подробного вывода, чтобы найти дубликаты или нежелательные записи. (Обратите внимание, что микропрограмма может воссоздать некоторые автоматически при перезагрузке. Это может произойти, например, с параметрами загрузки по сети или параметрами загрузки с внешнего носителя.)
  • Используйте другой инструмент для создания загрузочной записи - иногда efibootmgr не работает, но инструмент в другой ОС (например, bcdedit или EasyUEFI в Windows) или bcfg инструмент в оболочке EFI сделает работу. Таким образом, вы можете попробовать эти инструменты вместо efibootmgr,
  • Использовать запасное имя файла - Резервное имя файла (EFI/BOOT/bootx64.efi в системах x86-64) можно использовать, если ничего не работает; однако это имя файла обычно будет последним, которое пытается загрузить компьютер. Таким образом, если он уже загружается под другим именем (например, загрузчик Windows, EFI/Microsoft/Boot/bootmgfw.efi), вам может потребоваться выполнить резервное копирование, переименовать требуемый менеджер загрузки / загрузчик в текущую загрузку по умолчанию и перенастроить новый загрузчик, чтобы предлагать загрузку того, на котором он маскируется, с использованием его нового имени. В лучшем случае это немного жонглирование, и не все загрузчики EFI для Linux могут загружать цепочку в другую программу EFI, поэтому она может работать неправильно. (Я не припоминаю, если SYSLINUX может загружать другую программу EFI.)
  • Переключитесь на BIOS/CSM/ устаревшую загрузку - большинство EFI предоставляют модуль поддержки совместимости (CSM), который позволяет им загружать загрузчики в режиме BIOS. Таким образом, вы можете установить загрузчик в режиме BIOS для Linux, активировать CSM и выполнить загрузку таким образом. Если вы используете двойную загрузку другой ОС, вам также потребуется установить ее загрузчик в режиме BIOS, и это может потребовать перехода с GPT на MBR. В целом, такой подход, вероятно, будет немного болезненным; но для некоторых EFI (в основном старых из 2011 или около того), это может быть лучшим подходом.
  • Возврат компьютера для возврата. Если все остальное не помогло, и если компьютер находится в пределах срока возврата своего магазина, вы можете вернуть его на тот, который работает. Фактически, я рекомендую этот подход перед любым из двух предыдущих вариантов, если это возможно. Если вы сделаете это, обязательно свяжитесь с производителем, чтобы сообщить им, почему вы вернули компьютер. У EFI были серьезные ошибки с первого дня, и некоторые производители не спешили их исправлять, отчасти потому, что их клиенты никогда не жалуются, поэтому производители не понимают, насколько серьезны ошибки.

Как и ОП, я видел старые, недействительные записи при использовании. Я пытался удалить их с помощьювариант, и он, казалось, работал, но при перезагрузке старый список возвращался, а мои изменения терялись.

Для меня решением на Thinkpad было зайти в программу настройки BIOS и установить для параметра «Блокировка порядка загрузки» на вкладке «Загрузка» значение «Отключено » . Когда он включен , вы не можете изменять загрузочные записи. Надеюсь, это поможет кому-то еще!

ОБНОВИТЬ:

Привет, я снова,

снова начал работать над ним, теперь исправлено с переименованием файла.efi в эквивалент Windows (bootmgfw.efi), затем перемонтировал efivar file systemme efivarfs, как в приведенном выше описании, затем установил загрузочную запись uefi в VRAM, набрав

efibootmgr -c -d /dev/sda -p 4 -L "linuxmint_grub" -l "\EFI\linuxmint_grub\bootmgfw.efi"

с ESP на /dev/sda, раздел 4.

Никакая загрузка не работает без ошибок, запись в efibootmgr остается постоянной, единственный недостаток: GRUB запускается во время загрузки автоматически, несмотря на то, что он выключен. Кажется, это проблема GRUB, я исправлю это позже.

Ура и надеюсь, я мог помочь;)

У меня та же проблема: я пытаюсь создать загрузочную запись efi под Intel NUC7I5BBNK и LinuxMint 18.3 с ESP, установленным в /boot. Efibootmgr создает запись успешно и постоянно, однако она недоступна, не отображается в визуальном меню загрузки EFI, и автоматически отображаемая запись загрузки в Intel BIOS показывает только то, что "не найден допустимый загрузочный раздел". Также я обнаружил, что порядок загрузки, независимо от того, как часто я его исправляю, не является постоянным, я попытаюсь перемонтировать с

mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars

хотя он уже установлен "RW", как показано

крепление | grep efivars

и попробуй еще раз. (Для получения дополнительной информации см. https://wiki.gentoo.org/wiki/Efibootmgr).

Выбор переменных efi непосредственно из меню UEFI visual bios был невозможен, я могу визуально увидеть его из встроенного файла исследования, но не могу его выбрать.

Другой вариант - установить.efi-Variables в режиме безопасной загрузки, что мне не нравится. Может быть, это лучше подходит для моей реализации UEFI. Все установки нуждаются в индивидуальной настройке!

Во-вторых, попытался установить запись EFI с efibootmgr на ноутбуке ASUS V3-371-KT51, совсем не работал -> действительно показывает, как это зависит от машины и реализации UEFI. Работал (вроде) с выбором файла.efi из меню UEFI вручную, но только в режиме безопасной загрузки.

Метод bcfg, предложенный в другом посте, предназначен только для прямой загрузки, что означает пренебрежение менеджером загрузки (EFISTUB, насколько я знаю, не принимает это как должное, проверьте это сами, как здесь: https://wiki.archlinux.org/index.php/EFISTUB)

Кстати: 3 очевидные для меня ошибки: (1) -d обозначает "диск", а не "раздел", что означает, что вы должны изменить его на "/dev/sdb", если ваш ESP включен /dev/sdb (2) -p обозначает номер раздела, в вашем случае "3" (или "2", в зависимости от того, как подсчитывает efibootmgr или UEFI).

Попробуй это изменить.

(3) И последнее, но не менее важное: я успешно загрузил флешку UEFI со всеми ядрами, файлами initrd и чем-то, что не для / boot, в отличие от предложенного вами каталога /boot/EFI/syslinux. Это обычный путь.

Надеюсь, это было полезно, удачи вам и заботиться;)

Другие вопросы по тегам