Загружаем 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 grubby grub2\* shim\* memtest86\*

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

sudo rm -rf /boot/grub2
sudo rm -rf /boot/loader

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

Шаг 4. Настройка точки монтирования

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

sudoedit /etc/fstab

Убедимся, что точка монтирования ESP раздела задана корректно:

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

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

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

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

Шаг 5. Настройка параметров ядра

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

cat /proc/cmdline | cut -d ' ' -f 2- | sudo tee /etc/kernel/cmdline
sudo chmod 644 /etc/kernel/cmdline

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

При необходимости внесём соответствующие правки:

sudoedit /etc/kernel/cmdline

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

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

sudo bootctl --path=/boot/efi install

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

sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

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

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

sudo systemctl reboot

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

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

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

sudoedit /boot/efi/loader/loader.conf

Литература

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

14 комментариев к записи

  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 месяцев.

  2. Сделал все до Шаг 6. Перезагрузка системы включительно. После перезагрузки: mount /new_root no filesystem type specified. You are now being dropped into an emergency shell. sh: can’t access tty; job control turned off [rootfs ]# Что не так?

        1. Нужно указать в файле /etc/kernel/cmdline правильные параметры ядра, например:

          root=UUID=XXXXX-XXX-XXX-XXXXX ro vconsole.font=latarcyrheb-sun16 rhgb quiet

          XXXXX-XXX-XXX-XXXXX — это UUID корневого раздела с Fedora.

          1. В общем разобрался, что нужно вручную создать entries и редактировать конфиг

        1. У вас UEFI Secure Boot отключён? Он не будет работать без подписывания systemd-boot модуля собственным удостоверяющим центром.

  3. У меня в папке boot создается папка с различным набором символов в нутри которой папка с названием ядра. Так и должно быть?

    1. Да, это нормально. Случайный набор символов — это уникальный ID компьютера, присвоенный systemd.

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

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