Borgbackup - это достаточно простая в установке и настройке, но очень функциональная клиент-серверная OpenSource система резервного копирования.
Основные преимущества borgbackup:
- дедупликация архивируемых данных - данные в пределах одного репозитория делятся на блоки и в процессе выполнения следующей процедуры архивации производится дедупликация таких повторяющихся блоков;
- инкрементное копирование - в репозиторий с клиента передаются только измененные данные, что снижает нагрузку на сеть и сокращает время выполнения архивации;
- работа по протоколу SSH - обеспечивает надежную защиту передаваемых данных между клиентом и сервером, а также позволяет быстро и просто настроить тип аутентификации на сервере;
- шифрование репозитория - обеспечивает надежную защиту хранимых данных от несанкционированного доступа;
- простота установки и настройки - пакет устанавливается из стандартного PPA Ubuntu и требует минимальных временных затрат на конфигурирование.
Наша компания работает преимущественно с Debian-based дистрибутивами, поэтому дальше будет рассмотрена установка и настройка borg на OS Ubuntu live server 20.04.
Официальный сайт borgbackup и документация: https://www.borgbackup.org/
1. Установка и настройка borgbackup
Установка пакета borgbackup
Установка как на сервере, так и на клиенте выполняется одинаково:
sudo -i
apt update
apt install borgbackup
Настройка borg на сервере
Все действия системы ПО borgbackup выполняются от имени пользователя borg (не путать с операциями конфигурирования и управления самого ПО - они выполняются от имени root).
Репозитории хранения данных borg располагает в своей домашней директории.
Исходя из этого требуется создать данного системного пользователя с соответствующей домашней директорией:
useradd -m borg
Задавать пароль пользователю borg при этом не требуется, поскольку далее будет настроено подключение по ключам. Также пользователю borg не требуется доступ к терминальным сессиям сервера.
После выполнения команды выше, будет создан пользователь borg и домашний каталог /home/borg
Если есть необходимость при создании пользователя разместить домашний каталог в ином месте (прим. /mnt/backups), то команда будет выглядеть следующим образом:
useradd -m -b /mnt/backups borg
Будет создан домашний каталог в расположении /mnt/backups/borg
В случае, если возникнет необходимость переместить уже существующую домашнюю директорию с данными в другое место (прим. /mnt/raid0/backups), то выпоните следующую команду:
usermod -dm /mnt/raid0/backups/borg borg
Существующая домашняя директория borg будет перемещена в /mnt/raid0/backups/borg (данная директория должна быть создана заранее, до выполнения команды на перемещение).
Далее подготовим структуру домашней директории borg для организации доступа клиентов по ключам:
mkdir ~borg/.ssh
touch ~borg/.ssh/authorized_keys
chown -R borg:borg ~borg/.ssh
Конфигурирование сервера на этом можно считать завершенным, за исключением того, что в дальнейшем потребуется добавить публичные клиентские ключи для доступа к borg серверу.
Настройка borg на клиенте
Для организации доступа к серверу по ключам, на клиентском хосте требуется сгенерировать SSH-ключ от имени root (поскольку выполнение некоторых операций и доступ к архивируемым файлам на клиентском хосте в большинстве случаев требует root доступа):
(если соответствующий ключ для root уже был сгенерирован ранее, то используйте его. Новый генерировать не нужно)
sudo -i
ssh-keygen
При создании ключа не нужно ничего вводить. Просто нажимать Enter до завершения генерации ключа.
Будет сгенерирована пара ключей: открытый id_rsa.pub и закрытый id_rsa. Ключи располагаются в директории /root/.ssh
Нам потребуется скопировать содержимое публичного (id_rsa.pub) и перенести его на сервер в файл authorized_keys
Для этого на клиенте выполнить команду:
cat /root/.ssh/id_rsa.pub
В терминал будет выведен открытый ключ, начинающийся в примере с ssh-rsa ААА... и заканчивающийся именем хоста клиента (в примере это ...4E= root@storm):
Скопируйте данный ключ в буфер обмена.
Перейдем на сервер
На сервере требуется записать скопированный ключ в файл /home/borg/.ssh/authorized_keys
Для этого выполните команду:
echo 'command="/usr/bin/borg serve" ssh-rsa AAA......4E= root@storm' >> ~borg/.ssh/authorized_keys
Данная запись указывает на то, что владельцу открытого ключа (клиентский хост) разрешено запускать серверный процесс Borg.
В качестве дополнительной меры безопасности можно также ограничить клиентский хост в правах, прописав в команде выше возможность работы только со своим репозиторием на сервере:
echo 'command="/usr/bin/borg serve --restrict-to-path ~borg/repo_dir",restrict ssh-rsa AAA......4E= root@storm' >> ~borg/.ssh/authorized_keys
При этом имя репозитория repo_dir в команде должно в точности совпадать с создаваемым в дальнейшем (или с уже созданным) именем репозитория.
На этом подготовка системы borg к работе завершена.
2. Работа с borgbackup на клиентском хосте
Примечания:
- команды выполняются на клиентском хосте;
- в случае использования нестандартного порта SSH на сервере, строка обращения к серверу будет иметь формат ssh://borg@server_ip:port/home/borg/your_repo_name
- в случае использования на сервере стандартного порта SSH, строка обращения к серверу будет иметь формат borg@server_ip:/home/borg/your_repo_name
- путь к репозиторию указывается абсолютный (относительно файловой системы сервера);
- для имитации выполнения команды, чтобы оценить результат ее выполнения без каких-либо изменений в репозитории, следует включать в тело команды параметр --dry-run
В примерах будут использоваться следующие параметры:
- 172.29.0.25 - IP-адрес сервера borg;
- 56022 - SSH порт сервера borg;
- repo_passwd - пароль от зашифрованного репозитория;
- /home/borg/your_repo_name - абсолютный путь к репозиторию относительной серверной файловой системы.
Создание репозитория
Для создания простого (нешифрованного) репозитория ввести команду:
borg init -e none ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Для создания зашифрованного репозитория ввести команду:
borg init -e repokey ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
При этом потребуется ввести пароль.
Если создание репозитория будет отклонено, то необходимо проверить:
- наличие соединения с сервером по SSH (на клиенте выполнить команду ssh Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. -p 56022 );
- права доступа для пользователя borg к своему домашнему каталогу (на сервере выполнить команду chown -R borg:borg /home/borg );
- соответствие имени репозитория, указанного в команде с открытым ключом на сервере, фактическому имени создаваемого репозитория.
После успешного выполнения команды, проверить на сервере наличие созданного репозитория в домашней директории borg.
Создание резервной копии
Для создания резервной копии ввести команду:
borg create -C zstd ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name-`date +%Y%m%d_%H%M%S` /etc/anydir1 /etc/anydir2 /var/scripts/anyscript.sh
- borg create - команда на создание резервной копии;
- -C zstd - создать архив с применением метода сжатия zstd;
- backup_name-... - название (префикс) создаваемого архива в репозитории;
- `date +%Y%m%d_%H%M%S` - временная (timestamp) приставка к имени (префиксу) создаваемого архива в репозитории;
- /etc/anydir1 /etc/anydir2 /var/scripts/anyscript.sh - перечисление через пробел архивируемых директорий и файлов на клиенте.
Для удобства восприятия в sh скриптах данная команда может принимать следующий вид:
...
borg create -C zstd \
ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name'-{now:%Y-%m-%d_%H:%M:%S}' \
/etc/anydir1 \
/etc/anydir2 \
/var/scripts/anyscript.sh
...
Просмотр перечня имеющихся резервных копий и информации о них
Для вывода списка имеющихся на сервере резервных копий ввести команду:
borg list ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Для вывода информации о содержимом резервной копии ввести команду:
borg list ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name
Восстановление данных из резервной копии
Восстановление файлов из резервной копии производится в текущую директорию с сохранением корневой структуры. После восстановления необходимо вручную либо при помощи скриптов скопировать восстановленные данные в соответствующие директории.
Перед восстановлением, рекомендуется создать отдельную директорию и перейти в нее:
mkdir /mnt/borgrestore
cd /mnt/borgrestore
Для восстановления всех файлов из доступного архива ввести команду:
borg extract --list ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name
Для восстановления отдельных файлов или директорий из архива ввести команду:
borg extract --list ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name etc/anydir1
Монтирование резервной копии в локальную папку (альтернативный вариант восстановления данных)
borg позволяет смонтировать репозиторий в локальную файловую систему и работать с архивом как с обычной папкой.
Для этого требуется создать точку (директорию) монтирования и подмонтировать в нее требуемую резервную копию с сервера:
mkdir /mnt/borgmount
borg mount ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name /mnt/borgmount
После завершения работы с данными необходимо размонтировать репозиторий, выполнив команду:
borg umount /mnt/borgmount
Время хранения архивов в репозитории (очистка репозитория от ненужных архивов)
Для задания времени хранения (очистки репозитория при следующем резервном копировании) используются следующие параметры:
--keep-within INTERVAL - хранить все архивы за указанный промежуток времени. Для указания промежутка используется "H", "d", "w", "m", "y" (часы, дни, недели, месяцы, годы).
--keep-last, --keep-secondly - хранить указанное количество последних копий;
--keep-minutely - количество копий в течении последнего часа;
-H, --keep-hourly - количество последних часовых копий;
-d, --keep-daily - количество последних дневных копий;
-w, --keep-weekly - количество последних недельных копий;
-m, --keep-monthly - количество последних месячных копий;
-y, --keep-yearly - количество последних годовых копий.
Например, чтобы хранить все архивы в течение 30 дней и дополнительно 2 архива на конец месяца, нужно выполнить следующую команду:
borg prune --keep-within=30d --keep-monthly=2 ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Например, чтобы хранить последние 7 архивов на конец дня, дополнительно хранить 4 архива на конец недели и дополнительно хранить 12 архивов на конец месяца, выполнить команду:
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=12 ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Например, чтобы хранить 4 архива с интервалом в день, 2 дополнительных архива с интервалом в неделю, и два дополнительных архива с интервалом в месяц, введите команду (пареметры без знака =):
borg prune --keep-daily 4 --keep-weekly 2 --keep-monthly 2 ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Например, чтобы постоянно хранить два последних архива, введите команду:
borg prune --keep-last 2 ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Также можно включать в команды параметры выборки по имени (префиксу) архивов, например --prefix='{hostname}-'. В этом случае правила хранения будут применены только к архивам с указанными именами (префиксами).
Удаление резервных копий и репозиториев
Для удаления репозитория со всеми резервными копиями выполнить команду:
borg delete ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
Для удаления конкретной резервной копии выполнить команду:
borg delete ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name::backup_name
Для удаления резервных копий, имеющих в своем названии выражение, например, "...myhomedir..." выполнить команду:
borg delete --glob-archives '*myhomedir*' ssh://Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.:56022/home/borg/your_repo_name
3. Работа с репозиториями borgbackup с серверного хоста
В случае выполнения команд borg на серверной части, набор команд остается прежним. Меняется только путь к репозиторию с сетевого на локальный.
Например:
borg info /home/borg/your_repo_name
borg list /home/borg/your_repo_name
ВАЖНО!
В случае выполнения операций в репозитории (например, удаление архива) с хоста сервера, после завершения всех операций повторно установить на репозиторий права для borg:
chown -R borg:borg /home/borg/your_repo_name
в противном случае следующая попытка создания резервной копии клиентским хостом может завершиться неудачно из-за ограничений прав доступа к своему репозиторию, поскольку серверный хост, при выполнении локальных операций, пересоздаст/перезапишет некоторые файлы репозитория с правами root и доступа от имени пользователя borg к ним уже не будет.