Все об Arch Linux

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

Восстановление из снапшота, когда система не грузится

Система не грузится вообще: после обновления — чёрный экран, initramfs падает, а в меню GRUB нет ни одного пункта, даже снапшотов. grub-btrfs не поможет, если сам загрузчик сломан или его меню не появляется. Остаётся один путь — live USB, chroot и ручная подмена подтома на снапшот. Ниже полный порядок действий.

Что делать, если система не грузится и GRUB недоступен?

Сначала пойми, что именно сломалось. Если меню GRUB появляется и в нём есть снапшоты — тебе в статью про откат через grub-btrfs. Там загрузка в снапшот занимает пару минут. Но бывает хуже: GRUB не стартует вовсе, уходит в grub rescue> или показывает чёрный экран. Тогда меню нет, grub-btrfs бесполезен, и лечить систему придётся извне.

Для этого нужны:

  • флешка с установочным ISO Arch Linux — подойдёт любой свежий образ;
  • второй компьютер или телефон, чтобы читать инструкцию;
  • снапшот на диске — без него восстановление превращается в переустановку.

Если снапшотов нет, не всё потеряно — об этом в конце статьи.

Как загрузиться с live USB и найти разделы?

Запиши 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 остаётся валидным, потому что подтом @ монтируется по тому же пути.

Как пересобрать initramfs и GRUB из chroot?

Теперь войди в восстановленную систему:

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

Иногда свежее обновление чинит то, что сломалось в предыдущем. А чтобы в следующий раз не гадать, настрой автоматические снапшоты — тогда восстановление всегда будет занимать десять минут, а не вечер.

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

Можно ли восстановиться, если GRUB сломан, а снапшоты есть?

Да, именно для этого и нужен live USB. Снапшоты лежат на диске независимо от загрузчика, и подмена подтома из live-окружения их не трогает.

Нужно ли пересобирать initramfs после подмены подтома?

Желательно. Если поломка была в initramfs, mkinitcpio -P её чинит. Если нет — лишняя пересборка не навредит.

Что будет со старым @ после восстановления?

Он остаётся на диске как @.broken. Не удаляй его, пока новая система не загрузится и не поработает хотя бы день. Потом удали через btrfs subvolume delete.

Чем это отличается от отката через grub-btrfs?

grub-btrfs работает из меню GRUB: выбрал снапшот, загрузился, откатился. Здесь меню нет вообще, поэтому подмена делается вручную из live-окружения. Это крайний случай, когда grub-btrfs бессилен.

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

  • Chroot (ArchWiki): как войти в систему с live-носителя и работать внутри неё.
  • Btrfs (ArchWiki): подтома, снапшоты и опции монтирования.

Заключение

Когда система не грузится вообще, а GRUB недоступен, остаётся один надёжный путь: live USB, chroot и ручная подмена подтома. Смонтируй корень с subvol=@, посмотри снапшоты, переименуй сломанный @ в @.broken, создай новый из снапшота и пересобери initramfs с GRUB. Весь процесс занимает полчаса и не требует переустановки. Главное — чтобы снапшоты были: тогда любая поломка загрузчика превращается в рутинную процедуру, а не в катастрофу.



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

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

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

Комментарии

Загрузка…

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

Telegram Max