Резервное копирование на Yandex Disk при помощи backupninja

Пару лет назад беспокойство о данных на личных VPS победило лень, и я озаботился исследованием простых способов резервного копирования. От программного обеспечения в первую очередь требовалось наличие в репозиториях Debian, а от сервиса хранения - достаточный объём и бесплатность. В итоге была выбрана связка backupninja + Yandex Disk.

backupninja это по сути упрощённый единый интерфейс командной строки к разнообразным утилитам резервного копирования. Написан целиком на bash.

Yandex Disk, думаю, в представлении не нуждается. Выбран был как первый сервис из испытанных, который вообще не создал проблем с использованием WebDAV. Сервисы выбирались из каталога 100 Free Online Backup Services.

Ниже будет описано, как небольшими усилиями настроить резервное копирование данных на сервер WebDav с применением шифрования и инкрементальных копий.

Установка backupninja

apt-get install backupninja duplicity

Настройки пакета по-умолчанию просто работают. Мне понадобилось исправить только

reportsuccess = no

чтобы не удалять каждый день по несколько писем о том, что всё хорошо.

Настройка резервной копии

Прежде всего требуется учётная запись в сервисах Яндекса. По-видимому в Яндексе лояльно относятся к использованию нескольких учёток, поэтому есть смысл завести отдельную для бэкапов, чтобы не трепать пароль от основной.

Настройки резервных копий хранятся в /etc/backup.d. Делать копию будем при помощи duplicity. Метод копирования определяется расширением файла с настройками, поэтому создадим файл /etc/backup.d/disk.yandex.ru.dup

testconnect = no
options = --ssl-cacert-file /etc/ssl/certs/ca-certificates.crt

[gpg]
password = gpg_password

[source]
include = /etc
include = /home
include = /srv
include = /var/backups

exclude = /home//.cache

[dest]
increments   = 15
keep         = 30
desturl      = webdavs://yandex_account@webdav.yandex.ru/path/to/server/backups/
ftp_password = yandex_password

Коротко о настройках.

testconnect = no

Используется только для соединений по ssh. Для WebDAV не используется и выдаёт об этом предупреждение, если не отключить.

options = --ssl-cacert-file /etc/ssl/certs/ca-certificates.crt

Необходимо для подключения к WebDAV по HTTPS.

password

Будет использован для шифрования файлов резервной копии.

include / exclude

Задаёт список файлов, включенных в резервную копию.

increments

Количество дней между полными копиями.

keep

Количество дней, в течение которых будет храниться резервная копия.

yandex_account / yandex_password

Данные учётной записи в Яндексе.

Подробное описание настроек duplicity можно прочитать в файле /usr/share/doc/backupninja/examples/example.dup.

Резервное копирование баз данных

backupninja сохраняет дампы баз данных на файловой системе. Чтобы сохранить дампы удалённо, нужно запланировать задание снятия дампа раньше задания копирования файлов. Например настройки полного копирования сервера PostgreSQL выглядят так:

databases = all
format    = custom
when      = everyday at 00

Дампы всех баз данных в 00:00 сохраняются в каталог /var/backup/postgres, после чего в 01:00 копируются на удалённый сервер.

Восстановление резервной копии

Сама по себе утилита backupninja не предназначена для восстановления данных. Способ восстановления зависит от выбранного способа резервного копирования. По-хорошему в пару к backupnunja нужно писать restoreninja.

Для облегчения работы с резервными копиями, сделанными duplicity как описано в этой статье, я предлагаю небольшой вспомогательный скрипт backupninja-dup. Например, команда восстановления данных из последней копии будет выглядеть так:

backupninja-dup disk.yandex.ru restore /tmp/restore