Как откатить обновление GRUB, если сломался загрузчик
Коротко: если после обновления GRUB система перестала грузиться, откати пакет на старую версию через pacman -U, а затем переустанови загрузчик командами grub-install и grub-mkconfig. Старый пакет лежит в /var/cache/pacman/pkg, а если кэш пуст, скачай его с archive.archlinux.org. Замена пакета сама по себе загрузку не чинит: модули на диске должны совпадать с бинарником, поэтому после отката всегда переустанавливай GRUB.
Почему обновление GRUB может сломать загрузку?
GRUB: не обычная программа. Его код живёт в двух местах: пакет в системе и модули, записанные на диск (в ESP или в /boot/grub). Обновление меняет пакет, но не трогает то, что уже записано на диск. Пока версии совпадают, всё работает. Как только они расходятся, начинаются проблемы. GRUB стоит особняком среди пакетов Arch: большинство программ обновляются «на лету», а загрузчик пишет себя на диск и должен соответствовать тому, что там уже записано. Поэтому поломка после обновления GRUB: не редкость, и откат, стандартный приём.
Новая версия меняет формат конфига
Разработчики GRUB периодически меняют формат grub.cfg и набор модулей. Старый конфиг, сгенерированный прошлой версией, новая может прочитать неверно. Отсюда «error: unknown filesystem», «invalid signature» и прочие сообщения вместо меню загрузки.
Частичное обновление
Если ты обновлял систему не целиком (pacman -Syu прервался, или ты ставил пакеты по одному), версии пакетов разъезжаются. Типичный сценарий: обновление прервалось на середине, ты перезагрузился, а GRUB уже новый, а библиотеки, нет. Или наоборот. В любом случае загрузчик собирается из несовместимых кусков. Почему частичное обновление ломает систему, разобрано в статье «Почему нельзя делать частичное обновление в Arch».
Расхождение grub и grub-efi
На UEFI-системах GRUB обычно ставят из пакета grub, но в некоторых конфигурациях используется отдельный grub-efi-x86_64. Если обновился один пакет, а второй остался старым, загрузчик соберётся из смеси версий. Это тот же эффект частичного обновления, только внутри одного компонента.
Модули на диске не совпадают с бинарником
grub-install копирует модули в /boot/grub/x86_64-efi (для UEFI) или в /boot/grub/i386-pc (для BIOS). Если пакет обновился, а grub-install ты не запускал, на диске останутся модули старой версии. Загрузчик стартует, читает модули и падает на несовместимости. Поэтому после любого обновления GRUB нужно переустанавливать загрузчик, а не просто радоваться новому пакету.
Где взять старую версию GRUB?
Старые версии почти всегда можно найти, вопрос только в источнике. Их три: кэш pacman, архив пакетов и утилита downgrade.
Кэш pacman
Pacman хранит все скачанные пакеты в /var/cache/pacman/pkg. Проверь, что там есть:
ls /var/cache/pacman/pkg/grub-*.pkg.tar.zst
Если вывод пустой, кэш почищен (это делают pacman -Sc и paccache -r). Текущую версию пакета можно посмотреть командой pacman -Q grub.
Журнал pacman
Чтобы узнать точную версию, которая стояла до обновления, загляни в лог:
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.
Архив пакетов Arch Linux
Если кэш пуст, старые пакеты лежат на 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
Сверь вывод с тем, что указано на странице пакета в архиве. Совпало: можно ставить.
Инструмент downgrade
Из AUR можно поставить утилиту downgrade: она сама ищет старые версии в кэше и в архиве и предлагает выбрать нужную:
yay -S downgrade
sudo downgrade grub
Утилита покажет список доступных версий и спросит, какую поставить. Удобно, когда не хочется возиться с архивом вручную.
Как откатить GRUB через pacman -U?
Когда старый пакет у тебя на руках, установи его:
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, чтобы он не обновлялся?
Если 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 без переустановки загрузчика?
Нет. Откат пакета меняет только файлы в системе. Модули, записанные на диск, останутся от новой версии, и загрузчик продолжит падать. grub-install после отката обязателен.
Что делать, если старого пакета нет ни в кэше, ни в архиве?
Проверь, не осталась ли копия в снапшоте системы (btrfs, snapper, Timeshift). Если и там пусто, поставь текущую версию заново через pacman -S grub и переустанови загрузчик. Иногда проблема уходит просто от чистой переустановки.
Нужно ли откатывать grub-efi отдельно?
Только если этот пакет установлен в системе. Проверь: pacman -Q grub-efi-x86_64. Если пакета нет, откатывай только grub.
Как узнать, какая версия GRUB стояла до обновления?
По логу pacman: grep 'upgraded grub' /var/log/pacman.log. В строке обновления левая версия: старая, правая, новая.
Откат GRUB повлияет на другие пакеты?
Нет. GRUB почти не имеет зависимостей, поэтому pacman -U со старой версией не потянет за собой каскад откатов. Единственное исключение: если ты откатываешь сразу несколько связанных пакетов, но к GRUB это обычно не относится.
Полезные ресурсы
- Downgrading packages, ArchWiki: официальная инструкция по откату пакетов.
- GRUB, ArchWiki: установка и настройка загрузчика.
Заключение
Откат GRUB. Это три шага: найти старую версию пакета (кэш, архив, downgrade), поставить её через pacman -U и переустановить загрузчик командами grub-install и grub-mkconfig. Пропустишь третий шаг: и модули на диске не совпадут с бинарником, загрузка так и не починится. Если система не стартует, загрузись с live-USB и повтори всё из chroot. А чтобы не попадать в эту историю снова, добавь IgnorePkg = grub в pacman.conf и обновляй загрузчик только осознанно.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии