Система не грузится вообще: после обновления — чёрный экран, initramfs падает, а в меню GRUB нет ни одного пункта, даже снапшотов. grub-btrfs не поможет, если сам загрузчик сломан или его меню не появляется. Остаётся один путь — live USB, chroot и ручная подмена подтома на снапшот. Ниже полный порядок действий.
Сначала пойми, что именно сломалось. Если меню GRUB появляется и в нём есть снапшоты — тебе в статью про откат через grub-btrfs. Там загрузка в снапшот занимает пару минут. Но бывает хуже: GRUB не стартует вовсе, уходит в grub rescue> или показывает чёрный экран. Тогда меню нет, grub-btrfs бесполезен, и лечить систему придётся извне.
Для этого нужны:
Если снапшотов нет, не всё потеряно — об этом в конце статьи.
Запиши ISO на флешку и загружайся с неё в том же режиме, в котором стоит система: UEFI для UEFI, BIOS для BIOS. Проверка простая — если в live-окружении есть каталог /sys/firmware/efi, ты в UEFI.
Дальше посмотри, как размечены диски:
lsblk -f
Вывод покажет разделы, файловые системы и метки. Найди корневой раздел с btrfs и ESP (обычно vfat). В примерах ниже корень — /dev/nvme0n1p2, ESP — /dev/nvme0n1p1. Подставь свои.
Если корень на btrfs, посмотри, какие подтома в нём живут. Сначала смонтируй сам раздел без указания подтома — так откроется верхний уровень:
mount /dev/nvme0n1p2 /mnt
btrfs subvolume list /mnt
В списке будут @, @home, @snapshots и другие. Именно @ — корень системы, а @snapshots хранит снапшоты. Где именно они лежат и как устроена схема подтомов, разобрано в статье «Btrfs: снапшоты с первого дня».
Теперь смонтируй корень правильно — с опцией subvol=@:
umount /mnt
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p2 /mnt
Опция subvol=/@ указывает, какой подтом станет корнем точки монтирования. compress=zstd — опция сжатия, она должна совпадать с той, что прописана в /etc/fstab системы, иначе при загрузке btrfs может ругаться на несовпадение опций.
Дальше смонтируй загрузочные разделы:
mount /dev/nvme0n1p1 /mnt/boot
Если /boot — это ESP (vfat), команда та же. Если у тебя отдельный раздел /boot и отдельный ESP, смонтируй оба: ESP в /mnt/efi, а /boot в /mnt/boot. Точные пути подскажет /etc/fstab системы — прочитай его до перезагрузки.
Снапшоты snapper лежат в подтоме @snapshots, который обычно монтируется в /.snapshots. Из live-окружения смонтируй его отдельно:
mount -t btrfs -o subvol=/@snapshots /dev/nvme0n1p2 /mnt/.snapshots
Теперь список снапшотов:
snapper -c root list
Если snapper в live-окружении не установлен, посмотри каталоги напрямую:
ls /mnt/.snapshots/
ls /mnt/.snapshots/N/snapshot/
Каждый снапшот — это каталог N/snapshot с полной копией системы на момент снимка. Выбери номер снапшота, созданный до поломки. Обычно это последний перед обновлением — сверься с датами в выводе snapper list.
Когда снапшот выбран, подмени корень. Сначала переименуй сломанный @ — он останется на диске как запасной вариант:
umount /mnt/.snapshots
mv /mnt/@ /mnt/@.broken
Важно: перед переименованием размонтируй /.snapshots, иначе подмена пройдёт «в никуда» и снапшоты потеряются из виду. Теперь создай новый @ из снапшота:
btrfs subvolume snapshot /mnt/@snapshots/N/snapshot /mnt/@
Подставь номер N из списка. Команда делает снапшот снапшота — новый подтом @, который станет корнем системы. Старый @.broken не удаляй, пока не убедишься, что всё работает.
Если система на LVM-ext4, аналог проще: снапшоты LVM монтируются как обычные тома. Смонтируй снапшот в /mnt, скопируй его содержимое в основной том через rsync -aAXv и перезагрузись. Но это отдельная история — на btrfs подмена подтома занимает секунды.
После подмены проверь /etc/fstab внутри нового @:
cat /mnt/etc/fstab
Если корень менялся (например, ты переносил систему на другой диск), поправь UUID разделов. Если схема та же — fstab остаётся валидным, потому что подтом @ монтируется по тому же пути.
Теперь войди в восстановленную систему:
arch-chroot /mnt
Внутри chroot пересобери initramfs — вдруг поломка была в нём:
mkinitcpio -P
Команда соберёт образы для всех установленных ядер. Дальше переустанови GRUB:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
grub-install пишет загрузчик в ESP, grub-mkconfig собирает меню заново — теперь в нём снова появятся пункты, включая снапшоты grub-btrfs. Подробный разбор каждой команды — в статье «Переустановить GRUB после поломки».
Если система на BIOS, а не UEFI, команда другая:
grub-install --target=i386-pc /dev/nvme0n1
Выходи из chroot и перезагрузись:
exit
umount -R /mnt
reboot
После загрузки проверь, что система жива: pacman -Q должен показывать старые версии пакетов, а snapper list — видеть снапшоты. Когда убедишься, что всё работает, удали сломанный подтом:
btrfs subvolume delete /mnt/@.broken
Без снапшотов подмена не сработает — нечего подставлять. Но система всё ещё лежит на диске, и её можно починить изнутри через тот же chroot. Если поломку принесло обновление, откати пакеты из офлайн-кэша: pacman -U /var/cache/pacman/pkg/*.pkg.tar.zst. Полный порядок офлайн-отката без сети — в статье «Восстановление без сети: pacman -U».
Если кэш пуст, а сеть в live-окружении есть, пробрось её в chroot и обнови систему:
mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
arch-chroot /mnt
pacman -Syu
Иногда свежее обновление чинит то, что сломалось в предыдущем. А чтобы в следующий раз не гадать, настрой автоматические снапшоты — тогда восстановление всегда будет занимать десять минут, а не вечер.
Да, именно для этого и нужен live USB. Снапшоты лежат на диске независимо от загрузчика, и подмена подтома из live-окружения их не трогает.
Желательно. Если поломка была в initramfs, mkinitcpio -P её чинит. Если нет — лишняя пересборка не навредит.
@ после восстановления?Он остаётся на диске как @.broken. Не удаляй его, пока новая система не загрузится и не поработает хотя бы день. Потом удали через btrfs subvolume delete.
grub-btrfs работает из меню GRUB: выбрал снапшот, загрузился, откатился. Здесь меню нет вообще, поэтому подмена делается вручную из live-окружения. Это крайний случай, когда grub-btrfs бессилен.
Когда система не грузится вообще, а GRUB недоступен, остаётся один надёжный путь: live USB, chroot и ручная подмена подтома. Смонтируй корень с subvol=@, посмотри снапшоты, переименуй сломанный @ в @.broken, создай новый из снапшота и пересобери initramfs с GRUB. Весь процесс занимает полчаса и не требует переустановки. Главное — чтобы снапшоты были: тогда любая поломка загрузчика превращается в рутинную процедуру, а не в катастрофу.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии