Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Смена загрузчика: с GRUB на systemd-boot и обратно

Сменить загрузчик с GRUB на systemd-boot в Arch Linux можно за десять минут: удали пакет grub, выполни bootctl install, создай два конфиг-файла — и система загружается через новый загрузчик. Обратный переход тоже простой: поставь grub, прогони grub-install и grub-mkconfig. Ниже — пошаговые инструкции в обе стороны и подводные камни, из-за которых переход чаще всего ломается.

Зачем переходить с GRUB на systemd-boot?

systemd-boot — минималистичный загрузчик, который входит в состав systemd. Он читает конфиги в формате ini, сам находит ядра в /boot и не генерирует сложные скрипты при каждом обновлении. GRUB мощнее: умеет грузить корень с LUKS2, поддерживает темы и os-prober для поиска Windows. Но если у тебя одна система на UEFI — systemd-boot стартует быстрее, а настройка умещается в два файла. Сравнение обоих загрузчиков — в статье «systemd-boot или GRUB: что выбрать».

Есть случаи, когда переходить не стоит. Если корень зашифрован LUKS2 и ты грузишься через GRUB — systemd-boot не умеет расшифровывать корень сам, понадобится отдельный initramfs с шифрованием. Если система на BIOS (Legacy) — systemd-boot вообще не работает, это загрузчик только для UEFI. И если в dualboot живут несколько дистрибутивов с разными загрузчиками — GRUB с os-prober соберёт их в одно меню, а systemd-boot придётся настраивать руками.

Что нужно проверить перед сменой загрузчика?

Главное условие — ESP (EFI System Partition) смонтирован в /boot или /efi. От этого зависит, какие флаги передавать командам.

findmnt /boot          # точка монтирования ESP
bootctl status         # статус systemd-boot, если он уже установлен

findmnt /boot покажет, какой раздел лежит в /boot и какая на нём файловая система — должна быть vfat. Если ESP смонтирован в /efi, а не в /boot, запомни это: дальше понадобятся флаги --esp-path=/efi и --efi-directory=/efi.

Проверь, что система загружена в режиме UEFI, а не BIOS:

cat /sys/firmware/efi/fw_platform_size

Если файл существует и выводит 64 или 32 — режим UEFI, systemd-boot подойдёт. Если файла нет — система работает в режиме BIOS, и от идеи перехода лучше отказаться: systemd-boot требует UEFI.

Посмотри общую картину разделов:

lsblk -f

Ты должен видеть, где корень, где ESP и какие UUID у разделов — они понадобятся для entry-файла.

Перед любыми действиями с загрузчиком не помешает резервная копия текущего конфига:

sudo cp /boot/grub/grub.cfg ~/grub.cfg.bak

Если что-то пойдёт не так, вернёшься к рабочему состоянию за минуту.

Как удалить GRUB и установить systemd-boot?

Сначала удали GRUB вместе с os-prober, если он стоял:

sudo pacman -Rsn grub os-prober

Затем установи systemd-boot:

sudo bootctl install

Команда копирует загрузчик в ESP и добавляет запись Linux Boot Manager в NVRAM. Если ESP смонтирован в /efi:

sudo bootctl install --esp-path=/efi

После удаления пакета в /boot/grub могут остаться файлы конфигурации. Они не мешают systemd-boot, но занимают место и путают. Удали каталог:

sudo rm -r /boot/grub

Только убедись, что в нём не лежит ничего нужного — например, кастомные темы или свои скрипты.

Если перезагрузиться до создания конфигов, systemd-boot не покажет ошибку — он сам найдёт ядро в корне ESP и загрузит его с параметрами по умолчанию. Система, скорее всего, поднимется, но без твоих options. Поэтому конфиги лучше создать сразу, до перезагрузки.

Проверь результат:

bootctl status
efibootmgr

В выводе bootctl status появится установленная версия загрузчика, а efibootmgr покажет новую запись в списке загрузки. Пока не перезагружайся — без конфигов systemd-boot не знает, что грузить.

Как настроить systemd-boot?

Вся настройка — два файла. Первый, /boot/loader/loader.conf, описывает поведение меню:

default arch.conf
timeout 3
console-mode max
  • default — имя entry-файла, который грузится по умолчанию.
  • timeout — сколько секунд меню ждёт выбора.
  • console-mode max — максимальное разрешение текстовой консоли. Если меню выглядит мелко или криво — попробуй console-mode auto или убери строку совсем.

Полезные опции loader.conf:

  • beep — звуковой сигнал при появлении меню.
  • editor — разрешить редактирование пунктов меню перед загрузкой (по умолчанию включено).
  • auto-entries — показывать автоматически найденные ядра и Windows в дополнение к твоим entry-файлам.

Обрати внимание: в default указывается имя файла из /boot/loader/entries/ без расширения .conf. Если файла с таким именем нет, systemd-boot молча перейдёт к автодетекту — и загрузит ядро без твоих options.

timeout 0 убирает меню совсем — система грузится сразу, без паузы. Меню всё равно появится, если во время загрузки зажать пробел или любую клавишу. Удобно, когда система одна и меню не нужно.

Второй файл, /boot/loader/entries/arch.conf, описывает один пункт меню:

title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw

UUID корневого раздела узнаёшь командой lsblk -f. Вместо UUID можно указать /dev/nvme0n1p2, но UUID надёжнее: имена устройств меняются при подключении новых дисков.

Если у тебя процессор AMD или Intel, добавь строку с микрокодом — строго ПЕРЕД initramfs:

title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw

Для Intel файл называется intel-ucode.img. Порядок строк критичен: микрокод всегда первым. Пропуск этой строки — частая причина зависаний и артефактов после перехода.

Как systemd-boot находит ядра?

systemd-boot не сканирует раздел в поисках ядер. Он читает файлы из /boot/loader/entries/ — каждый .conf становится пунктом меню. Если каталог пуст, загрузчик сам находит vmlinuz-* и initramfs-*.img в корне ESP и строит меню без твоих правок. Но тогда ты не контролируешь параметры ядра, поэтому обычно создают один arch.conf с нужными options.

При обновлении ядра pacman-хук mkinitcpio пересоздаёт initramfs, а entry-файл не трогает — он остаётся рабочим, потому что ссылается на /vmlinuz-linux и /initramfs-linux.img по именам. Если поставил несколько ядер — linux, linux-lts, linux-hardened — для каждого нужен свой entry-файл или общий с автодетектом. Как это устроить — в статье «Несколько ядер в меню: linux, linux-lts, linux-hardened».

Свежие версии systemd поддерживают установку ядер через kernel-install — тогда entry-файлы генерируются автоматически. Но классический Arch Linux с mkinitcpio так не работает: entry-файл создаётся один раз вручную и живёт годами. Если хочешь грузить ядро вообще без загрузчика — посмотри в сторону EFISTUB и UKI, это отдельная тема.

Как вернуться с systemd-boot на GRUB?

Обратный переход — три команды:

sudo pacman -S grub
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
sudo grub-mkconfig -o /boot/grub/grub.cfg

Если ESP смонтирован в /efi, замени --efi-directory=/boot на --efi-directory=/efi. После генерации проверь, что в конфиге появились пункты меню:

grep -c 'menuentry' /boot/grub/grub.cfg

Число больше нуля — конфиг собран. Если пунктов нет, ядро не найдено: проверь, что /boot смонтирован и в нём лежит vmlinuz-linux.

Если в системе есть Windows и ты хочешь видеть её в меню GRUB — поставь os-prober и перегенерируй конфиг ещё раз. Без него GRUB покажет только Arch.

После установки GRUB удали systemd-boot:

sudo bootctl uninstall
sudo rm -r /boot/loader

bootctl uninstall убирает файлы загрузчика из ESP и удаляет запись из NVRAM. Если после перехода система не загрузилась — методика восстановления из live-USB описана в статье «grub rescue: что делать».

Какие подводные камни встречаются при смене загрузчика?

Записи в NVRAM и порядок загрузки

После bootctl install в NVRAM появляется запись Linux Boot Manager, а старая запись GRUB остаётся на месте. Если порядок загрузки не изменился — система продолжит стартовать через GRUB, и ты решишь, что переход не сработал. Проверяй порядок через efibootmgr и переставляй нужную запись первой. Разбор работы с NVRAM — в статье «Порядок загрузки в NVRAM: efibootmgr».

Несовпадение точки монтирования ESP

Если ESP смонтирован в /efi, а ты выполнил bootctl install без --esp-path — загрузчик запишется не туда, и прошивка не найдёт его при старте. То же самое с GRUB: --efi-directory должен указывать на реальную точку монтирования ESP. Перед любой командой сверяйся с findmnt /boot.

Пропущенная строка микрокода

Без initrd /amd-ucode.img (или intel-ucode.img) система загрузится, но процессор останется без обновлений микрокода. На некоторых машинах это даёт зависания, артефакты на экране и странные сбои. Строка микрокода всегда идёт первой, до initramfs.

Неверное имя в default

Если в default указан файл, которого нет в /boot/loader/entries/, systemd-boot не покажет ошибку — он молча перейдёт к автодетекту ядер. Система загрузится, но без твоих options: без нужного root=, без микрокода. Проверяй имя entry-файла после правок loader.conf.

Обновление systemd-boot

systemd-boot обновляется отдельно от пакета systemd. При обновлении systemd загрузчик в ESP не перезаписывается автоматически:

sudo bootctl update

Забыл выполнить bootctl update — и в ESP лежит старая версия, которая может не понимать новые entry-файлы или не поддерживать свежие ядра.

Ошибка про EFI variables

Если bootctl install падает с ошибкой про EFI variables — прошивка не отдаёт переменные или включён Secure Boot. Разбор этой ошибки — в статье «EFI variables not supported: efibootmgr».

Частые вопросы

Нужно ли удалять GRUB перед установкой systemd-boot?

Не обязательно, но желательно. Пакет grub не мешает работе systemd-boot, но оставляет запись в NVRAM и файлы в /boot/grub. Чистый переход выглядит так: pacman -Rsn grub os-prober, затем bootctl install. Оставшийся каталог /boot/grub можно удалить вручную — он больше не нужен.

Что делать, если после перехода система грузится в старый загрузчик?

Проверь порядок загрузки через efibootmgr. Запись GRUB может стоять первой — переставь Linux Boot Manager на первое место или удали старую запись. Подробности — в статье про порядок загрузки в NVRAM.

Как обновлять systemd-boot после обновления systemd?

Выполни sudo bootctl update. Можно добавить хук pacman, который делает это автоматически, но проще держать команду в заметках и запускать после каждого обновления systemd.

Пропадёт ли Windows из меню?

Если запись Windows Boot Manager есть в NVRAM — systemd-boot покажет её в меню автоматически. Если записи нет, добавь пункт вручную: создай /boot/loader/entries/windows.conf со строкой efi /EFI/Microsoft/Boot/bootmgfw.efi. Путь к загрузчику Windows может отличаться, если Windows ставилась не первой — сверься с содержимым ESP.

Можно ли оставить оба загрузчика?

Можно, но не нужно. В NVRAM будут две записи, и порядок загрузки придётся держать под контролем вручную. Плюс оба загрузчика будут обновляться и занимать место в ESP. Выбери один — переключение занимает десять минут, как показано выше.

Полезные ресурсы

Заключение

Смена загрузчика в Arch Linux — рутинная операция на десять минут. Вперёд: удали grub, выполни bootctl install, создай loader.conf и arch.conf. Обратно: grub-install и grub-mkconfig. Главные ловушки — порядок записей в NVRAM, точка монтирования ESP и строка микрокода. Проверь их — и переход пройдёт без приключений. И перед любым переходом сделай резервную копию grub.cfg и запиши UUID корня — тогда откат займёт минуту, а не вечер. Смена загрузчика не трогает файлы на дисках, так что бояться нечего.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max