Установка:
apt install borgbackup
# Если ключа ssh нет
ssh-keygen
# Копируем ключ ssh на сервер в .ssh\authorized_keys
# Задайте права доступа '0700' для директории '.ssh' и '0600' для 'authorized_keys'
# Для того, чтобы заработала аутентификация по ключу также требуется, чтобы домашняя директория на Storage Box/Backup space не имела разрешения на запись для Группы и Остальных
cat .ssh/id_rsa.pub
# Задаем версию borg для hetzner
export BORG_REMOTE_PATH="borg-1.1"
# Генерируем парольную фразу для криптографии и записываем её в надежное место
export BORG_PASSPHRASE=""
# Задаем адрес репозитория
export BORG_REPO="ssh://u@u.your-storagebox.de:23/./auto"
# Инициализируем новый репозиторий c шифрованием ключем и паролем
borg init --encryption=keyfile
# Проверка
borg info
# Экспорт ключа в надежное место
borg key export :: ./borg_key
# Импорт ключа, для доступа с новой машины
borg key import :: ./borg_key
Основные команды:
# Создание бэкапа
borg create --stats --progress ::name_backup dir1 dir2
# Список бэкапов
borg list
# Распакавать файлы в текущую директорию
borg extract ::name_backup /folder
# Примонтировать бэкапы
borg mount /mnt/backups
borg umount /mnt/backups
# Проверка репозитория на ошибки
borg check -v ::
# Удаление старых бэкапов
# --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 сколько ежегодных архивов хранить
# Для теста добавим --list и --dry-run
borg prune --keep-within 3d --keep-daily 12 --keep-weekly 12 --keep-monthly 12 --list --dry-run
# Сравнение бэкапов
borg diff ::backup1 backup2
Скрипт бэкапа:
#!/usr/bin/env bash
## если используется нестандартный SSH-ключ,
## то его надо явно указать:
# export BORG_RSH="ssh -i /home/userXY/.ssh/id_ed25519"
export BORG_REMOTE_PATH="borg-1.1" \
BORG_PASSPHRASE="" \
BORG_REPO="ssh://u@u.your-storagebox.de:23/./auto"
##
## Вывод в файл журнала
##
LOG="/var/log/borg.log"
exec > >(tee -i ${LOG})
exec 2>&1
echo "###### Backup started: $(date) ######"
##
## - сделать дамп базы данных
##
##
## Передача файлов в репозиторий.
##
echo "Transfer files ..."
borg create --stats \
::'{now:%Y-%m-%d_%H:%M}' \
/ \
--exclude /dev \
--exclude /proc \
--exclude /sys \
--exclude /var/run \
--exclude /run \
--exclude /lost+found \
--exclude /mnt \
--exclude /var/lib/lxcfs
echo "###### Backup ended: $(date) ######"
Автозапуск:
crontab -e
0 3 * * * /root/backup.sh > /dev/null 2>&1