systemd-boot (Русский)
systemd-boot, ранее известный как gummiboot - это простой UEFI менеджер загрузки, который исполняет настроенные EFI образы. Запись по умолчанию выбирается с помощью настроенного шаблона (glob) или меню на экране. Включен в пакет systemd, который устанавливается на системе Arch по умолчанию.
Прост в настройке, но способен только на запуск исполняемых EFI файлов, таких как ядро Linux EFISTUB, UEFI Shell, GRUB, Windows Boot Manager.
Установка
Загрузка в режиме EFI
- Убедитесь, что вы загружены в режиме UEFI.
- Проверьте доступны ли EFI переменные.
- Корректно примонтируйте Системный Раздел EFI (ESP). В этой статье
esp
используется для обозначения точки монтирования.Примечание: systemd-boot EFI не может загружать бинарные файлы из других разделов. По этой причине, рекомендуется монтировать ваш ESP в/boot
. В случае, если вы хотите разделить/boot
с ESP, обратитесь к #Обновлениe для большей информации. - Если ESP не примонтирован к
/boot
, копируйте ваше ядро и initramfs в ESP.Примечание: Чтобы сохранить автоматическое обновление ядра в ESP, взгляните на EFI system partition#Using systemd для адаптации некоторых юнитов systemd. Если ваш Системный Раздел EFI монтируется автоматически, вам, вероятно, потребуется добавитьvfat
в файл внутри/etc/modules-load.d/
. Тогда в текущем запущенном ядре во время загрузки будет установлен модульvfat
, до того, как произойдет обновление ядра, которое может заменить модуль для текущей версии, что сделает невозможным монтирование/boot/efi
до перезагрузки. - Введите следующую команду для установки systemd-boot:
# bootctl --path=esp install
Она скопирует двоичный файл systemd-boot на Системный Раздел EFI (esp/EFI/systemd/systemd-bootx64.efi
иesp/EFI/Boot/BOOTX64.EFI
- оба идентичны на x86-64 системах) и добавит systemd-boot как EFI приложение по умолчанию (загрузочная запись по умолчанию), загружаемое с помощью EFI Boot Manager. - Наконец, для правильного функционирования вы должны настроить загрузчик.
Загрузка в режиме BIOS
Вы с таким же успехом можете установить systemd-boot, если загружаетесь в режиме BIOS. Тем не менее, от вас всё равно требуется сообщить прошивке запускать EFI файл systemd-boot при загрузке:
- у вас есть работающий EFI shell где-нибудь.
- ваш интерфейс прошивки предоставляет вам соответствующий способ настройки EFI файла, который будет загружен во время загрузки.
Если вы имеете такую возможность, процесс установки будет проще: перейдите в ваш EFI shell или интерфейс настройки вашей прошивки и измените EFI файл по умолчанию вашей машины на esp/EFI/systemd/systemd-bootx64.efi
( или systemd-bootia32.efi
если у вас 32 битная системная прошивка).
Обновлениe
В отличие от предыдущего отдельного пакета gummiboot, который автоматически обновляется с помощью post_install
скрипта, обновления systemd-boot теперь должны производиться пользователем вручную. Однако, эта процедура может быть автоматизирована с использованием pacman hooks.
Вручную
systemd-boot (bootctl(1)) предполагает, что ваш Системный Раздел EFI примонтирован в /boot
.
# bootctl update
Если ESP не примонтирован в /boot
, опцией --path=
можно явно указать точку монтирования, например:
# bootctl --path=esp update
bootctl --path=esp install
.Автоматически
AUR (Русский) пакет systemd-boot-pacman-hookAUR предоставляет хук Pacman для автоматизации процесса обновления. Установка этого пакета добавит hook, который будет выполняться при каждом обновлении пакета systemd.
В качестве альтернативы, вы можете разместить следующий pacman hook в каталоге /etc/pacman.d/hooks/:
/etc/pacman.d/hooks/systemd-boot.hook
[Trigger] Type = Package Operation = Upgrade Target = systemd [Action] Description = Updating systemd-boot... When = PostTransaction Exec = /usr/bin/bootctl update
Настройка
Базовая настройка
Базовая конфигурация хранится в файле esp/loader/loader.conf
. Полный список опций описан в loader.conf(5) § OPTIONS. Некоторые важные опции:
-
default
– выбираемая по умолчанию запись; можно использовать подстановку, напримерarch-*
-
timeout
– задержка меню в секундах. Если таймаут не задан, то меню будет отображаться, только если удерживать клавишуSpace
(другие клавиши тоже могут работать) при загрузке.
-
console-mode
— разрешение экрана в консоли. Значениеkeep
(по умолчанию) оставляет то разрешение, которое было выбрано прошивкой. Значениеmax
выбирает максимальный доступный режим.
-
editor
- следует ли включить редактор параметров ядра.yes
(по умолчанию) - включить,no
- отключить; Поскольку пользователь может добавитьinit=/bin/bash
для обхода пароля администратора и получить полный доступ, настоятельно рекомендуется установить эту опцию вno
.
Пример:
esp/loader/loader.conf
default arch.conf timeout 4 console-mode max editor no
- Используйте пробелы; systemd-boot не поддерживает символы табуляции.
- Опции
default
иtimeout
могут быть изменены в самом меню загрузки, эти изменения будут храниться как переменные EFILoaderEntryDefault
иLoaderConfigTimeout
, переопределяя настройки из файла конфигурации. - Можно использовать
bootctl set-default ""
для сброса переменной EFI, переопределяющей опциюdefault
. - Пример базового конфигурационного файла расположен как
/usr/share/systemd/bootctl/loader.conf
.
Добавление загрузочных записей
-
bootctl будет автоматически проверять наличие "Windows Boot Manager" (
\EFI\Microsoft\Boot\Bootmgfw.efi
), "EFI Shell" (\shellx64.efi
) и "EFI Default Loader" (\EFI\Boot\bootx64.efi
) во время загрузки, так же как специально подготовленные файлы ядра, найденные в\EFI\Linux
. После обнаружения соответствующие записи с заголовкамиauto-windows
,auto-efi-shell
иauto-efi-default
будут автоматически сгенерированы. Эти записи не требуют ручной настройки загрузчика. Однако, другие EFI приложения не будут обнаружены автоматически (не в случае с rEFInd (Русский)), поэтому для зарузки ядра Linux, записи должны быть созданы вручную. - Если вы используете двойную загрузку с Windows, настоятельно рекомендуется отключить Быстрый запуск
- Не забудте загрузить intel microcode с
initrd
если это применимо в вашем случае. - Вы можете узнать PARTUUID вашего корневого раздела с помощью команды
blkid -s PARTUUID -o value /dev/sdxY
, гдеx
- это буква устройства, аY
- это номер раздела. Это нужно только для вашего корневого раздела, не дляesp
.
bootctl ищет элементы для загрузочного меню в esp/loader/entries/*.conf
– каждый найденный файл должен содержать точно одну загрузочную запись. Возможными опциями являются:
-
title
– название операционной системы. Обязательная.
-
version
– версия ядра, отображаемая только если существуют несколько записей с одинаковым названием. Не обязательная.
-
machine-id
– идентификатор машины из/etc/machine-id
, отображаемый только если существуют несколько записей с одинаковым названием и одинаковой версией. Не обязательная.
-
efi
– EFI программа для запуска, относительно вашего ESP ($esp
); например,/vmlinuz-linux
. Либо это, либоlinux
(смотрите ниже) является обязательным.
-
options
– опции командной строки для передачи EFI приложению. Не обязательная, но вам нужно будет передать как минимумinitrd=efipath
иroot=dev
если загружаете Linux.
Для Linux вы можете задать linux path-to-vmlinuz
и initrd path-to-initramfs
; это автоматически преобразуется в efi path
и options initrd=path
– этот синтаксис поддерживается только для удобства и не имеет различий по функциональности.
Установки со стандартной корневой директорией
Вот пример записи для корневого раздела без LVM или LUKS:
esp/loader/entries/arch.conf
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw
Пожалуйста, обратите внимание, что в вышеприведённом примере PARTUUID
/PARTLABEL
идентифицируют GPT раздел, а это не то же самое, что UUID
/LABEL
, которые идентифицируют файловую систему. Использование PARTUUID
/PARTLABEL
бывает полезным, потому что они инвариантны (то есть неизменяемы), если вы переформатируете раздел в другую файловую систему или если по какой-то причине изменятся обозначения /dev/sd*. Также оно может быть полезно, если у вас нет файловой системы на разделе (или вы используете LUKS, который не поддерживает метки LABEL
).
/usr/share/systemd/bootctl
.Установки с LVM корневой директорией
/boot
вне LVM.Следующий пример для корневой директории с использованием логического менеджера разделов:
esp/loader/entries/arch-lvm.conf
title Arch Linux (LVM) linux /vmlinuz-linux initrd /initramfs-linux.img options root=/dev/mapper/<VolumeGroup-LogicalVolume> rw
Замените <VolumeGroup-LogicalVolume>
на актуальные названия VG и LV (например, root=/dev/mapper/volgroup00-lvolroot
). Кроме того, вместо них можно использовать UUID:
.... options root=UUID=<UUID identifier> rw
Обратите внимание, что root=UUID=
используется вместо root=PARTUUID=
, который используется для корневых разделов без LVM или LUKS.
Установки с зашифрованной корневой директорией
Ниже приведен пример конфигурационного файла для зашифрованного корневого раздела (DM-Crypt / LUKS) с использованием encrypt
mkinitcpio (Русский) hook:
esp/loader/entries/arch-encrypted.conf
title Arch Linux Encrypted linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:<mapped-name> root=/dev/mapper/<mapped-name> quiet rw
В этом примере используется UUID; если хотите, можете заменить UUID на PARTUUID
. Вы можете также заменить /dev
путь на регулярный UUID. mapped-name
- название, которое вы желаете использовать. Смотрите Dm-crypt/System configuration#Boot loader.
Если вы используете LVM, ваша опция cryptdevice будет выглядеть следующим образом:
esp/loader/entries/arch-encrypted-lvm.conf
title Arch Linux Encrypted LVM linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:MyVolGroup root=/dev/mapper/MyVolGroup-MyVolRoot quiet rw
Вы также можете добавить другие EFI приложения, такие как \EFI\arch\grub.efi
.
Установка корневого подраздела btrfs
При загрузке с подраздела Btrfs (Русский) в роли корневого, добавьте к строке options
rootflags=subvol=<root subvolume>
. В примере ниже, корневой раздел монтируется как btrfs подраздел с именем 'ROOT' (например, mount -o subvol=ROOT /dev/sdxY /mnt
):
esp/loader/entries/arch-btrfs-subvol.conf
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw rootflags=subvol=ROOT
Если это невозможно сделать, то это приведет к ошибке: ERROR: Root device mounted successfully, but /sbin/init does not exist.
Установки с ZFS корневой директорией
В случае загрузки из ZFS dataset, добавьте zfs=<root dataset>
к строке options
. Здесь в корневом dataset установлено значение 'zroot/ROOT/default':
esp/loader/entries/arch-zfs.conf
title Arch Linux ZFS linux /vmlinuz-linux initrd /initramfs-linux.img options zfs=zroot/ROOT/default rw
When booting off of a ZFS dataset ensure that it has had the bootfs
property set with zpool set bootfs=<root dataset> <zpool>
.
EFI Shells или другие EFI приложения
В случае, если вы установили EFI Shells или другие EFI приложения в ESP, вы можете использовать следующие фрагменты:
esp/loader/entries/uefi-shell-v1-x86_64.conf
title UEFI Shell x86_64 v1 efi /EFI/shellx64_v1.efi
esp/loader/entries/uefi-shell-v2-x86_64.conf
title UEFI Shell x86_64 v2 efi /EFI/shellx64_v2.efi
Поддержка гибернации
Пожалуйста, прочтите статью Power management/Suspend and hibernate (Русский).
Редактор параметров ядра с защитой паролем
В качестве альтернативы можете установить systemd-boot-passwordAUR который поддерживает password
опцию базовой конфигурации. Используйте sbpctl generate
для генерации значения для этой опции.
Установка systemd-boot-password следующей командой:
# sbpctl install esp
С включенным редактором будет запрошен ваш пароль, перед тем как вы сможете редактировать параметры ядра.
Клавиши в загрузочном меню
В меню используются следующие клавиши:
-
Вверх/Вниз
- выбор записи -
Enter
- загрузить выбранную запись -
d
- выбрать загрузочную запись по умолчанию (хранится в энергонезависимой EFI переменной) -
-/T
- уменьшить таймаут (хранится в энергонезависимой EFI переменной) -
+/t
- увеличить таймаут (хранится в энергонезависимой EFI переменной) -
e
- редактировать командную строку ядра. Не имеет эффекта, если опция конфигурацииeditor
установлена в0
. -
v
- показать версию gummiboot и UEFI -
Q
- выйти -
P
- отобразить текущую конфигурацию -
h/?
- помощь
А эти клавиши, нажатые в меню в процессе загрузки, сразу загрузят определённую запись:
-
l
- Linux -
w
- Windows -
a
- OS X -
s
- EFI Shell -
1-9
- порядковый номер записи
Решение проблем
Создание записи вручную с помощью efibootmgr
Если команда bootctl install
не сработала, вы можете создать загрузочную EFI запись самостоятельно с помощью утилиты efibootmgr
:
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Linux Boot Manager"
где /dev/sdXY
- это ваш EFISYS раздел.
Меню не отображается после обновления Windows
Обратитесь к разделу соответствующей статьи: Unified Extensible Firmware Interface#Windows changes boot order.