Skip to content

Instantly share code, notes, and snippets.

@KweezyCode
Last active August 14, 2025 17:33
Show Gist options
  • Save KweezyCode/cf9306927c97a627f081c6096cfd0918 to your computer and use it in GitHub Desktop.
Save KweezyCode/cf9306927c97a627f081c6096cfd0918 to your computer and use it in GitHub Desktop.
BTRBK DOCS

Главная идея: конфиг — это иерархия глобальные настройки → volume → subvolume → target. Настройки наследуются вниз и могут переопределяться внизу.


Как устроен конфиг btrbk

  • Глобальные опции — влияют на всё ниже.
  • volume /ПУТЬ_ИЛИ_SSH_URL — «база» (точка, где лежат субтома btrfs), локально или по ssh.
  • subvolume ИМЯ_ИЛИ_ПУТЬ — что именно бэкапим/снимашотим.
  • target ПУТЬ_ИЛИ_SSH_URL — куда везём бэкапы (можно несколько target’ов на один subvolume).
  • snapshot_dir ИМЯ/ПУТЬ — где хранить локальные снапшоты на том же файловом разделе, что и источник.

Фишка: btrbk сам создаёт снапшоты и передаёт их инкрементально на targets. Каталоги для снапшотов/целей нужно подготовить (подробнее ниже).


Опции и что они означают

Я перечислю все «живые» опции из твоего текста. Укажу область (глобальная/volume/subvolume/target) и короткий пример.

timestamp_format

  • Где: глобально.

  • Что: формат метки времени в именах снапшотов/бэкапов.

  • Значения: чаще используют long (с датой и временем) или более короткий формат (только дата). В примерах документации показывают YYYYMMDD для простоты — у тебя будет зависеть от формата и частоты запуска.

  • Пример:

    timestamp_format long
    

snapshot_preserve_min

  • Где: глобально/volume/subvolume.

  • Что: минимально гарантированное хранение всех снапшотов (независимо от расписания).

  • Значения: продолжительность (например 18h, 2d) или спец. значения all (хранить все) / no (не гарантировать минимум).

  • Зачем: чтобы внезапно созданные/ручные снапшоты не удалились слишком рано.

  • Примеры:

    snapshot_preserve_min 18h
    snapshot_preserve_min all      # хранить все снапшоты (часто на «источнике», если тянем с другой машины)
    

snapshot_preserve

  • Где: глобально/volume/subvolume.

  • Что: «лестница удержания» для снапшотов (на источнике): сколько оставлять часовых/дневных/недельных/месячных.

  • Формат: список интервалов: 48h 14d 10w *m — «все за последние 48 часов», «ежедневные 14 дней», «еженедельные 10 недель», «все месячные навсегда».

  • Пример:

    snapshot_preserve 48h
    snapshot_preserve 14d 10w *m
    

target_preserve_min

  • Где: глобально/volume/subvolume/target.

  • Что: такой же минимум, но для бэкапов на целевых площадках.

  • Значения: длительность или no (вообще без минимума).

  • Пример:

    target_preserve_min no
    

target_preserve

  • Где: глобально/volume/subvolume/target.

  • Что: «лестница удержания» для бэкапов на целевой стороне.

  • Пример:

    target_preserve 20d 10w *m
    

volume

  • Где: секция.

  • Что: базовый путь или ssh-URL до btrfs-тома, внутри которого находятся subvolume’ы.

  • Формы: volume /mnt/btr_pool или volume ssh://host/path.

  • Пример:

    volume /mnt/btr_pool
      subvolume home
    

subvolume

  • Где: внутри volume (или как абсолютный путь глобально).

  • Что: имя/путь субтома, который нужно снапшотить/бэкапить.

  • Примеры:

    # имя внутри volume
    subvolume home
    # абсолютный путь без секции volume
    subvolume /mnt/btr_pool/home
    

snapshot_dir

  • Где: глобально/volume/subvolume.

  • Что: где хранить локальные снапшоты на источнике. Btrbk не создаёт каталог автоматически — сделай mkdir заранее.

  • Значения: имя папки внутри volume или абсолютный путь.

  • Примеры:

    # как имя внутри volume
    volume /mnt/btr_pool
      snapshot_dir btrbk_snapshots
    # как абсолютный путь
    snapshot_dir /mnt/btr_pool/btrbk_snapshots
    

