Pull to refresh

Comments 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, не допускает манипуляции с портами ввода/вывода.

Я собирал ОС с ядром, базовыми приложениями и графикой в один файл. Ядро linux позволяет при сборке включить в себя корневую файловую систему.

На флешку в fat32 закидывается в каталог 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 с грабом. Если память не изменяет, в ефи мини граб запускает граб из целевой системы.

Sign up to leave a comment.

Articles