Загрузчик systemd

Материал из ALT Linux Wiki
Для отключения обратного отсчёта выбран пункт не по умолчанию.

Загрузчик systemd (только для UEFI)

Подготовка

Совет: Удостоверьтесь, что раздел ESP существует и смонтирован по маршруту /boot/efi/:
# mount | awk '/\/boot\/efi/{print $1}'
/dev/sdb1
Внимание: Если вывод команды пуст, дальше читать не имеет смысла.

sdb1 — у меня; у вас может быть другой диск и раздел.

Совет: Заранее создайте каталоги для размещения загрузчиков, образов и настроек меню:
# mkdir -p /boot/efi/{altlinux,loader/entries}

Установка

Состоит в:

  • отдаче команды # bootctl install, которая разместит загрузчик systemd по нужному маршруту в разделе ESP (порой приходится добавить опцию с полным маршрутом, но меня это миновало);
  • размещении пар «загрузчик + образ ядра» в произвольном (под)каталоге этого раздела;
  • создании/правке конфигурационных файлов по намертво прибитым маршрутам (см. Настройку).

Настройка

Каждый пункт меню, кроме автоопределяемого загрузчика Windows, настраивается отдельным файлом. В моём случае их два — для прежнего и свежего ядра (маршрут к каталогу именно таков, имена же файлов произвольные; обязательно лишь расширение .conf):

  • /boot/efi/loader/entries/altlinux-5.1.16.conf
title   ALT Linux 5.1.16
linux   /altlinux/vmlinuz-5.1.16-un-def-alt2
initrd   /altlinux/initrd-5.1.16-un-def-alt2.img
  • /boot/efi/loader/entries/altlinux-5.1.17.conf
title   ALT Linux 5.1.17
linux   /altlinux/vmlinuz-5.1.17-un-def-alt1
initrd   /altlinux/initrd-5.1.17-un-def-alt1.img
#options root=/dev/disk/by-label/root rw initrd=\EFI\altlinux\intel-ucode.img

В каждом из них 3 обязательных строки:

  • название пункта — как оно должно выглядеть на экране загрузки,
  • маршрут до загрузчика и
  • маршрут до образа системы.
Примечание: Как видно по второму файлу, допустимо наличие строки опций ядра, которыми можно, к примеру, подгрузить образ с микрокодом процессора (мне пользоваться не доводилось) и пр.

Опции загрузки меняются через файл (маршрут и имя ровно таковы и более никаковы) /boot/efi/loader/loader.conf:

default altlinux-5.1.17
timeout 5
editor  1

Здесь указаны:

  • пункт загрузки по умолчанию (по сути — имя файла с пунктом меню без расширения .conf),
  • секунды предзагрузочной задержки и
  • возможность внесения изменений в выбранный пункт до загрузки (не знаю, у меня не срослось пока — необязательная опция, единичка по умолчанию).

Обновление ядра

После установки нового ядра и сноса старых приходится:

  • удалить из /boot/efi/altlinux/ (или где решите их держать) дезинсталлированные ядра;
  • скопировать туда загрузчик и образ нового ядра — /boot/vmlinuz-<релиз> и /boot/initrd-<релиз>.img;
  • добавить конфиг нового ядра в каталог /boot/efi/loader/entries/, скопировав и изменив или просто изменив (мой случай) конфиг старого, снесённого;
  • нацелив опцию default в файле /boot/efi/loader/loader.conf на конфиг нового ядра, перезагрузиться;
  • при несрабатывании нового пункта загрузить предыдущее ядро и разобраться, где опечатались.

Минусы

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

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

Устранение проблем

Пока только одной — Windows заменяет очередность загрузчиков даже на запароленном UEFI, выставляя себя первой по порядку. Лечится из самой Windows следующей командой от имени админа:

bcdedit /set {bootmgr} path \EFI\systemd\systemd-bootx64.efi

То есть, Windows таки грузится первой системой, однако загрузчика выбирает не собственного, а systemd-шного.

Ссылки

Более подробно можно почитать здесь (наткнулся уже после того, как вышеизложенное было таки вышеизложено :).