Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 12

Немного про то, как формируется grub64.efi, можно понять из моей древней статьи. Про встроенный конфиг там есть хороший комментарий.
Загрузчик действительно формируется grub-install динамически и включает в себя модули, которые ему нужны для того, чтобы найти ядро и собственные модули в дебрях LVM, RAID и прочих файловых систем. Причем, когда вы находитесь в целевой системе, grub-install сам выберет модули, необходимые для загрузки модулей grub и ядра, и не включит лишние модули. Это сломает загрузку если вы, например, перенесете root-раздел из раздела диска на LVM - модуля в GRUB не будет и свои модули и ядро он не найдет.
Часто, для установки загрузчика удобно загрузится в целевую систему с другого носителя с, например, SuperGRUB, примонтировать нужные /boot и /boot/efi и выполнить grub-install - он пересоберет GRUB с нужными модулями и станет возможна загрузка с основного диска. Этот же способ помогает перейти с legacy на UEFI.

Я делал для генты, прикольно, загрузка получается в разы быстрее, особенно если в биосе включить fastboot (на некоторых ноутах есть) и выкинуть initrd. Но минус, что на каждый чих пересобирай ядро, ибо параметры ядра оказываются захардкожены при сборке.

Хз как с этим UKI, но и до этого можно было загружать ядро с UEFI и прописывать параметры через efibootmgr без пересборки

Если использовать systemd-boot вместе с UKI — то параметры можно редактировать, не прибегая пересборке UKI. По крайней мере, если не включен Secure boot

И ядро и initrd, проверено на опыте

вот этой его странной и на мой взгляд не удобной особенностью, что файл содержит всё в себе

Ради безопасной загрузки. Загрузчик не имеет права загружать произвольный код, поэтому все модули вкомпилены в него.

Для пущей защиты может быть включён механизм lockdown, который ещё сильнее урезает возможности GRUB, блокируя возможные пути обхода Secure Boot, например, запрещает доступ к некоторым интерфейсам ACPI и MSR-регистрам CPU, ограничивает использование DMA для PCI-устройств, блокирует импорт кода ACPI из переменных EFI, не допускает манипуляции с портами ввода/вывода.

НЛО прилетело и опубликовало эту надпись здесь

Пользуясь случаем, хочу напомнить о существовании в grub-install флага --removable. И настоятельно рекомендовать его к использованию. Как минимум, это избавляет от записи в NVRAM и от взаимодействия с убогим efibootmgr, ну и переносимость установленной системы — бонусом.

Именно в этом была проблема не загрузки. В целом проблема простая, я не первый раз на неё натыкаюсь из-за того, что в системе ядро и "большой" grub лежит в /boot, но он находится по привычке на своём разделе, поэтому относительно него, grub и ядро лежит в корне этого раздела.

ЛОЛ, вот почему у меня (оказывается) файлы grub'а лежат в /boot/boot/grub*

Есть способ сделать grub загружаемым без записи в EFIVARS (NVRAM) Файл должен называться bootx64.efi Можно сделать такую установку передав grub-install параметр --removable. Можно существующий файл переименовать.

При обычной установке распространенный способ это передавать в grub. --efi-directory=... это путь куда смонтирован EFI раздел и --boot-directory=... это путь куда смонтирован загрузочный раздел, на котором будет конфиг граба и модули.

А пообще efi grub довольно просто устанавливать и легко кастомизировать, в свое время я писал скрипты для развертывания разных embedded сборок.

Можно посмотреть как убунта сделал efi с грабом. Если память не изменяет, в ефи мини граб запускает граб из целевой системы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации