User:Volumo/systemd-boot (Русский)
systemd-boot (ранее назывался gummiboot) - это простой UEFI менеджер загрузки, который запускает настроенные EFI образы. Записью по умолчанию является настоенный паттерн (glob) или меню на экране. Включен в systemd с версии systemd 220-2.
Его легко настраивать, но от умеет только запускать исполняемые EFI файлы, ядро Linux EFISTUB, UEFI Shell, grub.efi, Windows Boot Manager и тому подобные.
$esp
.Установка
Загрузка в режиме EFI
- Для начала убедитесь, что вы загружены в режиме UEFI
- Проверьте есть доступ к вашим переменным EFI
- Убедитесь, что ваш Системный Раздел EFI правильно примонтирован.
$esp
используется для обозначения точки монтирования в этой статье.
/boot
. Смотрите #Обновления для более подробной информации или если вы хотите отделить /boot
от ESP.- Скопируйте ваше ядро и initramfs на этот раздел.
- Наконец, введите следующую команду для установки systemd-boot:
# bootctl --path=$esp install
Она скопирует образ systemd-boot на Системный Раздел EFI ($esp/EFI/systemd/systemd-bootx64.efi
и$esp/EFI/Boot/BOOTX64.EFI
- оба идентичны - на x64 системах) и добавьте systemd-boot как приложение EFI для загрузки по умолчанию.
Загрузка в режиме Legacy
Вы с таким же успехом можете установить systemd-boot, если загружаетесь в режиме legacy OS. Тем не менее, от вас всё равно требуется позже сказать прошивке запускать EFI файл systemd-boot'а при загрузке:
- у вас есть работающие EFI shell где-нибудь;
- ваш интерфейс прошивки предоставляет вам способ правильной настройки EFI файла, который будет загружен во время загрузки.
Если вы можете это сделать, то установка проще: перейдите в ваш EFI shell или в ваш интерфейс настройки прошивки и измените EFI файл по умолчанию вашей машины на $esp/EFI/systemd/systemd-bootx64.efi
(systemd-bootia32.efi
на i686 системах).
Обновления
systemd-boot (bootctl(1), systemd-efi-boot-generator(8)) подразумевает, что ваша ESP смонтирована в /boot
.
В отличие от предыдущего пакета gummiboot, который автоматически обновляется с помощью post_install
скрипта, обновления systemd-boot теперь обрабатываются пользователем вручную:
# bootctl update
Если ESP не смонтирован на /boot
, опция --path=
может передать его, например:
# bootctl --path=/boot/$esp update
Настройка
Базовая настройка
Базовая конфигурация хранится в $esp/loader/loader.conf
, в которой доступно всего три опции:
default
– выбираемая по умолчанию запись (без суффикса.conf
); может быть звёздочкой, напримерarch-*
timeout
– задержка меню в секундах. Если таймаут не задан, то меню будет отображаться только если удерживать клавишу пробел при загрузке.
editor
- следует ли включить редактор параметров ядра или нет.1
(по умолчанию) - включить,0
- отключить. Пользователь может добавитьinit=/bin/bash
что-бы обойти пароль администратора и получить полный доступ, поэтому настоятельно рекомендуется установить этот параметр в0
.
Пример:
$esp/loader/loader.conf
default arch timeout 4 editor 0
Обратите внимание, что первые 2 опции могут быть изменены в самом меню загрузки, которое будет хранить их как переменные EFI.
Добавление загрузочных записей
\EFI\Microsoft\Boot\Bootmgfw.efi
), "EFI Shell" (\shellx64.efi
) и "EFI Default Loader" (\EFI\Boot\bootx64.efi
). Для тех, что будут найдены, записи также будут автоматически сгенерированы. Тем не менее, он не будет автоматически искать другие EFI приложения (в отличие от rEFInd (Русский)), поэтому для загрузки ядра записи должны быть созданы вручную. Если вы используете двойную загрузку с Windows, настоятельно рекомендуется отключить Быстрый запуск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, который не поддерживает метки томов).
Установки с 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):
$esp/loader/entries/arch-encrypted.conf
title Arch Linux Encrypted linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:<mapped-name> root=UUID=<luks-UUID> quiet ro
В этом примере используется UUID; если хотите, можете заменить UUID на PARTUUID. Обратите внимание, что <luks-UUID>
обозначает UUID актуальной расшифрованой корневой файловой системы (тот, что находится в /dev/mapper/<mapped-name>
), а не UUID устройства. Смотрите Dm-crypt/System configuration#Boot loader.
Вы также можете добавить другие 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.
EFI Shells или другие EFI приложения
В случае, если вы установили EEFI 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
Дополнительная безопасность
Вы должны знать, что параметры командной строки для ядра могут быть отредактированы с помощью меню загрузки systemd-boot'а (смотрите #Клавиши в загрузочном меню) при нажатии e
. Это главная дыра в безопасности, так как если вы переопределите аргумент ядра init=
, например на init=/bin/bash
, это загрузит вашу машину непосредственно с правами root без каких либо паролей, легко обходя существующий пароль root'а! Поскольку gummiboot в настоящий момент не имеет функциии защиты паролем и не имеет возможности предотвратить изменения параметров ядра, вы должны убедиться в том, что вы задали пароль на аппаратном уровне (UEFI/BIOS), который предотвратит загрузку компьютера до того, как введён правильный пароль.
Поскольку безопасность состоит из нескольких уровней, а физический доступ сразу же обходит любые системы безопасности, возможно вам пригодится шифрование вашего диска с помощью dm-crypt, особенно если ваша машина является ноутбуком. Однако, это уже другой вопрос, не относящийся к systemd-boot.
Поддержка гибернации
Пожалуйста, прочтите статью Suspend and hibernate.
Клавиши в загрузочном меню
В меню используются следующие клавиши:
Вверх/Вниз
- выбор записиEnter
- загрузить выбранную записьd
- выбрать загрузочную запись по умолчанию (хранится в энергонезависимой EFI переменной)-/T
- уменьшить таймаут (хранится в энергонезависимой EFI переменной)+/t
- увеличить таймаут (хранится в энергонезависимой EFI переменной)e
- редактировать командную строку ядраv
- показать версию gummiboot и UEFIQ
- выйтиP
- отобразить текущую конфигурациюh/?
- помощь
А эти клавиши, нажатые в меню в процессе загрузки, сразу загрузят определённую запись:
l
- Linuxw
- Windowsa
- OS Xs
- EFI Shell1-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
Допустим, если вы обновились с Windows 8 до Windows 8.1 и вы больше не видите загрузочного меню после этого обновления, (то есть сразу грузится Windows):
- Убедитесь, что как Secure Boot (настраивается в UEFI), так и Fast Startup (настраивается в опциях питания в Windows) отключены.
- Убедитесь, что в вашем UEFI Linux Boot Manager первичнее, чем Windows Boot Manager (настраивается в UEFI настройках, таких как Hard Disk Drive Priority).
Для того, чтобы Windows 8.X не изменяли порядок загрузки, вы должны настроить групповые политики для Windows и выполнить скрипт (.bat) при запуске. В Windows:
- Откройте командную строку с правами администратора. Выполните
bcdedit /enum firmware
- Найдите приложение, в котором в описании "Linux", например "Linux Boot Manager"
- Скопируйте ID, включая скобки, например
{31d0d5f4-22ad-11e5-b30b-806e6f6e6963}
. - Создайте bat-файл (например,
bootorder.bat
) со следующим содержанием:bcdedit /set {fwbootmgr} DEFAULT {скопированный_ID}
(например,bcdedit /set {fwbootmgr} DEFAULT {31d0d5f4-22ad-11e5-b30b-806e6f6e6963}
). - Откройте gpedit и в Local Computer Policy > Computer Configuration > Windows Settings > Scripts(Startup/Shutdown), выберите Startup. Должно открыться окно с заголовком Startup Properties.
- Во вкладке Scripts, нажмите кнопку Add
- Нажмите Browse и выберите созданный bat-файл.