systemd-boot (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
systemd-boot
. Дата последней синхронизации: 20 октября 2023. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Процесс загрузки Arch
Secure Boot
Unified Extensible Firmware Interface (Русский)
systemd-boot(7)
(ранее известный как
gummiboot
) — это простой
менеджер загрузки
для
UEFI
. Он предоставляет текстовое меню для выбора загрузочной записи и редактор параметров ядра. Он входит в состав пакета
systemd
.
Имейте в виду, что
systemd-boot
умеет запускать только EFI-приложения (например, ядро Linux через
EFISTUB
,
UEFI Shell
,
GRUB
или
Windows Boot Manager
).
Установка
Установка менеджера загрузки EFI
Перед установкой
systemd-boot
убедитесь, что система загружена в режиме UEFI и что есть доступ к
переменным UEFI
. Это можно проверить командой
efivar --list
или, если
efivar
не установлен, командой
ls /sys/firmware/efi/efivars
(если каталог существует, то система загружена в режиме UEFI).
В примерах ниже
esp
обозначает
точку монтирования системного раздела EFI
, например
/efi
или
/boot
. Также предполагается, что вы выполнили
chroot
в точку монтирования корневого раздела системы.
Используйте команду
bootctl(1)
для установки
systemd-boot
в системный раздел EFI:
# bootctl install
Она скопирует менеджер загрузки EFI
systemd-boot
в ESP, создаст загрузочную запись в UEFI и изменит порядок загрузки.
На x64 UEFI выполняется копирование
/usr/lib/systemd/boot/efi/systemd-bootx64.efi
в
esp
/EFI/systemd/systemd-bootx64.efi
и
esp
/EFI/BOOT/BOOTX64.EFI
.
На IA32 UEFI выполняется копирование
/usr/lib/systemd/boot/efi/systemd-bootia32.efi
в
esp
/EFI/systemd/systemd-bootia32.efi
и
esp
/EFI/BOOT/BOOTIA32.EFI
.
Загрузочная запись UEFI будет иметь название «Linux Boot Manager» и указывать, в зависимости от разрядности UEFI, на файл
\EFI\systemd\systemd-bootx64.efi
или
\EFI\systemd\systemd-bootia32.efi
в ESP.
Примечание
При запуске
bootctl install
systemd-boot
попробует найти системный раздел EFI в
/efi
,
/boot
и
/boot/efi
. Если он примонтирован в другое место, нужно добавить опцию
--esp-path=
esp
(смотрите
bootctl(1) § OPTIONS
).
Установка
systemd-boot
перезапишет существующие файлы
esp
/EFI/BOOT/BOOTX64.EFI
(или
esp
/EFI/BOOT/BOOTIA32.EFI
на IA32 UEFI), в частности, версию файла от Microsoft.
Затем переходите к
настройке
systemd-boot
.
Установка с использованием XBOOTLDR
Для хранения ядра и initramfs отдельно от ESP можно создать отдельный
раздел /boot
типа «Linux extended boot» (XBOOTLDR). Это особенно удобно при
двойной загрузке с Windows
, когда уже имеющийся ESP слишком маленький.
Подготовьте ESP как обычно и создайте на том же физическом диске ещё один раздел для XBOOTLDR. Он должен иметь GUID типа раздела
bc13c2ff-59e6-4262-a352-b275fd6f7172
[1]
. Размер раздела XBOOTLDR должен быть достаточно большим для размещения всех устанавливаемых ядер.
Примечание
systemd-boot
не выполняет проверку файловой системы, как это делается для ESP. Таким образом, можно использовать любую файловую систему, которую может прочитать ваша реализация UEFI.
При включении быстрой загрузки («fast boot») UEFI может пропустить загрузку разделов, отличных от ESP. Это может привести к тому, что
systemd-boot
не сможет найти загрузочные записи на разделе XBOOTLDR; в этом случае отключите режим быстрой загрузки.
Раздел XBOOTLDR должен находиться на том же физическом диске, что и ESP, чтобы
systemd-boot
мог его найти.
В процессе установки примонтируйте ESP в
/mnt/efi
и XBOOTLDR в
/mnt/boot
.
На этапе chroot используйте команду:
# bootctl --esp-path=/efi --boot-path=/boot install
Затем переходите к
настройке
systemd-boot
.
Обновление менеджера загрузки EFI
При выходе новой версии
systemd-boot
менеджер загрузки EFI можно по желанию переустановить. Это можно сделать вручную или автоматически; ниже описаны оба способа.
Примечание
Менеджер загрузки EFI — это отдельный исполняемый файл EFI, и для загрузки системы можно использовать любую версию (частичные обновления тут ни при чём, потому что pacman устанавливает только программу установки
systemd-boot
, а не сам
systemd-boot
). Однако новые версии могут добавлять новые возможности или исправлять ошибки, поэтому, вероятно, обновить
systemd-boot
это хорошая идея.
Вручную
Используйте команду
bootctl
для обновления
systemd-boot
:
# bootctl update
Примечание
Как и в случае с
bootctl install
,
systemd-boot
попробует найти системный раздел EFI в
/efi
,
/boot
и
/boot/efi
. Если он примонтирован в другое место, нужно добавить опцию
--esp-path=
esp
.
Автоматически
Для автоматического обновления
systemd-boot
можно использовать
службу systemd
или
хук pacman
.
Служба systemd
Начиная с версии 250,
systemd
предоставляет юнит
systemd-boot-update.service
.
Включите
его, чтобы при следующей загрузке выполнилось обновление загрузчика.
Важно
При включенном
Secure Boot
нужно подписать загрузчик перед обновлением. Пример есть в разделе
#Хук pacman
.
Совет
bootctl install
и
bootctl update
ищут загрузчик в каталоге
/usr/lib/systemd/boot/efi/
, и файлы
.efi.signed
имеют более высокий приоритет, чем обычные файлы
.efi
. Если там есть
.efi.signed
загрузчик, то
systemd-boot-update.service
сможет выполнить обновление без обращения к инструментам подписи Secure Boot. Смотрите также
bootctl(1) § SIGNED .EFI FILES
.
Хук pacman
Пакет
systemd-boot-pacman-hook
AUR
предоставляет
хук pacman
, который будет выполняться при каждом обновлении пакета
systemd
.
В качестве альтернативы, вы можете разместить следующий pacman hook в каталоге /etc/pacman.d/hooks/:
/etc/pacman.d/hooks/95-systemd-boot.hook
[Trigger]
Type = Package
Operation = Upgrade
Target = systemd

[Action]
Description = Gracefully upgrading systemd-boot...
When = PostTransaction
Exec = /usr/bin/systemctl restart systemd-boot-update.service
При включенном
Secure Boot
стоит добавить ещё один хук, который автоматически подпишет загрузчик при обновлении пакета:
/etc/pacman.d/hooks/80-secureboot.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Path
Target = usr/lib/systemd/boot/efi/systemd-boot*.efi

[Action]
Description = Signing systemd-boot EFI binary for Secure Boot
When = PostTransaction
Exec = /bin/sh -c 'while read -r i; do sbsign --key
/путь/к/keyfile.key
--cert
/путь/к/certificate.crt
"$i"; done;'
Depends = sh
Depends = sbsigntools
NeedsTargets
Замените
/путь/к/keyfile.key
и
/путь/к/certificate.crt
на ваши ключ подписи и сертификат соответственно. Для лучшего понимания, как работает этот хук, можно почитать
sbsign(1)
.
Совет
Если вы используете
sbctl
, то переподпись файлов, добавленных в его базу данных, происходит автоматически с помощью хука
/usr/share/libalpm/hooks/zz-sbctl.hook
. Не забудьте сначала добавить в базу файлы, необходимые для вашей цепочки загрузки.
Настройка
Настройка загрузчика
Базовая конфигурация хранится в файле
esp
/loader/loader.conf
. Полный список опций описан в
loader.conf(5) § OPTIONS
. Некоторые важные опции:
default
– выбираемая по умолчанию запись; можно использовать подстановку, например
arch-*
timeout
– задержка меню в секундах. При значении
menu-hidden
или
0
(по умолчанию) меню будет скрыто.
console-mode
— разрешение экрана в консоли. Значение
keep
(по умолчанию) оставляет то разрешение, которое было выбрано прошивкой. Значение
max
выбирает максимальный доступный режим.
editor
— включение редактора параметров ядра. Значение
yes
(по умолчанию) — включить,
no
— отключить. Если к машине имеют физический доступ недоверенные пользователи, редактор лучше отключить (иначе они смогут обойти проверки доступа, например, добавив
init=/bin/bash
в параметры ядра).
Пример:
esp
/loader/loader.conf
default  arch.conf
timeout  4
console-mode max
editor   no
Совет
Используйте пробелы; systemd-boot не поддерживает символы табуляции.
Опции
default
и
timeout
могут быть изменены в само́м меню загрузки, эти изменения будут храниться как переменные EFI
LoaderEntryDefault
и
LoaderConfigTimeout
, переопределяя настройки из файла конфигурации.
Можно использовать
bootctl set-default ""
и
bootctl set-timeout ""
для сброса переменных EFI, переопределяющих опции
default
и
timeout
соответственно.
Если вы указали
timeout 0
, вы можете получить доступ к меню, удерживая клавишу
Space
.
Пример базового конфигурационного файла расположен как
/usr/share/systemd/bootctl/loader.conf
.
Если в загрузчике (во время выбора загрузочной записи) появляются искажения/используется неправильное разрешение, попробуйте установить
console-mode
в
auto
(использует эвристику для выбора оптимального разрешения),
keep
(сохраняет разрешение, предоставленное прошивкой) или
2
(пытается выбрать первое нестандартное для UEFI разрешение).
Добавление загрузочных записей
systemd-boot
ищет элементы для загрузочного меню в
esp
/loader/entries/*.conf
, а при использовании
XBOOTLDR
— также в
boot
/loader/entries/*.conf
. Имейте в виду, что записи в
esp
могут использовать только файлы (ядра, initramfs и т. п.) только из
esp
. Аналогично, записи из раздела
boot
могут использовать только файлы из
boot
.
Возможными опциями являются:
title
– название операционной системы.
Обязательная.
version
– версия ядра, отображаемая только если существуют несколько записей с одинаковым названием. Не обязательная.
machine-id
– идентификатор машины из
/etc/machine-id
, отображаемый только если существуют несколько записей с одинаковым названием и одинаковой версией. Не обязательная.
efi
– EFI-приложение для запуска, путь относительно
esp
; например,
/vmlinuz-linux
. Либо это, либо
linux
(смотрите ниже) является
обязательным.
options
– опции командной строки для передачи в EFI приложение или
параметры ядра
. Не обязательная, но вам нужно будет передать как минимум
root=
dev
rw
для загрузки Linux, где
dev
— блочное устройство, содержащее корневую файловую систему (смотрите
Постоянные имена для блочных устройств#Параметры ядра
). Эту опцию можно опустить, если корневому разделу присвоен правильный Root Partition Type GUID, как определено в
Discoverable Partitions Specification
, и если используется
mkinitcpio
-хук
systemd
.
Для загрузки Linux можно вместо опции
efi
использовать опцию
linux
. Или
initrd
в дополнение к
options
. Синтаксис такой:
linux
или
initrd
, за которыми следует относительный путь к соответствующим файлам в ESP; например,
/vmlinuz-linux
; это будет автоматически преобразовано в
efi
путь
и
options initrd=
путь
— данный синтаксис поддерживается только для удобства и не имеет отличий в работе.
Примечание
При включенном
Secure Boot
и использовании
unified kernel image
с встроенным в него
.cmdline
переданные из загрузчика параметры ядра будут игнорироваться. Если
Secure Boot
отключен, то параметры загрузчика переопределят параметры из встроенного
.cmdline
.
Пример файлов, запускающих Arch из тома с
меткой
Arch OS
и загружающих
микрокод
процессора Intel:
esp
/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root="LABEL=
Arch OS
" rw
esp
/loader/entries/arch-fallback.conf
title   Arch Linux (fallback initramfs)
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux-fallback.img
options root="LABEL=
Arch OS
" rw
systemd-boot
при загрузке автоматически проверяет наличие
Windows Boot Manager
в
/EFI/Microsoft/Boot/Bootmgfw.efi
,
UEFI Shell
в
/shellx64.efi
и
EFI Default Loader
в
/EFI/BOOT/bootx64.efi
, а также специально подготовленных файлов ядра, находящихся в
/EFI/Linux/
. При их обнаружении будут сгенерированы записи с названиями
auto-windows
,
auto-efi-shell
и
auto-efi-default
соответственно. Эти записи не требуют ручной настройки загрузчика. Однако автоопределение других EFI-приложений не выполняется (в отличие от
rEFInd
), поэтому для загрузки ядра Linux необходимо создать загрузочные записи вручную.
Совет
Доступные загрузочные записи, которые были настроены, можно посмотреть с помощью команды
bootctl list
.
Пример файла есть в
/usr/share/systemd/bootctl/arch.conf
.
Необходимые
параметры ядра
при использовании
LVM
,
dm-crypt
или
Btrfs
описаны в соответствующих статьях.
EFI Shell или другие EFI-приложения
Если вы установили
UEFI Shell
с помощью пакета
edk2-shell
,
systemd-boot
автоматически найдёт его и добавит загрузочную запись, если есть файл в
esp
/shellx64.efi
.
Для этого можно сделать так:
# cp /usr/share/edk2-shell/x64/Shell.efi /boot/shellx64.efi
Если вы установили
другие EFI-приложения
в ESP, можно создать для них загрузочные записи, подобные приведённым ниже.
Примечание
Путь в опции
efi
задаётся относительно точки монтирования
esp
. Например, если ESP примонтирован в
/boot
и EFI-приложения находятся по адресам
/boot/EFI/xx.efi
и
/boot/yy.efi
, то вы должны указать опции
efi /EFI/xx.efi
and
efi /yy.efi
соответственно.
esp
/loader/entries/fwupd.conf
title  Firmware updator
efi     /EFI/tools/fwupdx64.efi
esp
/loader/entries/gdisk.conf
title  GPT fdisk (gdisk)
efi     /EFI/tools/gdisk_x64.efi
Загрузка с другого диска
systemd-boot
не может запускать исполняемые файлы с разделов, отличных от ESP или XBOOTLDR, но может запустить для этого внешний скрипт.
Сначала установите
edk2-shell
(будет использоваться как интерпретатор). Также нужен PARTUUID раздела, на котором находится целевой EFI-файл, который можно получить с помощью команды
blkid
. Используя EFI Shell (как описано выше), мы можем с помощью команды
map
узнать
FS alias
(например: HD0a66666a2) и полный путь к целевому EFI-файлу (например: EFI\Microsoft\Boot\Bootmgfw.efi). FS alias соответствует PARTUUID раздела, в котором находится целевой EFI-файл.
Затем с помощью команды
exit
мы можем загрузиться обратно в Linux, где создадим новую запись.
Для этого необходимо сначала создать в корне
esp
файл с расширением
.nsh
, содержащий FS alias, двоеточие и путь к EFI-файлу, например:
esp
/windows.nsh
HD0a66666a2:EFI\Microsoft\Boot\Bootmgfw.efi
После создания файла можно создать загрузочную запись, запускающую скрипт:
esp
/loader/entries/windows.conf
title  Windows
efi     /shellx64.efi
options -nointerrupt -noconsolein -noconsoleout windows.nsh
Важно, чтобы путь к
efi
совпадал с местом, куда был скопирован edk2-shell на
esp
, а последний аргумент в options совпадал с именем файла
.nsh
в корне
esp
. Также обратите внимание, что EFI-файл edk2-shell можно переместить в другое место, чтобы избежать автоматического создания загрузочной записи.
Загрузка в настройки EFI
systemd-boot
автоматически добавит запись UEFI Firmware Setup, если прошивка вашего устройства поддерживает перезагрузку в настройки EFI.
Поддержка спящего режима
Смотрите статью
Ждущий и спящий режимы
.
Редактор параметров ядра с защитой паролем
В качестве альтернативы можете установить
systemd-boot-password
AUR
который поддерживает
password
опцию базовой конфигурации. Используйте
sbpctl generate
для генерации значения для этой опции.
Установка
systemd-boot-password
следующей командой:
# sbpctl install
esp
С включенным редактором будет запрошен ваш пароль, перед тем как вы сможете редактировать параметры ядра.
Советы и рекомендации
Клавиши в меню загрузки
Находясь в меню, вы можете использовать клавиши
t
и
T
для настройки таймаута меню и
e
для редактирования параметров ядра для выбранной загрузочной записи. Нажатие
h
покажет краткий список полезных горячих клавиш. Полный список доступных в меню сочетаний клавиш приведён в
systemd-boot(7) § KEY BINDINGS
.
Выбор записи для следующей загрузки
Менеджер загрузки интегрирован с командой
systemctl
, что позволяет выбрать, какой вариант загрузки будет использоваться после перезагрузки. Например, если вы собрали своё ядро и создали загрузочную запись
esp
/loader/entries/arch-custom.conf
, для её загрузки можно просто выполнить:
$ systemctl reboot --boot-loader-entry=arch-custom.conf
и система перезагрузится с использованием указанной записи, но не изменит опцию по умолчанию для последующих загрузок. Для просмотра списка возможных вариантов используйте опцию
--boot-loader-entry=help
.
Для перезагрузки в настройки прошивки используйте команду:
$ systemctl reboot --firmware-setup
Unified kernel image
systemd-boot
автоматически находит
Unified kernel image
в каталоге
esp
/EFI/Linux/
и добавляет для них загрузочные записи, поэтому создавать их вручную в
esp
/loader/entries/
не нужно. (Обратите внимание, что образы должны иметь расширение
.efi
, чтобы
systemd-boot
их распознал.)
Совет
Файлы в
esp
/loader/entries/
будут загружаться первыми, если в
esp
/loader/loader.conf
не задана опция
default
. Удалите эти записи или укажите значение по умолчанию с полным именем файла, то есть
default arch-linux.efi
Grml на ESP
Примечание
Приведённые ниже инструкции не специфичны для Grml. С небольшими правками возможна установка и других программ (например,
SystemRescueCD
).
Совет
Доступен
PKGBUILD
:
grml-systemd-boot
AUR
.
Grml
— это небольшая live-система с набором программ для системного администрирования и восстановления.
Для установки Grml на ESP достаточно скопировать ядро
vmlinuz
, initramfs
initrd.img
и образ
grml64-small.squashfs
из файла iso в ESP. Для этого сначала скачайте
grml64-small.iso
и смонтируйте его (здесь точка монтирования обозначается как
mnt
); ядро и initramfs находятся в каталоге
mnt
/boot/grml64small/
, а образ — в каталоге
mnt
/live/grml64-small/
.
Далее создайте в ESP каталог для Grml:
# mkdir -p
esp
/grml
И скопируйте в него вышеупомянутые файлы:
# cp
mnt
/boot/grml64small/vmlinuz
esp
/grml
# cp
mnt
/boot/grml64small/initrd.img
esp
/grml
# cp
mnt
/live/grml64-small/grml64-small.squashfs
esp
/grml
Затем создайте загрузочную запись для
systemd-boot
:
esp
/loader/entries/grml.conf
title   Grml Live Linux
linux   /grml/vmlinuz
initrd  /grml/initrd.img
options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0
Список доступных опций можно посмотреть здесь:
cheatcode for Grml
[
устаревшая ссылка
2025-08-16 ⓘ]
.
systemd-boot на системах BIOS
Если вам нужен загрузчик для BIOS-систем, соответствующий
The Boot Loader Specification
, то можно использовать
systemd-boot
. Загрузчик
Clover
поддерживает загрузку в режиме BIOS и имитирует среду EFI.
Решение проблем
Установка после загрузки в режиме BIOS
Примечание
Это нерекомендованный процесс.
Вы с таким же успехом можете установить systemd-boot, если загружаетесь в режиме BIOS. Тем не менее, от вас всё равно требуется сообщить прошивке запускать EFI файл
systemd-boot
при загрузке:
у вас есть работающий EFI shell где-нибудь.
ваш интерфейс прошивки предоставляет вам соответствующий способ настройки EFI файла, который будет загружен во время загрузки.
Если вы имеете такую возможность, процесс установки будет проще: перейдите в ваш EFI shell или интерфейс настройки вашей прошивки и измените EFI файл по умолчанию вашей машины на
esp/EFI/systemd/systemd-bootx64.efi
( или
systemd-bootia32.efi
если у вас 32 битная системная прошивка).
Примечание
интерфейс прошивки в Dell Latitude сериях предоставляет все необходимое, чтобы установить EFI загрузку, но EFI Shell не сможет осуществить запись в ПЗУ компьютера.
Создание записи вручную с помощью efibootmgr
Если команда
bootctl install
не сработала, вы можете создать загрузочную запись EFI самостоятельно с помощью утилиты
efibootmgr
:
# efibootmgr --create --disk /dev/sd
X
--part
Y
--loader "\EFI\systemd\systemd-bootx64.efi" --label "Linux Boot Manager" --unicode
где
/dev/sd
XY
— это
системный раздел EFI
.
Примечание
Путь к EFI-приложению должен использовать обратную косую черту
\
в качестве разделителя.
Создание записи вручную с помощью bcdedit из Windows
Если по какой-то причине нужно создать загрузочную запись EFI из Windows, можно выполнить следующие команды в командной строке, запущенной с правами администратора:
> bcdedit /copy {bootmgr} /d "Linux Boot Manager"
> bcdedit /set {
guid
} path \EFI\systemd\systemd-bootx64.efi
Замените
guid
на id, возвращённый первой командой. Также можно сделать эту запись записью по умолчанию:
> bcdedit /default {
guid
}
Меню не отображается после обновления Windows
Обратитесь к разделу соответствующей статьи:
Unified Extensible Firmware Interface (Русский)#Windows изменяет порядок загрузки
.
Добавление поддержки разблокировки TPM для Windows BitLocker
Чтобы BitLocker перестал запрашивать ключ восстановления, добавьте в файл
loader.conf
:
esp
/loader/loader.conf
reboot-for-bitlocker yes
Это установит UEFI-переменную
BootNext
, благодаря которой
Windows Boot Manager
будет загружаться без необходимости использования ключа восстановления BitLocker. Это однократное изменение, и
systemd-boot
остается загрузчиком по умолчанию. Нет необходимости добавлять загрузочную запись для Windows, если она была определена автоматически.
Это экспериментальная функция, поэтому прочитайте
loader.conf(5)
.
Смотрите также
https://systemd.io/BOOT/
https://github.com/systemd/systemd/tree/master/src/boot/efi
[
устаревшая ссылка
2024-12-15 ⓘ]
https://bbs.archlinux.org/viewtopic.php?id=254374
https://uapi-group.org/specifications/specs/boot_loader_specification/