target

  • Где: глобально/volume/subvolume.

  • Что: куда складывать инкрементальные бэкапы (можно несколько target на один subvolume).

  • Формы: локальный путь, ssh-URL, а ещё «raw»-цели (см. ниже).

  • Примеры:

    target /mnt/btr_backup/mylaptop
    target ssh://myserver.example.org/mnt/btr_backup/mylaptop
    

snapshot_create

  • Где: глобально/volume/subvolume.

  • Что: управляет созданием снапшотов.

  • Значения:

    • yes (по умолчанию) — создавать по расписанию/запуску,
    • no — никогда (например, если эта машина только «тянет» готовые снапшоты с другой),
    • ondemand — создавать только когда доступен target (например, USB-диск подключён).
  • Пример:

    snapshot_create ondemand
    

ssh_identity

  • Где: глобально.

  • Что: путь к приватному ssh-ключу для всех ssh-операций btrbk.

  • Пример:

    ssh_identity /etc/btrbk/ssh/id_rsa
    

ssh_user

  • Где: внутри target (ssh), иногда глобально.

  • Что: юзер для ssh, если не root или не указан в URL.

  • Пример:

    target raw ssh://cloud.example.com/backup
      ssh_user btrbk
    

backend_remote

  • Где: глобально.

  • Что: чем на удалённой стороне запускать btrfs ….

  • Значения:

    • btrfs-progs-sudo — вызывать через sudo на удалёнке (на удалёнке настроить sudoers),
    • btrfs-progs-btrbk — использовать набор «ущемлённых» бинарников с cap/setuid (тонкая настройка прав).
  • Примеры:

    backend_remote btrfs-progs-sudo
    # или
    backend_remote btrfs-progs-btrbk
    

group

  • Где: в volume.

  • Что: произвольные метки для группировки (удобно для VM: vm vm01 и т. п.). Влияет на имена/фильтры при списке.

  • Пример:

    volume ssh://localhost:2201/mnt/btr_pool
      group vm vm01
    

snapshot_name

  • Где: в subvolume.

  • Что: переименовывает «базовую часть» имени снапшотов/бэкапов (по умолчанию берётся имя субтома).

  • Пример:

    subvolume home
      snapshot_name vm01-home
    

RAW-цели и шифрование (бэкап в файл, не на btrfs)

Эти опции используются, когда target — не btrfs, а набор файлов send-stream (опционально сжатые и зашифрованные).

  • raw_target_compress — чем сжимать (xz, gzip, zstd и т. п.).
  • raw_target_encrypt — чем шифровать (gpg).
  • gpg_keyring — путь к публиному keyring’у.
  • gpg_recipient — получатель (ключ) для шифрования.

Пример:

raw_target_compress xz
raw_target_encrypt  gpg
gpg_keyring         /etc/btrbk/gpg/pubring.gpg
gpg_recipient       [email protected]

volume /mnt/btr_pool
  subvolume home
    target raw ssh://cloud.example.com/backup
      ssh_user btrbk
      # incremental no   # (если хочешь только полные «сырые» бэкапы)

На raw-целях создаются два файла на каждую дату: .btrfs.xz.gpg (данные) и .info (метаданные для btrbk).


Мини-справка по синтаксису «сроков хранения»

  • Единицы: h (час), d (день), w (неделя), m (месяц).

  • Запись вроде 48h 14d 10w *m читаем так:

    • всё подряд за 48 часов,
    • далее — дневные за 14 дней,
    • далее — недельные за 10 недель,
    • *m — все месячные без срока (навсегда).
  • Для минимума (*_preserve_min): длительность или спец. значения all / no.


Готовые конфиги-шаблоны (с комментариями)

1) «Тайм-машина» — только локальные снапшоты

# Читаемые имена с временем (или убери, если устраивает дата)
timestamp_format long

