Загружаем Fedora при помощи systemd-boot

В настоящее время для запуска большинства популярных дистрибутивов GNU/Linux применяется загрузчик Grub 2, однако это далеко не лучший вариант. В данной статье мы рассмотрим, как можно запускать ядра Linux напрямую при помощи EFIStub, а в качестве менеджера использовать systemd-boot.

Предупреждение

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

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

Если вас полностью устраивает стандартный загрузчик Grub 2, то переходить на описанный в данной статье вариант не следует.

Введение

Все современные материнские платы поддерживают технологию загрузки UEFI Boot, а ядра Linux способны загружаться через EFIStub, поэтому необходимость в отдельном загрузчике теперь отсутствует.

К сожалению, напрямую работать с EFIStub ядрами достаточно сложно и неудобно, а также часто может приводить к возникновению различных проблем из-за отсутствия автоматизации, поэтому мы воспользуемся специально созданным для этой цели менеджером systemd-boot.

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

Шаг 1. Проверка конфигурации системы

Убедимся, что система установлена и загружена в UEFI режиме:

test -d /sys/firmware/efi && echo EFI || echo Legacy

Если ответ EFI, то проверим, чтобы диск, на котором установлена система, использовал GPT разметку (тип метки диска: gpt):

sudo fdisk -l /dev/sda

Если же ответы были Legacy или msdos, то на этом следует прекратить ибо система не поддерживает UEFI загрузку.

Т.к. systemd-boot не подписан цифровой подписью, зайдём в настройки UEFI Boot и полностью отключим технологию Secure Boot.

Шаг 2. Изменение конфигурации разделов

На данный момент systemd-boot умеет загружать лишь ядра, расположенные внутри служебного UEFI раздела (далее ESP), поэтому его размер должен быть не меньше 512 МБ (по умолчанию создаётся 200 МБ).

Воспользуемся утилитой GParted или любой другой для изменения размера раздела ESP до 512 МБ за счёт любого другого.

По стандарту данный раздел должен быть первым на диске с GPT разметкой, иметь файловую систему FAT32 (vfat), а также установленные флаги +boot +efi.

Шаг 3. Удаление Grub 2

Полностью удалим установленный в системе загрузчик Grub 2, предварительный загрузчик shim и не функционирующий в UEFI режиме memtest86+ (экранирование звёздочек символом обратного слэша обязательно):

sudo dnf remove grub2\* shim\* memtest86\*

Очистим остатки Grub 2 (файлы конфигурации, темы):

sudo rm -rf /boot/grub2

Начиная с этого момента и до завершения всего процесса, перезагружать систему не следует ни при каком условии!

Шаг 4. Перемещение ядер в ESP

Переместим всё содержимое каталога /boot в /boot/efi:

cd /boot
sudo mv !(efi) efi

Шаг 5. Изменение точки монтирования

Откроем файл /etc/fstab в текстовом редакторе:

sudoedit /etc/fstab

Изменим точку монтирования ESP раздела с /boot/efi на /boot:

UUID=ABCD-0123 /boot vfat umask=0077,shortname=winnt 0 2

Здесь ABCD-0123 — это UUID, который можно определить при помощи sudo lsblkd.

Убедимся в наличии параметра umask=0077 (при отсутствии зададим), т.к. файловая система FAT32 не поддерживает права доступа и любой пользователь может вносить любые изменения, что для нас не приемлемо.

Сохраним изменения в файле.

Шаг 6. Перемонтирование разделов

Произведём перемонтирование разделов в соответствие с изменениями, произведёнными на предыдущем шаге в файле /etc/fstab:

sudo mount -a

Шаг 7. Установка systemd-boot

Установим systemd-boot в ESP:

sudo bootctl --path=/boot install

Инициируем пересборку initrd ядра, а также сгенерируем новые файлы конфигурации:

sudo kernel-install add 5.1.6-300.fc30.x86_64 /lib/modules/5.1.6-300.fc30.x86_64/vmlinuz

Здесь 5.1.6-300.fc30.x86_64 — версия текущего ядра (автодополнение утилиты kernel-install способно самостоятельно определить его; достаточно лишь нажать клавишу Tab несколько раз до полного заполнения строки).

Шаг 8. Перезагрузка системы

Перезагрузим систему для применения изменений:

sudo systemctl reboot

Если всё было сделано верно, Fedora успешно загрузится при помощи EFIStub под управлением systemd-boot. В противном случае следует восстановить резервную копию, либо воспользоваться chroot с LiveUSB для решения возникших проблем.

Настройка параметров ядра

В данной конфигурации параметры ядра следует указывать в файле /etc/kernel/cmdline в формате обычной строки, разделённые пробелом:

sudo touch /etc/kernel/cmdline
sudo chmod 644 /etc/kernel/cmdline
sudoedit /etc/kernel/cmdline

Для настроек по умолчанию это не требуется. В таком случае будут автоматически использованы параметры загруженного ядра из /proc/cmdline.

Настройка параметров загрузки

Параметры загрузки допускается изменять в файле /boot/loader/loader.conf:

sudoedit /boot/loader/loader.conf

Применим изменения:

sudo bootctl update

Литература

При написании статьи использовалась литература из следующих источников:

4 комментария к записи

  1. Т.к. systemd-boot не подписан цифровой подписью, зайдём в настройки UEFI Boot и полностью отключим технологию Secure Boot.

    Т.е. оно вообще не работает с включенным Secure Boot?

    1. Если подписать systemd-boot собственным удостоверяющим центром (CA), открытый ключ которого загрузить в список доверенных UEFI Secure Boot CA материнской платы, то всё будет работать и с включённым Secure Boot.

    2. Выглядит сложно. Пожалуй останусь на стоковом решении от федоры, а там может сами что-то придумают.

      1. Не думаю, что в ближайшее годы что-то изменится. По крайней мере пока systemd-boot не научится запускать ядра с отдельного /boot раздела.

        Описанный в статье способ работает на моём лэптопе уже более 2 месяцев.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *