Все об Arch Linux

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

Снапшоты 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 с включённым timeline и лимитами, хуки snap-pac для каждой операции pacman и grub-btrfs для загрузки в точки отката. Плюс таймеры, которые создают и чистят снапшоты без твоего участия. Настрой один раз в первый день — и любое обновление перестаёт быть страшным: система сама хранит историю, сама чистит старые точки, а ты в любой момент можешь вернуться на день, неделю или месяц назад.



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

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

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

Комментарии

Загрузка…

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

Telegram Max