# Минимум: держать любые снапшоты не меньше 18 часов
snapshot_preserve_min 18h
# Лестница удержания (пример: оставить 48 последних часов)
snapshot_preserve 48h

# Где складывать снапшоты (создай каталог вручную!)
# mkdir -p /mnt/btr_pool/btrbk_snapshots
volume /mnt/btr_pool
  snapshot_dir btrbk_snapshots
  subvolume home

Запуск «сухой прогонки»: btrbk -n -v run План: btrbk -n -S run


2) Локальные снапшоты + бэкап на USB-диск

# Снапшоты на источнике: 2 дня минимум, 14 дней по дневной сетке
snapshot_preserve_min 2d
snapshot_preserve     14d

# На цели (USB): без минималки, но 20 дней дневных, 10 недель недельных, месячные — навсегда
target_preserve_min no
target_preserve     20d 10w *m

# Создавать снапшоты только когда диск под рукой
# snapshot_create ondemand

# Локальные снапшоты в этом каталоге (создать заранее)
snapshot_dir btrbk_snapshots

volume /mnt/btr_pool
  # Куда бэкапим (каталог должен существовать)
  target /mnt/btr_backup/mylaptop
  subvolume rootfs
  subvolume home

3) Хост сам пушит бэкапы и локально, и на сервер

ssh_identity /etc/btrbk/ssh/id_rsa

volume /mnt/btr_pool
  subvolume rootfs
    target /mnt/btr_backup/mylaptop
    target ssh://myserver.example.org/mnt/btr_backup/mylaptop

4) Сервер сам тянет бэкапы с нескольких хостов (pull)

ssh_identity /etc/btrbk/ssh/id_rsa

# Тянем с alpha
volume ssh://alpha.example.org/mnt/btr_pool
  target /mnt/btr_backup/alpha
  subvolume rootfs
  subvolume home

# Тянем с beta
volume ssh://beta.example.org/mnt/btr_pool
  target /mnt/btr_backup/beta
  subvolume rootfs
  subvolume dbdata

5) Сервер-бэкапёр тянет только недельные/месячные, не трогая источник

target_preserve_min no
target_preserve     0d 10w *m

volume ssh://192.168.0.42/mnt/btr_pool
  target /mnt/btr_backup/my-laptop
  subvolume home
    snapshot_dir          btrbk_snapshots
    snapshot_preserve_min all   # на источнике ничего не удаляем
    snapshot_create       no    # и не создаём (только забираем готовые)

6) Небтрфс-источник (rsync → btrfs-синхро-субтом → снапшоты)

# На диске бэкапа заранее:
# btrfs subvolume create /mnt/btr_backup/myhost_sync

volume /mnt/btr_backup
  subvolume myhost_sync
    snapshot_name myhost
    snapshot_preserve_min latest   # держать хотя бы последний
    snapshot_preserve      14d 20w *m

Сначала синхронизируешь (rsync/rdiff-backup и т. п.) в myhost_sync, потом btrbk run делает снапшот.


7) ВМки на одном хосте (разные SSH-порты, свои имена)

# Все бэкапы сложить в один корень
target /mnt/btr_backup/

volume ssh://localhost:2201/mnt/btr_pool
  group vm vm01
  subvolume home
    snapshot_name vm01-home
  subvolume data
    snapshot_name vm01-data

volume ssh://localhost:2202/mnt/btr_pool
  group vm vm02
  subvolume home
    snapshot_name vm02-home

Полезные приёмы и проверки

  • Проверка конфига без записи: btrbk -c /etc/btrbk/… -v -n run

  • Посмотреть расписание, что именно будет создано/удалено: btrbk -n -S run

  • Для корня / удобно монтировать subvolid=5 (корень btrfs), чтобы видеть все субтома. Пример /etc/fstab из доки:

    /dev/sda1  /mnt/btr_pool  btrfs  subvolid=5,noatime  0 0
    
  • Каталог snapshot_dir создаём вручную. Btrbk сам подкаталоги для субтомов создаст, но базовую папку — нет.

  • При ssh доступе укажи ssh_identity, а на удалёнке разреши нужные команды (через root, sudo или btrfs-progs-btrbk).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment