Снапшоты btrfs превращают сломанное обновление из вечера переустановки в десятиминутный откат. Но работает это только тогда, когда подсистема настроена правильно: конфиг snapper, автоматическое расписание, лимиты хранения и чистка. Ниже — как собрать всё это с первого дня после установки, чтобы система сама делала снапшоты, сама удаляла старые и не забивала диск.
Снапшот, созданный в момент поломки, бесполезен: он фиксирует уже сломанную систему. Точка отката должна лежать заранее — до того, как pacman -Syu принесёт регрессию. Если настроить подсистему в первый же день, дальше она работает сама: снапшоты появляются по расписанию и перед каждым обновлением, а старые удаляются без твоего участия.
Разметка подтомов и установка snapper с нуля разобраны в гайде про установку Arch с btrfs-снапшотами. Здесь — следующий шаг: правильная настройка конфигурации, автоматики и чистки.
Установка — один пакет:
sudo pacman -S snapper
Дальше создай конфигурацию для корня:
sudo snapper -c root create-config /
Команда делает три вещи:
/etc/snapper/configs/root — все настройки подсистемы живут здесь;@snapshots, смонтированный в /.snapshots);Конфиг создаётся из шаблона /usr/share/snapper/config-templates/default, поэтому в нём уже есть все ключевые параметры. Но значения по умолчанию не всегда подходят для десктопа — их и будем править дальше.
Проверить, что конфиг на месте:
snapper list-configs
В выводе увидишь имя конфига, подтом и тип файловой системы.
Важный момент: create-config создаёт конфиг, но автоматические снапшоты по расписанию не появятся сами по себе. Нужно два шага: включить timeline в конфиге и запустить таймеры.
Открой /etc/snapper/configs/root и проверь секцию timeline:
TIMELINE_CREATE="yes"
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="4"
TIMELINE_LIMIT_MONTHLY="6"
TIMELINE_LIMIT_YEARLY="2"
TIMELINE_CREATE="yes" включает расписание: раз в час snapper делает часовой снапшот, раз в день — дневной, и так далее по уровням. Лимиты говорят, сколько снапшотов каждого уровня хранить: 5 часовых, 7 дневных, 4 недельных, 6 месячных и 2 годовых. Политика простая: чем свежее снапшот, тем больше их держим. Часовые нужны на день-два, дневные — на неделю, а месячные и годовые — на годы.
Рядом с лимитами лежит TIMELINE_MIN_AGE — минимальный возраст снапшота в секундах, прежде чем его можно удалить. Значение 1800 (полчаса) защищает свежие снапшоты от случайной чистки, не трогай его без причины.
Дальше включи таймеры:
sudo systemctl enable --now snapper-timeline.timer snapper-cleanup.timer
snapper-timeline.timer создаёт снапшоты по расписанию, snapper-cleanup.timer удаляет старые по лимитам. Без них конфиг есть, а автоматики нет.
Timeline закрывает регулярные точки отката, но перед обновлением хочется гарантированную пару «до/после». За это отвечает snap-pac — набор ALPM-хуков:
sudo pacman -S snap-pac
Теперь каждая операция pacman — установка, обновление, удаление — сама создаёт пару снапшотов: «до» и «после». Если pacman -Syu что-то сломал, в списке уже лежит точка отката ровно перед обновлением.
Проверить, что хуки на месте:
pacman -Q snap-pac
Если пакет в выводе — хуки работают. Снапшотов станет заметно больше, но лимиты timeline и чистка не дадут им копиться бесконечно.
Снапшот бесполезен, если в него нельзя загрузиться. grub-btrfs выносит все снапшоты snapper в меню GRUB отдельным подменю:
sudo pacman -S grub-btrfs
sudo grub-mkconfig -o /boot/grub/grub.cfg
После пересборки в меню появится подменю со снапшотами. Чтобы новые снапшоты попадали туда автоматически, включи демон:
sudo systemctl enable --now grub-btrfsd.service
Демону нужен inotify-tools — поставь его как опциональную зависимость. Дальше каждый снапшот сам появляется в GRUB без ручной пересборки. Как загружаться в снапшот и закреплять откат — в статье про стратегию отката.
Чистка — вторая половина подсистемы. Без неё снапшоты копятся годами и съедают диск. snapper-cleanup.timer, который ты включил выше, раз в день запускает snapper cleanup timeline — команду, которая удаляет снапшоты сверх лимитов. То есть лимиты из конфига работают не только как «сколько хранить», но и как «что удалять».
Иногда чистить нужно вручную — например, после серии экспериментов. Удалить диапазон снапшотов:
sudo snapper -c root delete 1..5
Сначала посмотри список и убедись, что номера правильные:
snapper list
Сколько места отдавать под снапшоты? Ориентир: на диске 500 ГБ — заложи 30–50 ГБ. Это покрывает месяцы обновлений и не мешает остальным файлам. Проверить, сколько занимают снапшоты, можно через btrfs filesystem usage / или df -h /.snapshots.
Если снапшоты вдруг заняли больше — посмотри, какие из них самые старые, и удали именно их: snapper list покажет даты, а лишние годовые точки обычно не жалко.
После настройки сделай контрольную проверку. Список снапшотов:
snapper list
Список подтомов:
btrfs subvolume list /
Таймеры:
systemctl list-timers | grep snapper
Если в snapper list появляются снапшоты с типом timeline и pre/post, а таймеры активны — подсистема работает. Дальше остаётся только пользоваться: обновляться без страха и откатываться, когда что-то пошло не так. Привычка делать снапшот перед обновлением вручную больше не нужна — автоматика справляется сама.
Если домашняя папка в отдельном подтоме @home, снапшоты корня её не трогают — и это правильно: откат системы не должен задевать личные файлы. Для /home можно создать отдельный конфиг snapper -c home create-config /home, но на десктопе это обычно лишнее. Личные файлы лучше бэкапить, а не снапшотить.
Timeline — регулярные точки по расписанию: каждый час, день, неделю. snap-pac — пары «до/после» вокруг каждой операции pacman. Они дополняют друг друга: timeline страхует от медленных изменений, snap-pac — от конкретного обновления.
Уменьши лимиты в /etc/snapper/configs/root — например, TIMELINE_LIMIT_HOURLY="3" вместо 5. Или удали лишнее вручную: snapper -c root delete <номера>. Главное — не отключай snapper-cleanup.timer, иначе снапшоты начнут копиться.
Можно: откат делается из live-USB ручной подменой подтома. Но grub-btrfs даёт главное — загрузку в снапшот за пару минут прямо из меню GRUB. Без него диагностика «сломалось или нет» превращается в возню с live-средой.
Снапшоты перестанут создаваться по расписанию, а старые перестанут удаляться. Хуки snap-pac продолжат работать, но без чистки список будет расти, пока не закончится место на диске. Поэтому таймеры — обязательная часть подсистемы, а не опция.
Правильная подсистема снапшотов — это три части: конфиг snapper с включённым timeline и лимитами, хуки snap-pac для каждой операции pacman и grub-btrfs для загрузки в точки отката. Плюс таймеры, которые создают и чистят снапшоты без твоего участия. Настрой один раз в первый день — и любое обновление перестаёт быть страшным: система сама хранит историю, сама чистит старые точки, а ты в любой момент можешь вернуться на день, неделю или месяц назад.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии