[ru] borgbackup

2018-12-23

Categories: notes Tags: Ops borg util

borgbackup – утилита для резервного копирования данных, работающая в режиме дедубликации. Поддерживает шифрование и сжатие данных; имеется возможность выполнять бэкапы на удалённый сервер по SSH.

Рассмотрим установку и конфигурацию borgbackup для выполнения инкрементальных бэкапов на файловом сервере в локальной сети.

Быстрый старт

  1. Загрузить готовый бинарник из репозитория проекта:
wget https://github.com/borgbackup/borg/releases/download/1.1.8/borg-linux64 -O /usr/local/bin/borg-linux64
chmod +x /usr/local/bin/borg-linux64
  1. Проинициализировать локальный репозиторий borg:
/usr/local/bin/borg-linux64 init -e none /backup/borg/

Выполнение бэкапов по расписанию

Создадим скрипт для резервного копирования необходимых данных:

vim /usr/local/bin/borg_backup.sh
#!/bin/sh

export BORG_BIN=/usr/local/bin/borg
export BORG_REPO=/backup/borg/

info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM

info "Starting backup"

# Создадим новый бэкап, содержащий файлы из локальных директорий
# /data_1 и /data_2.
${BORG_BIN} create                  \
    --verbose                       \
    --list                          \
    --stats                         \
    --show-rc                       \
    --compression lz4               \
    --exclude-caches                \
                                    \
    ::'{hostname}-{now}'            \
    /data_1                         \
    /data_2                         \

backup_exit=$?

info "Pruning repository"

# Очищаем устаревшие бэкапы из локального репозитория
${BORG_BIN} prune                   \
    --list                          \
    --prefix '{hostname}-'          \
    --show-rc                       \
    --keep-daily    7               \
    --keep-weekly   4               \
    --keep-monthly  6               \

prune_exit=$?

global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))

if [ ${global_exit} -eq 1 ];
then
    info "Backup and/or Prune finished with a warning"
fi

if [ ${global_exit} -gt 1 ];
then
    info "Backup and/or Prune finished with an error"
fi

exit ${global_exit}

Сохраним скрипт, установим права на запуск:

chmod +x /usr/local/bin/borg_backup.sh

Настроим автоматическое выполнение бэкапов:

crontab -e

Для выполнения ежедневного резервного копирования в 23:00, добавим в crontab следующую строку:

0 23 * * * /usr/local/bin/borg_backup.sh > /dev/null 2>&1

Резервное копирование дампов БД

borgbackup поддерживает добавление в бэкап файлов из stdin, что делает возможным интеграцию с утилитами подобными mysqldump. Семантика вызова следующая:

mysqldump -u root -p password dbname | borg create --stdin-name dbname-dump --verbose --list --stats ::'{hostname}-{now}' -

Ссылки

  1. https://habr.com/company/flant/blog/420055/
  2. https://borgbackup.readthedocs.io/en/stable/quickstart.html
  3. https://wiki.hetzner.de/index.php/BorgBackup/ru
  4. https://docs.openkm.com/kcenter/view/okm-6.3-com/linux-backup-and-restore-with-borgbackup.html