Btrfs + Btrbk
Введение
Btrbk - это инструмент резервного копирования для подтомов Btrfs, использующий специальные возможности этой файловой системы для создания атомарных моментальных снимков и передачи их в хранилище резервных копий. Исходное и целевое местоположения указываются в файле конфигурации, что позволяет легко настраивать как простые сценарии резервного копирования, такие как "резервная копия на USB HDD", так и сложные "сервер, получающий резервные копии с нескольких хостов по SSH, с разной политикой хранения".
Определения
- Снапшот - мгновенный снимок состояния подраздела Btrfs, находящийся в той же самой файловой системе, что и сам подраздел.
- Резервная копия - резервная копия подраздела Btrfs, выполняемая со снапшота. Может находиться как в этой же файловой системе, так и на другом диске, или хосте.
- Первичная резервная копия - полная копия снимка подраздела,
содержащая все данные оригинала.
Для создания первичной резервной копии в Btrfs используется подход
send/receive:
btrfs sendформирует поток данных, которыеbtrfs receiveпреобразует в раздел с данными. - Инкрементальная резервная копия - копия содержащая только
изменения от первичной резервной копии или от другой инкрементальной
копии.
Для передачи данных инкрементальной резервной копии для
btrfs sendнеобходимо указать между какими снапшотами будут сформированы изменения (базовой и конечный). При этом раздел с резервными копиями должен уже содержать данные базового снапшота. - Архив - дополнительная резервная копия снимков, может выполняться либо с резервной копии либо со снапшотов. В отличии от связки хранилища снапшотов и резервных копий, может терять общий базовой снимок, в результате чего будет выполнена полная передача подраздела.
Btrbk берет на себя организацию хранения, снапшотов, определение параметров создания инкрементального архива, удаление устаревших снапшотов согласно политики хранилища, передачу данных между хостами. Необходимо только указать политику хранения копий, создать необходимые каталоги и указать места хранения снапшотов и копий.
Установка
Установите пакет Btrbk:
| Bash | |
|---|---|
Базовая настройка
Выполните настройку общих параметров для резервных копий:
Политика хранения копий
Укажите следующую общую политику хранения резервных копий и снапшотов:
!!! info "Временные интервалы" - Копия часа - первая резервная копия в указанном часе. Таким образом если есть резервные копии от 20210323T0102, 20210323T0503, 20210323T2320, то часовой копией будет считаться 20210323T0503, а две другие будет удалены по прошествии минимального периода хранения. - Копия дня - первая копия с начала суток (или после часа указанного в . Остальные копии сделанные в этот день считаются часовыми или промежуточными. - Копия недели - ближайшая к понедельнику дневная копия (или дня недели указанного в . Таким образом если есть копия от понедельника, то она считается копией недели. Если от понедельника нет, но есть от среды, то копия от среды будет считаться копией недели. - Копия месяца - ближайшая к первому числу копия недели. Таким образом ежемесячные копии будут закрепляться за днями недели, а не первыми числами. - Копия года - самая ранняя в году ежемесячная копия.
Общий формат политики хранения описывается следующим образом:
| Bash | |
|---|---|
определяет сколько копий должно храниться соответственно в интервалах часов, дней, недель, месяцев или лет.
Пример
Пример применения политики 2d 2w 2m на 30 июля 2021, с минимальным хранением копий 1d:
Политика хранения снапшотов и резервных копий может различаться. Например снапшоты могут храниться только за 5 дней, а резервные копии делаться раз в месяц. В этом случае для поддержки инкрементальных архивов принудительно будет оставлен снапшот соответствующей последней резервной копии.
Все эти параметры могут быть указаны как глобально для всех резервных копий, так и переопределены для раздела Btrfs или подразделов подлежащих резервному копированию.
Резервное копирование в пределах одной машины
В примере ниже описано создание резервных копий корневого раздела / и раздела данных /var/lib/ для текущей машины на отдельный диск подключенный к /mnt/backup/.
Настройка путей
Создайте каталоги для снапшотов в корневом разделе / и /var/lib/:
| Bash | |
|---|---|
Добавьте описание создания резервных копий в конец файла:
Снапшоты корневого раздела будут создаваться в /.snapshots/, раздела данных в /var/lib/.snapshots/, их резервные копии в /mnt/backup/.
Создание резервной копии
Для запуска полного цикла (создание снапшотов, резервных копий, удаление устаревших копий) выполните:
В отчёте выполнения видно, что были созданы два снапшота (/.snapshots/rootfs.20210324T1618/, /var/lib/.snapshots/lib.20210324T1618/) и снапшоты были отправлены в виде полной резервной копии [***] в /mnt/backup/.
Повторный запуск цикла создаст только снапшоты, так как согласно политики хранения промежуточные резервные копии не хранятся. Запустите холостой цикл:
| Text Only | |
|---|---|
Для синхронизации снапшотов с хранилищем резервных копий, а так же удалении устаревших копий выполните:
| Text Only | |
|---|---|
Чтобы выполнить только удаление устаревших снапшотов и резервных копий выполните:
| Text Only | |
|---|---|
Настройка выполнения резервных копий по расписанию
Для настройки выполнения резервных копий по расписанию добавьте в cron ежедневный запуск btrbk:
| /etc/cron.d/btrbk.conf | |
|---|---|
Настройка резервной копии для удалённого узла
Настройка Backup сервера
На Backup сервере сгенерируйте ssh-ключ для подключения к удалённой машине:
!!! warning "Внимание" Не задавайте пароль на закрытый ключ, иначе вы не сможете автоматически подключаться к сервису
Добавьте в начало строки открытого ключа команду запуска и параметры:
| Bash | |
|---|---|
Укажите использование ключа, при доступе через SSH:
| /etc/btrbk/btrbk.conf | |
|---|---|
Добавьте описание создания резервных копий с удалённой машины в конец файла:
Настройка клиента
На удалённой машине host1 создайте каталоги для снапшотов:
| Bash | |
|---|---|
Скопируйте на удалённую машину host1, к которой будет осуществляться доступ, скрипт для запуска ограниченного набора команд, необходимых только для создания резервных копий:
| Bash | |
|---|---|
Перенесите на удалённую машину сформированный ранее открытый ключ сервера:
| Text Only | |
|---|---|
Выполнение резервной копии
На Backup сервере запустите полный цикл:
| Text Only | |
|---|---|
Для запуска цикла только для хоста host1.example.org, выполните:
| Text Only | |
|---|---|
Для запуска цикла только для /var/lib/ с хоста host1.example.org, выполните:
| Text Only | |
|---|---|
Для запуска цикла только для группы lxc выполните:
| Text Only | |
|---|---|
Прочее
По умолчанию Btrbk старается использовать инкрементальные резервные копии, но если цепочка (базовая-инкрементальная копия) будет нарушена (например в результате ручного удаления лишних копий), то резервная копия будет выполнена полная. Это может быть излишне, если первичные резервные копии уже созданы, а подразделы содержат большое количество данных. Выполните настройку использования только инкрементальных резервных копий:
!!! warning "Важно" Обратите внимание, что использование только инкрементальных резервных копий должно быть указано после создания первичных резервных копий, в противном случае Btrbk не сможет их создать.