Главная идея: конфиг — это иерархия глобальные настройки → volume → subvolume → target. Настройки наследуются вниз и могут переопределяться внизу.
- Глобальные опции — влияют на всё ниже.
- volume /ПУТЬ_ИЛИ_SSH_URL — «база» (точка, где лежат субтома btrfs), локально или по ssh.
- subvolume ИМЯ_ИЛИ_ПУТЬ — что именно бэкапим/снимашотим.
- target ПУТЬ_ИЛИ_SSH_URL — куда везём бэкапы (можно несколько target’ов на один subvolume).
- snapshot_dir ИМЯ/ПУТЬ — где хранить локальные снапшоты на том же файловом разделе, что и источник.
Фишка: btrbk сам создаёт снапшоты и передаёт их инкрементально на targets. Каталоги для снапшотов/целей нужно подготовить (подробнее ниже).
Я перечислю все «живые» опции из твоего текста. Укажу область (глобальная/volume/subvolume/target) и короткий пример.
-
Где: глобально.
-
Что: формат метки времени в именах снапшотов/бэкапов.
-
Значения: чаще используют
long(с датой и временем) или более короткий формат (только дата). В примерах документации показываютYYYYMMDDдля простоты — у тебя будет зависеть от формата и частоты запуска. -
Пример:
timestamp_format long
-
Где: глобально/volume/subvolume.
-
Что: минимально гарантированное хранение всех снапшотов (независимо от расписания).
-
Значения: продолжительность (например
18h,2d) или спец. значенияall(хранить все) /no(не гарантировать минимум). -
Зачем: чтобы внезапно созданные/ручные снапшоты не удалились слишком рано.
-
Примеры:
snapshot_preserve_min 18h snapshot_preserve_min all # хранить все снапшоты (часто на «источнике», если тянем с другой машины)
-
Где: глобально/volume/subvolume.
-
Что: «лестница удержания» для снапшотов (на источнике): сколько оставлять часовых/дневных/недельных/месячных.
-
Формат: список интервалов:
48h 14d 10w *m— «все за последние 48 часов», «ежедневные 14 дней», «еженедельные 10 недель», «все месячные навсегда». -
Пример:
snapshot_preserve 48h snapshot_preserve 14d 10w *m
-
Где: глобально/volume/subvolume/target.
-
Что: такой же минимум, но для бэкапов на целевых площадках.
-
Значения: длительность или
no(вообще без минимума). -
Пример:
target_preserve_min no
-
Где: глобально/volume/subvolume/target.
-
Что: «лестница удержания» для бэкапов на целевой стороне.
-
Пример:
target_preserve 20d 10w *m
-
Где: секция.
-
Что: базовый путь или ssh-URL до btrfs-тома, внутри которого находятся subvolume’ы.
-
Формы:
volume /mnt/btr_poolилиvolume ssh://host/path. -
Пример:
volume /mnt/btr_pool subvolume home
-
Где: внутри
volume(или как абсолютный путь глобально). -
Что: имя/путь субтома, который нужно снапшотить/бэкапить.
-
Примеры:
# имя внутри volume subvolume home # абсолютный путь без секции volume subvolume /mnt/btr_pool/home
-
Где: глобально/volume/subvolume.
-
Что: где хранить локальные снапшоты на источнике. Btrbk не создаёт каталог автоматически — сделай
mkdirзаранее. -
Значения: имя папки внутри
volumeили абсолютный путь. -
Примеры:
# как имя внутри volume volume /mnt/btr_pool snapshot_dir btrbk_snapshots # как абсолютный путь snapshot_dir /mnt/btr_pool/btrbk_snapshots
-
Где: глобально/volume/subvolume.
-
Что: куда складывать инкрементальные бэкапы (можно несколько target на один subvolume).
-
Формы: локальный путь, ssh-URL, а ещё «raw»-цели (см. ниже).
-
Примеры:
target /mnt/btr_backup/mylaptop target ssh://myserver.example.org/mnt/btr_backup/mylaptop
-
Где: глобально/volume/subvolume.
-
Что: управляет созданием снапшотов.
-
Значения:
yes(по умолчанию) — создавать по расписанию/запуску,no— никогда (например, если эта машина только «тянет» готовые снапшоты с другой),ondemand— создавать только когда доступен target (например, USB-диск подключён).
-
Пример:
snapshot_create ondemand
-
Где: глобально.
-
Что: путь к приватному ssh-ключу для всех ssh-операций btrbk.
-
Пример:
ssh_identity /etc/btrbk/ssh/id_rsa
-
Где: внутри
target(ssh), иногда глобально. -
Что: юзер для ssh, если не root или не указан в URL.
-
Пример:
target raw ssh://cloud.example.com/backup ssh_user btrbk
-
Где: глобально.
-
Что: чем на удалённой стороне запускать
btrfs …. -
Значения:
btrfs-progs-sudo— вызывать через sudo на удалёнке (на удалёнке настроить sudoers),btrfs-progs-btrbk— использовать набор «ущемлённых» бинарников с cap/setuid (тонкая настройка прав).
-
Примеры:
backend_remote btrfs-progs-sudo # или backend_remote btrfs-progs-btrbk
-
Где: в
volume. -
Что: произвольные метки для группировки (удобно для VM: vm vm01 и т. п.). Влияет на имена/фильтры при списке.
-
Пример:
volume ssh://localhost:2201/mnt/btr_pool group vm vm01
-
Где: в
subvolume. -
Что: переименовывает «базовую часть» имени снапшотов/бэкапов (по умолчанию берётся имя субтома).
-
Пример:
subvolume home snapshot_name vm01-home
Эти опции используются, когда 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.
# Читаемые имена с временем (или убери, если устраивает дата)
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 дня минимум, 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
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
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
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 # и не создаём (только забираем готовые)
# На диске бэкапа заранее:
# 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 делает снапшот.
# Все бэкапы сложить в один корень
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).