Сразу к делу: если после обновления GRUB система перестала грузиться, откати пакет на старую версию через pacman -U, а затем переустанови загрузчик командами grub-install и grub-mkconfig. Старый пакет лежит в /var/cache/pacman/pkg, а если кэш пуст — скачай его с archive.archlinux.org. Замена пакета сама по себе загрузку не чинит: модули на диске должны совпадать с бинарником, поэтому после отката всегда переустанавливай GRUB.
GRUB — не обычная программа. Его код живёт в двух местах: пакет в системе и модули, записанные на диск (в ESP или в /boot/grub). Обновление меняет пакет, но не трогает то, что уже записано на диск. Пока версии совпадают, всё работает. Как только они расходятся, начинаются проблемы. GRUB стоит особняком среди пакетов Arch: большинство программ обновляются «на лету», а загрузчик пишет себя на диск и должен соответствовать тому, что там уже записано. Поэтому поломка после обновления GRUB — не редкость, и откат — стандартный приём.
Разработчики GRUB периодически меняют формат grub.cfg и набор модулей. Старый конфиг, сгенерированный прошлой версией, новая может прочитать неверно. Отсюда «error: unknown filesystem», «invalid signature» и прочие сообщения вместо меню загрузки.
Если ты обновлял систему не целиком (pacman -Syu прервался, или ты ставил пакеты по одному), версии пакетов разъезжаются. Типичный сценарий: обновление прервалось на середине, ты перезагрузился, а GRUB уже новый, а библиотеки — нет. Или наоборот. В любом случае загрузчик собирается из несовместимых кусков. Почему частичное обновление ломает систему, разобрано в статье «Почему нельзя делать частичное обновление в Arch».
На UEFI-системах GRUB обычно ставят из пакета grub, но в некоторых конфигурациях используется отдельный grub-efi-x86_64. Если обновился один пакет, а второй остался старым — загрузчик соберётся из смеси версий. Это тот же эффект частичного обновления, только внутри одного компонента.
grub-install копирует модули в /boot/grub/x86_64-efi (для UEFI) или в /boot/grub/i386-pc (для BIOS). Если пакет обновился, а grub-install ты не запускал, на диске останутся модули старой версии. Загрузчик стартует, читает модули и падает на несовместимости. Именно поэтому после любого обновления GRUB нужно переустанавливать загрузчик, а не просто радоваться новому пакету.
Старые версии почти всегда можно найти, вопрос только в источнике. Их три: кэш pacman, архив пакетов и утилита downgrade.
Pacman хранит все скачанные пакеты в /var/cache/pacman/pkg. Проверь, что там есть:
ls /var/cache/pacman/pkg/grub-*.pkg.tar.zst
Если вывод пустой — кэш почищен (это делают pacman -Sc и paccache -r). Текущую версию пакета можно посмотреть командой pacman -Q grub.
Чтобы узнать точную версию, которая стояла до обновления, загляни в лог:
grep 'upgraded grub' /var/log/pacman.log
Строка вида [2026-09-18T10:12:33+0300] [ALPM] upgraded grub (2:2.12-5 -> 2:2.14-1) покажет, с какой версии на какую ты перешёл. Тебе нужна левая часть — 2:2.12-5. Обрати внимание на префикс 2: в начале — это эпоха пакета (epoch). В имени файла она не пишется: пакет 2:2.12-5 лежит в архиве как grub-2.12-5-x86_64.pkg.tar.zst.
Если кэш пуст, старые пакеты лежат на archive.archlinux.org. Открой раздел packages/g/grub и найди нужную версию. Скачай файл grub-2.12-5-x86_64.pkg.tar.zst в домашний каталог. Имя файла собирай из версии, которую показал лог pacman.
После скачивания проверь контрольную сумму, чтобы не поставить битый файл:
sha256sum grub-2.12-5-x86_64.pkg.tar.zst
Сверь вывод с тем, что указано на странице пакета в архиве. Совпало — можно ставить.
Из AUR можно поставить утилиту downgrade — она сама ищет старые версии в кэше и в архиве и предлагает выбрать нужную:
yay -S downgrade
sudo downgrade grub
Утилита покажет список доступных версий и спросит, какую поставить. Удобно, когда не хочется возиться с архивом вручную.
Когда старый пакет у тебя на руках, установи его:
sudo pacman -U /var/cache/pacman/pkg/grub-2.12-5-x86_64.pkg.tar.zst
Если файл лежит в другом месте (например, скачан в ~/Downloads) — подставь свой путь. pacman -U ставит пакет из локального файла: проверяет зависимости, показывает, что изменится, и просит подтверждение. Откат GRUB обычно проходит без сюрпризов — зависимостей у пакета почти нет. Если pacman ругается на конфликт версий с другими пакетами, не используй флаг --force вслепую: сначала разберись, что именно конфликтует.
После установки проверь, что версия сменилась:
pacman -Q grub
Должна показаться старая версия — 2:2.12-5. Если pacman показывает новую, значит, ты указал не тот файл.
Если в системе есть отдельный пакет grub-efi-x86_64, откати и его:
sudo pacman -U /var/cache/pacman/pkg/grub-efi-x86_64-2.12-5-x86_64.pkg.tar.zst
После этого не перезагружайся сразу. Откат пакета — только половина дела.
Пакет grub содержит бинарники и модули, но на диск они не записаны. Загрузчик, который реально стартует при включении компьютера, живёт в ESP (для UEFI) или в MBR (для BIOS). Его нужно переустановить заново, чтобы модули на диске совпали с версией пакета.
grub-install записывает загрузочный код в ESP (или в MBR для BIOS) и копирует модули в /boot/grub. grub-mkconfig собирает grub.cfg из скриптов в /etc/grub.d и подставляет в него реальные UUID разделов и пути к ядру. Обе команды нужны: без первой загрузчик не найдёт модули, без второй — не найдёт ядро.
Для UEFI:
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
sudo grub-mkconfig -o /boot/grub/grub.cfg
Для BIOS:
sudo grub-install --target=i386-pc /dev/nvme0n1
sudo grub-mkconfig -o /boot/grub/grub.cfg
В команде для BIOS указывай диск целиком (nvme0n1, sda), а не раздел. Если grub-install падает с ошибкой про нехватку места — возможно, переполнен EFI-раздел, об этом есть отдельная статья «EFI-раздел переполнен: чистка».
После grub-mkconfig проверь, что в /boot/grub/grub.cfg появились пункты меню с твоим ядром. Если хочешь настроить таймаут или скрыть лишние пункты — смотри статью «Таймаут и скрытые пункты меню GRUB». Когда всё на месте — перезагружайся.
Если загрузчик сломался настолько, что система не стартует, откатывать пакет нужно из chroot. Загрузись с live-USB с Arch Linux, смонтируй корневой раздел и ESP, войди в систему:
mount /dev/nvme0n1p2 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Подставь свои разделы из вывода lsblk. Перед chroot проверь, что ESP смонтирован именно в /mnt/boot (или в /mnt/efi, если ты используешь такой путь). Ошибка здесь — частая причина того, что grub-install «успешно» отрабатывает, но загрузка не восстанавливается.
Если старых пакетов в кэше нет, а скачать их нужно — подключи интернет в live-среде:
dhcpcd # проводное соединение
iwctl # Wi-Fi
Внутри chroot повтори всё то же самое: найди старую версию в /var/cache/pacman/pkg (кэш на месте, если ты не чистил его до поломки), поставь её через pacman -U, затем grub-install и grub-mkconfig. После этого выйди из chroot, размонтируй разделы и перезагрузись:
exit
umount -R /mnt
reboot
Если система всё-таки загрузилась, но с ошибками или без меню GRUB — не спеши переустанавливать всё подряд. Достаточно откатить пакет и переустановить загрузчик из работающей системы, без live-USB.
После перезагрузки проверь, что в UEFI выбран правильный пункт загрузки. Иногда после переустановки GRUB система грузится, но не с того диска — зайди в настройки UEFI и убедись, что первым стоит нужный загрузчик.
Пошаговый разбор восстановления из live-USB — в статье «grub rescue: что делать», а полная методика переустановки — в «Переустановка GRUB после поломки».
Если GRUB работает стабильно, а новые версии тебя пугают, добавь пакет в список игнорируемых. Открой /etc/pacman.conf и впиши:
IgnorePkg = grub
Если хочешь заморозить и другие пакеты, перечисли их через пробел:
IgnorePkg = grub grub-efi-x86_64
Теперь pacman -Syu будет пропускать обновления GRUB. Когда захочешь обновиться осознанно — убери строку, обнови пакет и сразу переустанови загрузчик. Перед обновлением полезно заглянуть в новости проекта: на сайте archlinux.org публикуют предупреждения о проблемных обновлениях. Если GRUB обновляется вместе с ядром и mkinitcpio, обнови всё разом и сразу переустанови загрузчик, не откладывая на потом. Держать GRUB замороженным вечно не стоит: рано или поздно новая версия ядра или новый формат ESP потребует свежего загрузчика.
Ещё одна полезная привычка — не чистить кэш pacman сразу после обновления. paccache -r с настройками по умолчанию оставляет три последние версии каждого пакета — этого хватит, чтобы откатить GRUB, даже если проблема всплывёт через пару дней.
Нет. Откат пакета меняет только файлы в системе. Модули, записанные на диск, останутся от новой версии, и загрузчик продолжит падать. grub-install после отката обязателен.
Проверь, не осталась ли копия в снапшоте системы (btrfs, snapper, Timeshift). Если и там пусто — поставь текущую версию заново через pacman -S grub и переустанови загрузчик. Иногда проблема уходит просто от чистой переустановки.
Только если этот пакет установлен в системе. Проверь: pacman -Q grub-efi-x86_64. Если пакета нет — откатывай только grub.
По логу pacman: grep 'upgraded grub' /var/log/pacman.log. В строке обновления левая версия — старая, правая — новая.
Нет. GRUB почти не имеет зависимостей, поэтому pacman -U со старой версией не потянет за собой каскад откатов. Единственное исключение — если ты откатываешь сразу несколько связанных пакетов, но к GRUB это обычно не относится.
Откат GRUB — это три шага: найти старую версию пакета (кэш, архив, downgrade), поставить её через pacman -U и переустановить загрузчик командами grub-install и grub-mkconfig. Пропустишь третий шаг — и модули на диске не совпадут с бинарником, загрузка так и не починится. Если система не стартует — загрузись с live-USB и повтори всё из chroot. А чтобы не попадать в эту историю снова, добавь IgnorePkg = grub в pacman.conf и обновляй загрузчик только осознанно.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии