Архив метки: WebDav

Backup надежный и безопасный

Backup или резервное копирование данных самое важное и необходимое действие. Только постоянное регулярное сохранение резервной копии в надежном месте и их постоянная проверка и мониторинг даст полную гарантию защиты данных от потери.

Введение

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

Из статьи вы узнаете как я подхожу к этому вопросу и защищаю бэкапы всех своих ресурсов надежно и безопасно.

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

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

Основа безопасности бэкапов

Правильность и безопасность бэкапов включает в себя несколько простых правил:

  1. Хранение бэкапов за продолжительный период времени. Вариантов почему лучше хранить бэкапы долго множество. Например, удалили какой то материал, но решили восстановить спустя некоторое время или необходимо найти ошибку когда появилась проблема которую обнаружили не сразу.
  2. Забирать бэкапы сторонним сервером. В идеале лучше использовать под резервные копии специальный сервер использующийся только для бэкапов. В случае если копии бэкапов отправляются с самого сервера где делаются бэкапы это опасно, так как в случае взлома или вируса вы можете потерять все копии.
  3. Мониторинг как создание бэкапа так и аналитика его размеров. Как бы вы не пытались отслеживать периодически сами как делаются бэкапы по закону подлости, когда они потребуются, обнаружите что они или не делаются или испорчены.

Ниже я по порядку опишу все свои действия которые использую на практике. Будут использованы стандартные программы используемые во всех версиях Linux.

Создание бэкапов на сервере

Самое надежное это когда производится создание резервных копии на самом сервере, так как это гарантирует что вы не получите проблем возникших с удаленным подключением к сторонним ресурсам. Например, при использовании бэкапа на Yndex Disk у меня периодически были ошибки при создании бэкапа.

Структура папок для бэкапов

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

Создадим необходимые папки куда будем класть бэкапы

mkdir -p /backup/bin
mkdir -p /backup/sevo44.ru/{day,month,source}

-p -- создаст все отсутсвующие папки

В итоге мы получили следующие папки:

  • /backup — папка где будет находиться всё что связано с резервными копиями;
  • /backup/bin — папка где будут находиться скрипты запускаемые по расписанию;
  • /backup/sevo44.ru/day — папка где будут лежать ежедневные бэкапы;
  • /backup/sevo44.ru/month — папка где будут лежать ежемесячные бэкапы;
  • /backup/sevo44.ru/source — папка в которой я храню копии которые были начальными. Например, в случае когда ресурс переносится с другого сервера или возвращается в жизнь после продолжительного перерыва в работе.

Backup и его периодичность

Всегда сложно выбрать какой необходим период хранения и интервал резервного копирования. Для меня удобней организовать резервное копирование по следующей схеме:

  • Дневные копии — хранить 30 дней,
  • Месячные копии — хранить год.

Подход к резервированию сугубо личное дело и зависит от множества факторов. Главное чтобы эти копии всегда были доступны, исправны и удовлетворяли вашим требованиям.

Создание скриптов для бэкапов

Создадим два скрипта для ежедневного и ежемесячного бэкапа.

Создадим скрипт который будем ежедневно запускать по расписанию:

vim /backup/bin/day-backup-sevo44.ru.sh
= необходимый код =
#!/bin/sh

# Текущая дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`

# Папка для бэкапа
inf_dir='/var/www/sevo44.ru/www'
# Куда размещаем backup
bk_dir='/backup/sevo44.ru/day'

# Название архива с файлами
name_www='www-sevo44.ru'
# Название архива с базой
name_sql='sgl-sevo44.ru'

# Пользователь базы данных
user='sevo44-ru'
# Пароль пользователя базы данных
password='пароль'
# Имя базы данных для бэкапа
bd_name='sevo44-ru'

# Команды для выполнения

# В случае необходимости хранить только последний бэкап
# очищаем папку удаляя только файлы в папке
rm -f $bk_dir/*

# Создание файла с датой для мониторинга в zabbix
echo `date +"%Y-%m-%d_%H-%M"` > $bk_dir/timestamp

# Создание архива папки с файлами
/bin/tar -czvf $bk_dir/$name_www-$date_time.tar.gz $inf_dir

# Создание архива базы данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /bin/gzip -c > $bk_dir/$name_sql-$date_time.sql.gz

# Удаляем архивы старше 5-ти дней
#/usr/bin/find $bk_dir -type f -mtime +5 -exec rm {} \;

Для ежемесячных бэкапов создадим такой скрипт:

vim /backup/bin/month-backup-sevo44.ru.sh
= необходимый код =
#!/bin/sh

# Текущая дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`

# Папка для бэкапа
inf_dir='/var/www/sevo44.ru/www'
# Куда размещаем backup
bk_dir='/backup/sevo44.ru/month'

# Название архива с файлами
name_www='www-sevo44.ru'
# Название архива с базой
name_sql='sgl-sevo44.ru'

# Пользователь базы данных
user='sevo44-ru'
# Пароль пользователя базы данных
password='пароль'
# Имя базы данных для бэкапа
bd_name='sevo44-ru'

# Команды для выполнения

# В случае необходимости хранить только последний бэкап
# очищаем папку удаляя только файлы в папке
rm -f $bk_dir/*

# Создание файла с датой для мониторинга в zabbix
echo `date +"%Y-%m-%d_%H-%M"` > $bk_dir/timestamp

# Создание архива папки с файлами
/bin/tar -czvf $bk_dir/$name_www-$date_time.tar.gz $inf_dir

# Создание архива базы данных
/usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /bin/gzip -c > $bk_dir/$name_sql-$date_time.sql.gz

# Удаляем архивы старше одного года
#/usr/bin/find $bk_dir -type f -mtime +365 -exec rm {} \;

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

После создания скриптов сделаем их исполнительными выполнив необходимую команду:

chmod +x -R /backup/bin

Ошибка при выполнении mysqldump

Иногда вы можете увидеть ошибку при резервном копировании базы данных такого вида:

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

Ошибка говорит о том что данный пользователь не может получить доступ к созданию резервных копий у всех таблиц базы.

Исправить такое можно добавив к од следующий параметр:

/usr/bin/mysqldump --no-tablespaces --opt -v --databases $bd_name -u$user -p$password | /bin/gzip -c > $bk_dir/$name_sql-$date_time.sql.gz

Суть этой команды заключается в том что на момент бэкапа база остановится. Такой вариант меня не устраивает и мы дадим правильные права для пользователя базы данных (предварительно подключившись к базе данных):

= для случая когда доступ нужен снаружи =
GRANT ALL PRIVILEGES ON *.* TO 'пользователь бд'@'%';

= для случая когда доступ только с localhost =
GRANT ALL PRIVILEGES ON *.* TO 'пользователь бд'@'127.0.0.1';

= сохраним изменения =
FLUSH PRIVILEGES;

Добавление заданий в cron

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

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

В случае если создается резервная копия для разных ресурсов выставляйте время с учетом времини которое необходимо для создания бэкапа.

Открываем необходимый файл и добавляем нужный код:

vim /etc/crontab
= необходимый код =
### Backup
# sevo44.ru
# ежедневно
20 1 * * * root /backup/bin/day-backup-sevo44.ru.sh >/dev/null 2>&1
# ежемесячно 1-го числа
25 1 1 * * root /backup/bin/month-backup-sevo44.ru.sh >/dev/null 2>&1

Согласно команде каждый день в 1:20 бедет выполнятся скрипт для создания ежедневного бэкапа и ежемесячно первого числа в 1:25 будет создаваться ежемесячная резервная копия.

Проверка создания бэкапов

Убедится что все работает правильно можно только запустив скрипт у посмотреть результат его работы.

Мне больше нравится брать код непосредственно из файла crontab, так как это последнее место которое выявит ошибки связаные с правильностью написания пути к скрипту.

=== Выводим на укран всё что есть заданиях ===
cat /etc/crontab
= часть вывода =
20 1 * * * root /backup/bin/day-backup-sevo44.ru.sh >/dev/null 2>&1

=== Копируем выделеный код и выполняем в консоли ===
/backup/bin/day-backup-sevo44.ru.sh
= часть вывода =
...
/var/www/sevo44.ru/www/modules/mod_syndicate/tmpl/
/var/www/sevo44.ru/www/modules/mod_syndicate/tmpl/default.php
/var/www/sevo44.ru/www/modules/mod_syndicate/mod_syndicate.xml
/var/www/sevo44.ru/www/modules/mod_syndicate/helper.php
/var/www/sevo44.ru/www/LICENSE.txt
-- Connecting to localhost...
-- Retrieving table structure for table oxsht_assets...
-- Sending SELECT query...
-- Retrieving rows...
...
-- Disconnecting from localhost...

Посмотреть результат работы cron можно заглянув в файл:

cat /var/log/cron
= вывод удачной работы задания =
Apr 18 01:20:00 ih378656 CROND[17528]: (root) CMD (/backup/bin/day-backup-sevo44.ru.sh >/dev/null 2>&1)

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

Создание копии backups используя rsync

В моем случае под всевозможные бэкапы используется специальный сервер настроенный только для бэкапов.

Подключается к серверу с которого надо забирать бэкапы будем по сертификату. Для копирования будем использовать утилиту rsync.

Именно на этом сервере производится мониторинг правильности создания бэкапов и их размеры средствами программы для мониторинга Zabbix.

Узнать как работать со свободным программным комплексом для мониторинга вы можете из раздела Мониторинг Zabbix.

Возможности Zabbix удовлетворят любые потребности для осуществления любых параметров практически любой системы.

Подключение по сертификату

Более подробно о том как настраивать механизм подключения по сертификаты можете найти в статье RSA или авторизация SSH по ключу.

Скопируем на подключаемый ресурс необходимую часть ключа:

ssh-copy-id -i /root/.ssh/id_rsa.pub -p 25555 root@192.168.0.33

После успешного выполнения пробуем подключиться:

ssh -p 25555 root@192.168.0.33

В случае успеха идём дальше.

Для безопасности можно создать пользователя на ресурсе откуда забираете данные и ограничить его только в папке откуда забираем резервные копии.

Создание скрипта для выполнения rsync

Создадим необходимый скрипт:

vim /backup/bin/rsync-lemp.sevo44.ru.sh
= необходимый код =
#!/bin/bash

# Записываем информацию в лог о начале
#echo "`date +"%Y-%m-%d_%H-%M-%S"` Start rsync lemp.sevo44.ru" >> /var/log/rsync-lemp.sevo44.ru.log

# Копирование бэкапов с lemp.sevo44.ru
/usr/bin/rsync -avzhe "ssh -p 25555" root@192.168.0.33:/backup/ /backup/lemp.sevo44.ru
# Зеркало бэкапов с lemp.sevo44.ru
#/usr/bin/rsync --delete -avzhe "ssh -p 25555" root@192.168.0.33:/backup/ /backup/lemp.sevo44.ru

# Записываем информацию в лог о конце
#echo "`date +"%Y-%m-%d_%H-%M-%S"` End rsync lemp.sevo44.ru" >> /var/log/rsync-lemp.sevo44.loc.log

# Удаляем архивы старше 15-ти дней если не использовать параметр --delete 
# 
/usr/bin/find /backup/lemp.sevo44.ru/sevo44.ru/day -type f -mtime +15 -exec rm {} \;

Скрипт задокументирован и выберите параметры исходя из ваших требований.

Расшифрую параметры указанные в коде:

  • a — режиме архива;
  • v — увеличение детализации;
  • z — сжатие данных файла во время передачи;
  • h — вывод чисел в удобочитаемом формате;
  • e — используем ssh подключение.

После создания скриптов сделаем их исполнительными выполнив необходимую команду:

chmod +x -R /backup/bin

Добавление задания в cron

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

В случае если создается резервная копия для разных ресурсов выставляйте время с учетом времени которое необходимо для создания бэкапа.

Открываем необходимый файл и добавляем нужный код:

vim /etc/crontab
= необходимый код =
### rsync
# lemp.sevo44.ru
# ежедневно
30 6 * * * root /backup/bin/rsync-lemp.sevo44.ru.sh >/dev/null 2>&1

Согласно команде каждый день в 6:30 будет выполнятся скрипт который будет забирать резервные копии согласно вашим пожеланиям.

Дальнейшие проверки аналогичны действиям указанным в разделе выше.

В случае вывода ошибки при выполнении скрипта:

Unexpected remote arg: root@192.168.0.33:/backup/
rsync error: syntax or usage error (code 1) at main.c(1343) [sender=3.1.2]

Смотрите правильность указания всех путей, параметров. Для вывода справки выполните в консоли команду rsync —help .

Использование Yndex.Disk для backups

При регистрации домена мне нравится переводить его управление на Yandex. Для бэкапов создаю отдельный почтовый ящик на домене и туда копирую бэкапы сайта. Удобно передавать заказчику управление доменом и резервные копии в одном месте.

Yandex.Disk дает возможность подключится с помощью WebDav. Необходимо добавить пакет davfs2 для работы по WebDav.

К сожалению на данный момент невозможно передавать данные большого размера по WebDav на Yandex.

Вы можете установить на систему консольный клиент от Yandex и проводить резервное копирование с помощью его.

Официальная страница руководства пользователя имеет понятное описание по установке и использованию на разных системах.

Более подробно с описанием сервиса Yandex Disk вы можете ознакомиться перейдя в раздел техподдержки Яндекса.

Установка Davfs2

Рассмотрим настройку на примере системы CentOS 7.

Подключим репозиторий Еpel:

yum -y install epel-release

Установим пакет davfs2:

yum -y install davfs2

Настройка WebDav для Yandex.Disk

Создадим папку куда будем монтировать:

mkdir /backup/mnt/ydisk-sevo44.ru-backups

Чтобы не путаться в конце я указываю логин почты на котором находиться диск.

Смонтируем Yandex.Disk в необходимую папку:

mount -t davfs https://webdav.yandex.ru /backup/mnt/ydisk-sevo44.ru-backups/
= вывод команды с необходимыми данными =
Please enter the username to authenticate with server
 https://webdav.yandex.ru or hit enter for none.
 Username: вводим логин
 Please enter the password to authenticate user zeroxzed@yandex.ru with server
 https://webdav.yandex.ru or hit enter for none.
 Password: вводим пароль
 /sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway

Диск смонтировался в указанную папку.

Отмантировать диск можно командой:

umount /backup/mnt/ydisk-sevo44.ru-backups/

Введение вручную данных при монтировании не всегда удобно и для удобства мы автоматизируем этот процесс.

Отредактируем файл /etc/davfs2/secrets, добавив в конец строку с данными для авторизации:

vim /etc/davfs2/secrets
= необходимые данные для добавления =
# путь монитрования - почтовый ящик - пароль
/backup/mnt/ydisk-sevo44.ru-backups/ backups@sevo44.ru password

Так мы можем задать любое количество строчек с необходимыми ресурсами Yandex.Disk.

В случае если вы хотите чтобы диск монтировался при перезагрузке системы то в etc/fstab необходимо добавить строчку:

mcedit /etc/fstab
= необходимые данные для добавления =
https://webdav.yandex.ru /backup/mnt/ydisk-sevo44.ru-backups davfs rw,user,_netdev 0 0
# обязательно переход на новую строку

Теперь при перезагрузке сервера диск автоматически монтируется.

Не советую использовать монитрование через fstab, так как в случае обрыва связи копии не будут копироваться.

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

Создание скрипта для работы с Yandex.Disk

Создалим скрипт для выполнения копирования резервных копий на Yandex.Disk:

vim /backup/bin/ydisk-sevo44.ru-backups.sh
= необходимые данные =
#!/bin/sh

# Монтируем Yandex.Disk
mount -t davfs https://webdav.yandex.ru /backup/mnt/ydisk-sevo44.ru-backups/

# Создание зеркала ежедневных архивов
rsync -avzh --delete /backup/sevo44.ru/day /backup/mnt/ydisk-sevo44.ru-backups/

# Копирование резервных копий  
#rsync -avzh /backup/sevo44.ru/day /backup/mnt/ydisk-sevo44.ru-backups/

# Удаляем копии старше 10 дней при использовани копирования
#/usr/bin/find $bk_dir -type f -mtime +30 -exec rm {} \;

# Отмонтирует Yandex.Disk
umount /backup/mnt/ydisk-sevo44.ru-backups/

# Очищения кэш davfs2
find /var/cache/davfs2/ -mindepth 1 -a -print0 | xargs -n 100 -0 rm -rf

Скрипт выполнит следующие действия:

  1. Смонтирует удаленный Yandex.Disk;
  2. Сделает зеркало с папки /backup/sevo44.ru/day;
  3. Отмонтирует Yandex.Disk;
  4. Очистит кэш создаваемый при работе davfs2.

Очищать кэш созданный при работе davfs2 надо обязательно иначе место на диске быстро закончиться.

После создания скриптов дадим необходимые права для всех файлов в папке backup:

chmod +x -R /backup/bin

Добавление задания в cron

Откроем для редактирования /etc/crontab файл откуда выполнятся задания:

vim /etc/crontab
= необходимые данные для добавления =
# sevo44.ru backup to Ydisk.Disk
# Каждый день в 6:30 запускается ежедневный backup
30 6 * * * root /root/backup/sevo44.ru/day.sh >/dev/null 2>&1

Перезагрузим cron в системе CentOS 7 для применения изминений:

systemctl restart crond

Проверки осуществляем по аналогии с предыдущими главами.

Заключение

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

Duplicity для бэкапа VDS

Настроим резервное копирование сервера VDS с помощью утилиты duplicity на операционной системе CentOS 7. Для хранения резервных копий будем использовать Yandex Disk. Бэкапы защитим с помощью надежного шифрования OpenPGP. Возможность автоматического создания архивов.

Введение

В статье «Backup надежный и безопасный» в примере мы рассмотрели как настроить резервное копирование файлов и базы данных сайтов, но для полного спокойствия этого мало. Как правило, ресурсы предоставляющие VDS не делают резервных копий и заботится о безопасности приходится самим владельцам VDS. Мне гораздо спокойней перед любыми действиями с сервером создать полную резервную копию. Сюрпризы после обновления или настройкой могут вывести сервер из работы. Без резервной копии придется  потратить много времени и нервов для восстановления работы сервера.

Установка Duplicity

Ознакомиться более детально с работой, настройкой и возможностями сервиса вы можете на официальном сайте производителя.

Установим репозиторий Epel без вопросов, если он не был установлен ранее:

yum -y install epel-release

Установим Duplicity без вопросов:

yum -y install duplicity

Создания ключа OpenPGP

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

Создадим необходимый ключ выполнив команду:

gpg --gen-key
= вывод команды с пояснениями. Часть информации удалена. =
Выберите требуемый тип ключа:
 (1) RSA and RSA (default)
 (2) DSA and Elgamal
 (3) DSA (только для подписи)
 (4) RSA (только для подписи)
Ваш выбор (?-подробнее)? 1
ключи RSA могут иметь длину от 1024 до 4096 бит.
Какой размер ключа необходим? (2048) 
Запрашиваемый размер ключа 2048 бит
Выберите срок действия ключа.
 0 = без ограничения срока действительности
 <n> = срок действительности n дней
 <n>w = срок действительности n недель
 <n>m = срок действительности n месяцев
 <n>y = срок действительности n лет
Ключ действителен до? (0) 
Ключ не имеет ограничения срока действительности
Все верно? (y/N) y
GnuPG необходимо составить UserID в качестве идентификатора ключа.
Ваше настоящее имя: sevo44
Email-адрес: test@sevo44.ru
Комментарий: duplicity-backup
Вы выбрали следующий User ID:
 "sevo44 (duplicity-backup) <test@sevo44.ru>"
Сменить (N)Имя, (C)Комментарий, (E)email-адрес или (O)Принять/(Q)Выход? o
Для защиты секретного ключа необходима фраза-пароль.
!!! Ввводим пароль 2 раза и не забываем его !!!

gpg: ключ 37D34631 помечен как абсолютно доверяемый.
открытый и закрытый ключи созданы и подписаны.
pub 2048R/37D34631 2017-05-08
Отпечаток ключа = 0AFF 9E2E 52DB 7ED2 480D 5DE2 971F 83F8 37D3 4631
uid sevo44 (duplicity-backup) <info@sevo44.ru>
sub 2048R/C5730EC9 2017-05-08

Для создания ключа откройте новый терминал и делайте там любые действия. У меня генерация длилась минут 30.

Вот наш ID ключа 37D34631 который мы и будем использовать.

Обязательно сохраните ключ в надежное место и не забывайте пароль который указывали при создании ключа!

Подключение Yandex disk

Установим необходимый пакет:

yum -y install davfs2

Создадим папку куда будем монтировать:

mkdir /mnt/ydisk_backup_vds

Подключим Yandex Disk:

mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/
= вывод команды =
 Please enter the username to authenticate with server
 https://webdav.yandex.ru or hit enter for none.
 Username: test@sevo44.ru
 Please enter the password to authenticate user test@sevo44.ru with server
 https://webdav.yandex.ru or hit enter for none.
 Password: ********
 /sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway

Для отмантирования диска:

umount /mnt/ydisk_backup_vds

Вводить каждый раз данные не удобно и мы настроим подключение без этих вопросов:

mcedit /etc/davfs2/secrets
= необходимые данные для добавления =
# Данные для подключения к Yandex Disk
/mnt/ydisk_backup_vds/ test@sevo44.ru password

Теперь при подключении не будет запроса логина и пароля.

Cсоздадим папку на сервере куда будем распаковывать из архива:

mkdir /restore

Все подготовительные действия выполнены и можно приступать к работе с сервисом.

Работа с Duplicity

Рассмотрим основные моменты работы с сервисом.

Ручное создание архивов

Можно настроить автоматическое монтирование Yandex Diska при загрузке сервера указав нужные параметры в файл /etc/fstab.  Мне кажется это не разумно, но как именно настраивать решать только вам.

Создадим полный архив с помощью ключа и исключим папки не нужные для резервной копии.

Можно указать full для полной резервной копии. Если ничего не указывать то создастся вначале полный архив а последующие будут создаваться incremental.

Имейте в виду, что надо точно указать папку куда создаете резервную копию! Если ошибетесь то создаётся папка что указали.

Внимательно отнеситесь к папкам которые мы исключаем из резервного копирования! Настройте при необходимости под свои требования.

duplicity --encrypt-key=37D34631 --exclude=/restore --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap / file:///mnt/ydisk_backup_vds/backup_vds
= вывод команды =
Локальные и удалённые метаданные синхронизированы, синхронизация не требуется.
 Время последней полной резервной копии: нету
 Сигнатуры не найдены, переключение на полную резервную копию.
 !!!! Процесс не быстрый, ждем !!!!
-------------[ Статистика резервного копирования ]-------------
 StartTime 1494264679.29 (Mon May 8 20:31:19 2017)
 EndTime 1494264988.55 (Mon May 8 20:36:28 2017)
 ElapsedTime 309.26 (5 minutes 9.26 seconds)
 SourceFiles 43662
 SourceFileSize 1504877467 (1.40 GB)
 NewFiles 43662
 NewFileSize 1504877467 (1.40 GB)
 DeletedFiles 0
 ChangedFiles 0
 ChangedFileSize 0 (0 bytes)
 ChangedDeltaSize 0 (0 bytes)
 DeltaEntries 43662
 RawDeltaSize 1481346284 (1.38 GB)
 TotalDestinationSizeChange 627905129 (599 MB)
 Errors 0

Распакуем все что есть в папку restore:

duplicity --encrypt-key=37D34631 --file-to-restore / file:///mnt/ydisk_backup_vds/backup_vds /restore
 = вывод команды =
 Локальные и удалённые метаданные синхронизированы, синхронизация не требуется.
 Время последней полной резервной копии: Mon May 8 20:42:33 2017
 Кодовая фраза GnuPG: тот пароль что указывали при генерации ключа!

После появления строки приглашения консоли проверяем папку restore.

Если необходимо выдернуть из архива только определенные папки или файлы необходимо выполнить команду ( в нашем случае мы распаковали папки etc):

duplicity --encrypt-key=37D34631 --file-to-restore etc file:///mnt/ydisk_backup_vds/backup_vds /restore/etc

Полуавтоматическое создание архивов

Немного автоматизируем процесс работы с сервисом. Напишем скрипт который выполнит монтирование Yandex Disk, произведёт резервное копирование и отключать диск.

Создадим скрипты для бэкапа и восстановления в папку restore.

mcedit /root/duplicity_bakup.sh
 = необходимые данные =
 #!/bin/sh
 # Монтируем Yandex.Disk
 mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/
 # Создаем резервную копию
 duplicity --encrypt-key=37D34631 --exclude=/restore --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap / file:///mnt/ydisk_backup_vds/backup_vds
 # Отключаем Yandex.Disk
 umount /mnt/ydisk_backup_vds/
mcedit /root/duplicity_restore.sh
 = необходимые данные =
 #!/bin/sh
 # Монтируем Yandex.Disk
 mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/
 # Распаковываем архив в папку restore
 duplicity --encrypt-key=37D34631 --file-to-restore / file:///mnt/ydisk_backup_vds/backup_vds /restore
 # Отключаем Yandex.Disk
 umount /mnt/ydisk_backup_vds/

Дадим необходимые права файлам:

chmod +x /root/duplicity_bakup.sh
chmod +x /root/duplicity_restore.sh

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

Для постоянного автоматического резервного копирование можно добавить строчку в /etc/crontab и копии будет создаваться по расписанию.

Проверка и удаление архивов

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

duplicity collection-status --encrypt-key=37D34631 file:///mnt/ydisk_backup_vds/backup_vds/
= вывод команды =
 Синхронизация удалённых метаданных с локальными временными файлами...
 Время последней полной резервной копии: Tue May 9 11:49:43 2017
 Состояние сбора
 -----------------
 Соединение с внутренним интерфейсом: BackendWrapper
 Папка архива: /root/.cache/duplicity/7662853acae7adf7fc3957d15d7c9b58

Найдено 0 вторичных цепочек резервных копий.

Найдена первичная цепочка резервного копирования с соответствующей цепочкой подписи:
 -------------------------
 Цепочка начата: Tue May 9 11:49:43 2017
 Цепочка завершена: Tue May 9 11:49:43 2017
 Количество содержащихся наборов резервного копирования: 1
 Общее число содержащихся томов: 4
 Тип резервной копии: Время: Число томов:
 Полная Tue May 9 11:49:43 2017 4
 -------------------------
 Отсутствуют изолированные или неполные наборы резервного копирования.

Удаление всех резервных копий кроме последней:

duplicity --encrypt-key=37D34631 remove-all-but-n-full 1 --force file:///mnt/ydisk_backup_vds/backup_vds/

Удаление копий старше 1 месяца:

duplicity --encrypt-key=37D34631 remove-older-than 1M file:///mnt/ydisk_backup_vds/backup_vds/

Есть команда для просмотра файлов в архиве но смысла выводить эту портянку просто нет. Гораздо быстрей восстановить все что надо в папку restore и спокойно с ней работать.

Результат

Данная утилита очень гибкая в настройке и позволяет использовать её в разных вариантах. Существуют готовые скрипты автоматизации управления которые у меня не получилось настроить да и незачем усложнять то что не надо. Шифрование архивов еще никому не вредило и сервис делает это просто и понятно.