Автоматизация снапшотов Btrfs в Arch Linux: Профессиональная настройка для разработчиков

Файловая система Btrfs — это не просто альтернатива ext4. Её встроенные возможности создания снапшотов, управления томами и восстановления данных давно стали must-have инструментом для разработчиков, работающих с критически важными системами. В Arch Linux, где пользователи часто экспериментируют с пакетами и ядрами, автоматизированные снапшоты Btrfs могут спасти десятки часов на восстановление системы после неудачного обновления или сбоя конфигурации.

Почему Btrfs, а не LVM или rsync?

Главные преимущества Btrfs для резервирования:

  1. Мгновенные снапшоты с Copy-on-Write (CoW) — создание точки восстановления занимает микросекунды и не копирует данные физически.
  2. Интеграция с субvolume — раздельная обработка корневой системы (/) и домашних директорий (/home) в отдельных субволумах.
  3. Дедупликация и сжатие — экономия до 30-40% SSD/NVME пространства при правильной настройке.

Сравнивать с LVM смысла мало: снапшоты LVM требуют предварительного выделенного пространства и часто приводят к fragmentation. Rsync же вообще не отслеживает изменения на уровне блоков.

Практика: Настройка Btrfs в Arch Linux

Шаг 1: Разметка диска с субволумами

При установке Arch создаём разделы с типом Btrfs и разбиваем на субволумы:

bash
mkfs.btrfs -L ARCH /dev/nvme0n1p2
mount /dev/nvme0n1p2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
umount /mnt

В /etc/fstab явно указываем субволумы:

bash
UUID=<ID> / btrfs rw,noatime,compress=zstd:3,ssd,space_cache=v2,subvol=@ 0 0
UUID=<ID> /home btrfs rw,noatime,compress=zstd:3,ssd,space_cache=v2,subvol=@home 0 0

Почему compress=zstd:3? Алгоритм zstd даёт лучший компромисс между скоростью и степенью сжатия. Уровень 3 — оптимален для современных процессоров.

Шаг 2: Интеграция с pacman через хуки

Создаём /etc/pacman.d/hooks/95-btrfs-snapshots.hook:

ini
[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Package
Target = *

[Action]
Description = Creating Btrfs snapshots...
When = PreTransaction
Exec = /usr/bin/btrfs subvolume snapshot -r / /.snapshots/$(date +%Y-%m-%d_%H:%M:%S)_pre-transaction
Depends = btrfs-progs

Этот хук создаёт read-only снапшот перед каждым обновлением пакетов. Важно использовать -r (read-only), чтобы гарантировать целостность точки восстановления.

Шаг 3: Автоматическая очистка старых снапшотов

Никто не хочет вручную удалять десятки снапшотов. Пишем скрипт /usr/local/bin/cleanup-snapshots:

bash
#!/bin/bash
RETENTION_DAYS=7
SNAPSHOT_DIR=/.snapshots

find "$SNAPSHOT_DIR" -maxdepth 1 -mtime +$RETENTION_DAYS -name "*_pre-transaction" -exec btrfs subvolume delete {} \;

Добавляем systemd таймер /etc/systemd/system/snapshots-cleanup.timer:

ini
[Unit]
Description=Daily cleanup of Btrfs snapshots

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Почему find, а не btrfs собственные инструменты? Потому что метаданные снапшотов — это обычные директории, и find даёт гибкость в фильтрации по времени.

Восстановление системы из снапшота: не только chroot

Допустим, обновление ядра сломало систему. Процесс восстановления:

  1. Загрузка с Live USB
  2. Монтирование основного раздела:
bash
mount /dev/nvme0n1p2 /mnt
cd /mnt/.snapshots/2024-03-15_12:00:00_pre-transaction
  1. Удаление сломанного субволума и замена его на снапшот:
bash
btrfs subvolume delete /mnt/@
btrfs subvolume snapshot ./@ /mnt/@
  1. Важно: Обновить fstab, если менялись UUID разделов (маловероятно, но возможно):
bash
blkid /dev/nvme0n1p2 >> /mnt/@/etc/fstab

Когда Btrfs не панацея: Риски и лимиты

  1. Фрагментация метаданных: При активной записи/удалении мелких файлов производительность падает. Решение — периодическая дефрагментация:
bash
btrfs filesystem defragment -r -v /path
  1. Квоты на субволумы: Если не ограничить размер снапшотов, они могут заполнить весь диск. Включите квоты:
bash
btrfs quota enable /mnt
btrfs qgroup limit 10G /.snapshots

Альтернативы для продвинутых: btrbk и snapper

Для сложных сценариев (например, удалённое реплицирование снапшотов) используйте специализированные утилиты:

  • btrbk — управление снапшотами через конфиг с поддержкой ssh и фильтрации субволумов
  • snapper — интеграция с графическими инструментами вроде Timeshift

Но для минималистичной установки Arch достаточно нативных средств Btrfs.

Заключение

Btrfs — это не «ещё одна файловая система», а полноценная платформа для управления дисковым пространством. Его автоматизированные снапшоты интегрируются в повседневные задачи разработчика: обновление пакетов, тестирование скриптов, эксперименты с конфигурациями. При правильной настройке вы получаете систему, которая:

  • Защищает от 99% программных сбоев
  • Экономит место через сжатие
  • Позволяет мгновенно откатывать изменения

Настройка займёт 30 минут, а сэкономленные часы (и нервы) исчисляются сотнями. Цена ошибки в production-среде слишком высока, чтобы игнорировать такие инструменты.

text