Обновление системы — всегда небольшой риск: новый модуль ядра может не собраться, драйвер видеокарты — сломать вход в сессию, а неудачный пакет — оставить систему без графики. На ext4 откат обычно означает переустановку или ручное восстановление из резервной копии. Btrfs позволяет сделать снапшот за секунды, а Snapper превращает это в управляемый процесс с историей, описаниями и очисткой.
Разберём подготовку корня на Btrfs, настройку Snapper, снапшот перед обновлением и возврат к рабочему состоянию. Отдельно — различия между openSUSE и Ubuntu/Mint.
Проверяем, что корень на Btrfs
Snapper работает с Btrfs и тонкими томами LVM; здесь — только Btrfs. В Linux Mint по умолчанию используется ext4, поэтому посмотрите, на какой файловой системе смонтирован корень:
findmnt -t btrfs /
findmnt -no FSTYPE,UUID /
lsblk -f
sudo btrfs subvolume list /
Если findmnt ничего не вывел, а lsblk показывает ext4, снапшоты Btrfs недоступны. Переход с ext4 без переустановки возможен через btrfs-convert, но это рискованная операция. Для рабочей машины надёжнее переустановка с отдельным /home. Не начинайте конвертацию без проверенной резервной копии.
На Btrfs корень часто смонтирован как @, а домашние каталоги — как @home. Проверьте subvol= в /etc/fstab: от него зависит загрузка после отката. Запись subvolid= усложняет восстановление.
Установка и создание конфигурации
В Debian, Ubuntu и Mint пакет snapper есть в репозиториях. Создайте конфигурацию для корня — команда создаст подтом .snapshots и файл /etc/snapper/configs/root:
sudo apt install snapper btrfs-progs
sudo snapper -c root create-config /
sudo snapper -c root list
systemctl list-timers | grep snapper
Если пустой /.snapshots уже существует, create-config может отказаться работать: удалите каталог через rmdir и повторите. Непустой каталог не трогайте.
Проверьте таймеры snapper-timeline.timer и snapper-cleanup.timer: первый создаёт снапшоты по расписанию, второй удаляет старые. Для домашней машины это полезно, но количество состояний стоит ограничить.
Снапшот перед обновлением
Главное правило: снапшот делается до изменения пакетов. DESCRIPTION поможет понять, что это было за состояние; create возвращает номер для отката:
sudo snapper -c root create -d "before apt upgrade"
sudo snapper -c root list --columns number,date,description
sudo apt update
sudo apt full-upgrade -y
После обновления создайте второй снапшот «after upgrade»: так видна граница изменений. Команды status и diff покажут, какие файлы тронул конкретный пакет:
sudo snapper -c root status 12..13
sudo snapper -c root diff 12..13
sudo snapper -c root list
Номера условные — подставьте свои. Если обновление прошло успешно, оставьте снапшот на несколько дней, затем удалите или дождитесь очистки.
Настройка хранения и очистки
Файл /etc/snapper/configs/root задаёт, сколько снапшотов хранить и как часто их создавать. Основные параметры: TIMELINE_CREATE, TIMELINE_LIMIT_HOURLY, TIMELINE_LIMIT_DAILY, NUMBER_LIMIT и NUMBER_LIMIT_IMPORTANT. Ноль отключает ограничение — не ставьте его без понимания последствий.
sudo snapper -c root get-config
sudo snapper -c root set-config "TIMELINE_CREATE=yes"
sudo snapper -c root set-config "NUMBER_LIMIT=10"
sudo snapper -c root set-config "NUMBER_LIMIT_IMPORTANT=5"
sudo snapper -c root cleanup number
Снапшоты занимают место только изменёнными блоками, но при активной работе расход растёт. Следите за свободным местом: при заполнении Btrfs до предела система может перейти в режим только для чтения.
btrfs filesystem usage /
sudo btrfs filesystem df /
sudo snapper -c root delete 5
Удаляйте снапшоты выборочно, если они больше не нужны. Снапшот на том же диске не спасает от отказа накопителя, поэтому копируйте важные данные на внешний носитель.
Штатный откат и его ограничения
В openSUSE команда snapper rollback создаёт снапшот текущего состояния, делает выбранный снапшот доступным для записи и настраивает загрузку. После перезагрузки система стартует из восстановленного состояния; в GRUB доступны и пункты загрузки снапшотов.
sudo snapper -c root rollback 12
sudo reboot
В Ubuntu и Mint с subvol=@ автоматический rollback меняет подтом по умолчанию, но fstab продолжает указывать на старый @. Загрузка может не измениться или не состояться. Надёжнее ручной откат с live-носителя.
Порядок действий: загрузитесь с флешки, смонтируйте верхний уровень Btrfs и посмотрите список подтомов. Затем переименуйте текущий @ и создайте новый из нужного снапшота:
lsblk -f
sudo mount /dev/nvme0n1p2 /mnt
sudo btrfs subvolume list /mnt
sudo mv /mnt/@ /mnt/@broken-2026-11-05
sudo btrfs subvolume snapshot /mnt/@broken-2026-11-05/.snapshots/12/snapshot /mnt/@
sudo btrfs property set /mnt/@ ro false
sudo rmdir /mnt/@/.snapshots
sudo mv /mnt/@broken-2026-11-05/.snapshots /mnt/@/.snapshots
sudo umount /mnt
Имя устройства и номер подставьте свои. Снапшот read-only: свойство ro снимается явно. Каталог .snapshots — отдельный подтом: заглушку в новом @ удаляют через rmdir, хранилище из старого @ переносят на её место. После перезагрузки проверьте fstab; старый подтом удаляйте только после успешной загрузки.
Точечный откат файлов без перезагрузки
Иногда проще вернуть не всю систему, а несколько конфигурационных файлов. Команда undochange работает между двумя снапшотами и принимает список путей. Это удобно после неудачной правки репозиториев или настроек сети:
sudo snapper -c root undochange 12..13 /etc/apt
sudo snapper -c root undochange 12..13 /etc/fstab
sudo systemctl restart systemd-networkd
Проверяйте результат через status: команда покажет созданные, изменённые и удалённые файлы. Не откатывайте /var/lib/dpkg вслепую: рассогласование базы пакетов и файлов может сломать обновления.
Если система не загружается
Сначала попробуйте аварийный режим или предыдущее ядро в меню GRUB. Если установлен grub-btrfs, там могут быть пункты со снапшотами — это самый быстрый путь. При загрузке с live-носителя проверьте, что раздел не смонтирован, иначе btrfs не даст изменить подтомы.
- Убедитесь, что вы монтируете именно верхний уровень Btrfs, а не подтом @.
- Проверьте свободное место: переполненный раздел мешает создавать снапшоты и монтировать систему для записи.
- Не удаляйте старый подтом до первой успешной загрузки.
- После восстановления обновите initramfs и загрузчик, если менялись ядро или разделы.
- Проверьте /etc/fstab на subvol и UUID — частая причина неудачной загрузки после ручных операций.
Итог
Snapper превращает Btrfs из набора полезных возможностей в понятный механизм отката: снапшот перед обновлением, второй после, при необходимости — возврат системы или отдельных файлов. На openSUSE процесс отлажен производителем, в Ubuntu и Mint требуется аккуратность с subvol=@ и ручной откат с live-носителя. Главное — не считать снапшоты резервной копией и проверять восстановление до того, как оно понадобится. Один тестовый откат на виртуальной машине убедительнее любых обещаний, что «всё точно загрузится».