Сменить загрузчик с GRUB на systemd-boot в Arch Linux можно за десять минут: удали пакет grub, выполни bootctl install, создай два конфиг-файла — и система загружается через новый загрузчик. Обратный переход тоже простой: поставь grub, прогони grub-install и grub-mkconfig. Ниже — пошаговые инструкции в обе стороны и подводные камни, из-за которых переход чаще всего ломается.
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 вместе с 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 не знает, что грузить.
Вся настройка — два файла. Первый, /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 не сканирует раздел в поисках ядер. Он читает файлы из /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, это отдельная тема.
Обратный переход — три команды:
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: что делать».
После bootctl install в NVRAM появляется запись Linux Boot Manager, а старая запись GRUB остаётся на месте. Если порядок загрузки не изменился — система продолжит стартовать через GRUB, и ты решишь, что переход не сработал. Проверяй порядок через efibootmgr и переставляй нужную запись первой. Разбор работы с NVRAM — в статье «Порядок загрузки в NVRAM: efibootmgr».
Если ESP смонтирован в /efi, а ты выполнил bootctl install без --esp-path — загрузчик запишется не туда, и прошивка не найдёт его при старте. То же самое с GRUB: --efi-directory должен указывать на реальную точку монтирования ESP. Перед любой командой сверяйся с findmnt /boot.
Без initrd /amd-ucode.img (или intel-ucode.img) система загрузится, но процессор останется без обновлений микрокода. На некоторых машинах это даёт зависания, артефакты на экране и странные сбои. Строка микрокода всегда идёт первой, до initramfs.
Если в default указан файл, которого нет в /boot/loader/entries/, systemd-boot не покажет ошибку — он молча перейдёт к автодетекту ядер. Система загрузится, но без твоих options: без нужного root=, без микрокода. Проверяй имя entry-файла после правок loader.conf.
systemd-boot обновляется отдельно от пакета systemd. При обновлении systemd загрузчик в ESP не перезаписывается автоматически:
sudo bootctl update
Забыл выполнить bootctl update — и в ESP лежит старая версия, которая может не понимать новые entry-файлы или не поддерживать свежие ядра.
Если bootctl install падает с ошибкой про EFI variables — прошивка не отдаёт переменные или включён Secure Boot. Разбор этой ошибки — в статье «EFI variables not supported: efibootmgr».
Не обязательно, но желательно. Пакет grub не мешает работе systemd-boot, но оставляет запись в NVRAM и файлы в /boot/grub. Чистый переход выглядит так: pacman -Rsn grub os-prober, затем bootctl install. Оставшийся каталог /boot/grub можно удалить вручную — он больше не нужен.
Проверь порядок загрузки через efibootmgr. Запись GRUB может стоять первой — переставь Linux Boot Manager на первое место или удали старую запись. Подробности — в статье про порядок загрузки в NVRAM.
Выполни sudo bootctl update. Можно добавить хук pacman, который делает это автоматически, но проще держать команду в заметках и запускать после каждого обновления systemd.
Если запись 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 корня — тогда откат займёт минуту, а не вечер. Смена загрузчика не трогает файлы на дисках, так что бояться нечего.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии