Снапшоты btrfs с первого дня: настройка, автоматика, чистка
Снапшоты btrfs превращают сломанное обновление из вечера переустановки в десятиминутный откат. Но работает это только тогда, когда подсистема настроена правильно: конфиг snapper, автоматическое расписание, лимиты хранения и чистка. Ниже как собрать всё это с первого дня после установки, чтобы система сама делала снапшоты, сама удаляла старые и не забивала диск.
Почему снапшоты нужно настраивать сразу, а не после первой поломки
Снапшот, созданный в момент поломки, бесполезен: он фиксирует уже сломанную систему. Точка отката должна лежать заранее до того, как pacman -Syu принесёт регрессию. Если настроить подсистему в первый же день, дальше она работает сама: снапшоты появляются по расписанию и перед каждым обновлением, а старые удаляются без твоего участия.
Разметка подтомов и установка snapper с нуля разобраны в гайде про установку Arch с btrfs-снапшотами. Здесь следующий шаг: правильная настройка конфигурации, автоматики и чистки.
Как установить snapper и создать конфиг
Установка (один пакет):
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 автоматические снапшоты? Нет
Важный момент: 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 удаляет старые по лимитам. Без них конфиг есть, а автоматики нет.
Как сделать снапшоты до и после каждого pacman: snap-pac
Timeline закрывает регулярные точки отката, но перед обновлением хочется гарантированную пару «до/после». За это отвечает snap-pac, набор ALPM-хуков:
sudo pacman -S snap-pac
Теперь каждая операция pacman (установка, обновление, удаление) сама создаёт пару снапшотов: «до» и «после». Если pacman -Syu что-то сломал, в списке уже лежит точка отката ровно перед обновлением.
Проверить, что хуки на месте:
pacman -Q snap-pac
Если пакет в выводе, хуки работают. Снапшотов станет заметно больше, но лимиты timeline и чистка не дадут им копиться бесконечно.
Как добавить снапшоты в меню GRUB: grub-btrfs
Снапшот бесполезен, если в него нельзя загрузиться. 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 чистит старые снапшоты
Чистка: вторая половина подсистемы. Без неё снапшоты копятся годами и съедают диск. 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, снапшоты корня её не трогают, и это правильно: откат системы не должен задевать личные файлы. Для /home можно создать отдельный конфиг snapper -c home create-config /home, но на десктопе это обычно лишнее. Личные файлы лучше бэкапить, а не снапшотить.
Чем timeline-снапшоты отличаются от снапшотов snap-pac?
Timeline: регулярные точки по расписанию: каждый час, день, неделю. snap-pac: пары «до/после» вокруг каждой операции pacman. Они дополняют друг друга: timeline страхует от медленных изменений, snap-pac от конкретного обновления.
Что делать, если снапшоты съедают слишком много места?
Уменьши лимиты в /etc/snapper/configs/root, например, TIMELINE_LIMIT_HOURLY="3" вместо 5. Или удали лишнее вручную: snapper -c root delete <номера>. Главное, не отключай snapper-cleanup.timer, иначе снапшоты начнут копиться.
Можно ли обойтись без grub-btrfs?
Можно: откат делается из live-USB ручной подменой подтома. Но grub-btrfs даёт главное, загрузку в снапшот за пару минут прямо из меню GRUB. Без него диагностика «сломалось или нет» превращается в возню с live-средой.
Что будет, если отключить таймеры?
Снапшоты перестанут создаваться по расписанию, а старые перестанут удаляться. Хуки snap-pac продолжат работать, но без чистки список будет расти, пока не закончится место на диске. Поэтому таймеры: обязательная часть подсистемы, а не опция.
Полезные ресурсы
- Снапшот перед обновлением: привычка и быстрые советы
- Сломалось после обновления: единый гайд по откату: все способы восстановления в одном месте
- Snapper: ArchWiki: конфигурации, timeline, лимиты
- Btrfs: ArchWiki: подтома, снапшоты, обслуживание
Заключение
Правильная подсистема снапшотов это три части: конфиг snapper с включённым timeline и лимитами, хуки snap-pac для каждой операции pacman и grub-btrfs для загрузки в точки отката. Плюс таймеры, которые создают и чистят снапшоты без твоего участия. Настрой один раз в первый день, и любое обновление перестаёт быть страшным: система сама хранит историю, сама чистит старые точки, а ты в любой момент можешь вернуться на день, неделю или месяц назад.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии