Все об Arch Linux

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

Снапшоты и откат: стратегия после поломки -Syu

pacman -Syu отработал, а после перезагрузки система не грузится: чёрный экран, зависший initramfs или мёртвая графика. Если перед обновлением лежит снапшот, путь к рабочему состоянию занимает пару минут и одно загрузочное меню. Ниже — полный цикл отката: grub-btrfs, snapper rollback, Timeshift и памятка, в каком порядке пробовать решения.

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

Сначала оцени масштаб. Система не стартует вообще, стартует до определённого места или грузится, но сломана одна подсистема? От ответа зависит, какой инструмент брать. Полный цикл выглядит так:

  1. Снапшот до обновления. Одна команда или автоматика — как поставить эту привычку, разобрано в статье про снапшот перед обновлением.
  2. Обновление. sudo pacman -Syu.
  3. Поломка. Перезагрузка, и система не поднимается.
  4. Откат. Загрузка в снапшот через GRUB, проверка, что система жива, и закрепление отката.

Дальше — каждый шаг по отдельности.

Как grub-btrfs выносит снапшоты в меню GRUB

grub-btrfs — пакет из официального репозитория extra, который сканирует снапшоты snapper и добавляет их в меню GRUB отдельным подменю. Ставится одной командой:

sudo pacman -S grub-btrfs

После установки пересобери конфигурацию GRUB:

sudo grub-mkconfig -o /boot/grub/grub.cfg

В меню появится подменю со снапшотами — обычно «Arch Linux snapshots». Каждый пункт подписан номером и описанием, которое ты задавал при создании (-d "before update"). Чтобы новые снапшоты попадали в меню автоматически, включи демон:

sudo systemctl enable --now grub-btrfsd.service

Демону нужен inotify-tools — pacman предложит его как опциональную зависимость, поставь. Дальше каждый снапшот, созданный snapper, сам появляется в GRUB без ручной пересборки.

Как проверить, жива ли система в снапшоте

Выбери в подменю последний снапшот перед обновлением и загрузи в него. По умолчанию снапшоты монтируются read-only: система стартует «из прошлого», но ничего не записывает. Это и защита, и диагностика.

Что проверить после загрузки:

  • рабочий стол или консоль поднялись без ошибок;
  • сеть работает;
  • pacman -Q показывает старые версии пакетов — значит, ты действительно в снапшоте.

Если в снапшоте всё работает — поломку принесло обновление, и откат можно закреплять. Если и в снапшоте беда — проблема не в обновлении: смотри диск, память, аппаратуру.

Важный нюанс: read-only снапшот не даст pacman записать изменения. Если нужно что-то поправить внутри снапшота (например, откатить один пакет), загружайся в снапшот с опцией rw — в GRUB отредактируй пункт меню клавишей e и замени ro на rw. Изменения останутся только в этом снапшоте и исчезнут после перезагрузки в обычный @.

Как работает snapper rollback и когда его использовать

snapper rollback — команда, которая делает откат постоянным. Она подменяет активный подтом @ на выбранный снапшот: текущий @ переименовывается (обычно в @-old), а снапшот из .snapshots занимает его место. Старый @ не удаляется — если откат не понравится, можно вернуться обратно повторной подменой.

sudo snapper -c root rollback

После команды — перезагрузка, и система грузится уже из снапшота.

Предупреждения:

  • Не для всех раскладок. snapper rollback рассчитан на классическую схему, где .snapshots лежит внутри @. Если ты ставил систему по гайду про установку с btrfs-снапшотами — с отдельным подтомом @snapshots, смонтированным в /.snapshots, — rollback может перепутать подтома. Для такой схемы используй ручную подмену.
  • Ручная подмена @ и .snapshots. Из live-среды: смонтируй корень btrfs, переименуй сломанный @ в @.broken, создай новый @ из снапшота:
mv /mnt/@ /mnt/@.broken
btrfs subvolume snapshot /mnt/@snapshots/N/snapshot /mnt/@

Перед этим размонтируй точку /.snapshots — иначе переименование пройдёт «в никуда», и снапшоты потеряются из виду.

  • /home не трогается. Если домашние папки в отдельном подтоме @home, откат корня их не заденет. Конфиги в /etc откатятся, личные файлы — нет.

Как откатиться из Timeshift

Timeshift на btrfs хранит снапшоты в подтоме @timeshift-btrfs и умеет восстанавливать систему целиком. Если снапшоты делал он, а не snapper, grub-btrfs их не увидит — у Timeshift свой механизм.

Восстановление из работающей системы: открой Timeshift, выбери снапшот и нажми Restore. Программа пересоздаст подтома и перезагрузит систему.

Если система не грузится: загрузись с live-USB, запусти Timeshift оттуда — он найдёт снапшоты на диске и предложит восстановление. Либо сделай то же самое вручную: смонтируй корень btrfs и подмени @ на снапшот из @timeshift-btrfs/snapshots/N/.

Как автоматизировать снапшоты: snap-pac и расписание

Ручной снапшот перед каждым обновлением легко забыть. Автоматика решает это за тебя.

snap-pac — набор ALPM-хуков: перед каждой операцией pacman создаёт снапшот «до», после — «после». Ставится и забывается:

sudo pacman -S snap-pac

Теперь любой pacman -Syu сам оставляет пару снапшотов. Если что-то сломалось — в GRUB уже лежит точка отката.

Расписание snapper. Помимо хуков, snapper умеет делать снапшоты по таймеру — timeline. Включи и задай лимиты в /etc/snapper/configs/root:

TIMELINE_CREATE="yes"
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="4"
TIMELINE_LIMIT_MONTHLY="6"
TIMELINE_LIMIT_YEARLY="2"

Политика хранения простая: чем свежее снапшот, тем больше их держим. Часовые — на день, дневные — на неделю, недельные — на месяц, месячные и годовые — на годы. Старые снапшоты snapper удаляет сам по расписанию snapper-cleanup.timer.

В каком порядке пробовать откат: памятка

Когда система сломалась, не кидайся сразу к самому тяжёлому инструменту. Порядок от простого к сложному:

  1. Загрузись в снапшот. Через grub-btrfs, read-only. Это и диагностика, и временное спасение: система из прошлого работает, пока думаешь.
  2. Откати ядро. Если грузится всё, кроме ядра или модулей — верни одно ядро из кэша: sudo pacman -U /var/cache/pacman/pkg/linux-*.pkg.tar.zst.
  3. Откати один пакет. Нашёл виновника по логам — откати его одного через pacman -U. Общий разбор — в гайде «Сломалось после обновления».
  4. Последний рубеж — снапшот. Ничего не помогло или система не грузится вовсе — snapper rollback или ручная подмена @.

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

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

Чем загрузка в снапшот отличается от rollback?

Загрузка в снапшот — временная: после перезагрузки система снова стартует из обычного @. snapper rollback — постоянная подмена: @ заменяется снапшотом, и система грузится из него всегда.

Что будет со старым @ после rollback?

Он не исчезает — переименовывается и остаётся на диске. Если откат не понравился, подмени подтома обратно. Когда убедишься, что всё работает, удали старый @ через btrfs subvolume delete.

Работает ли откат, если /home отдельный подтом?

Да, и это плюс: откат корня не трогает @home. Личные файлы остаются, откатываются только системные файлы и конфиги в /etc.

Timeshift и snapper — можно ли использовать вместе?

Можно, но не нужно: оба делают одно и то же. Выбери один инструмент, иначе снапшоты будут дублироваться и займут вдвое больше места.

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

  • ArchWiki: Snapper — полная документация по конфигурациям, лимитам и восстановлению.
  • ArchWiki: GRUB — продвинутая настройка загрузчика, включая работу со снапшотами.

Заключение

Снапшоты превращают поломку после -Syu из переустановки на полдня в десятиминутный откат. Схема простая: автоматические снапшоты через snap-pac, загрузка в них через grub-btrfs, а при необходимости — snapper rollback или ручная подмена подтома. Настроил один раз — и любое обновление перестаёт быть страшным.



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

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

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

Комментарии

Загрузка…

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

Telegram Max