Настроим резервное копирование сервера 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 и спокойно с ней работать.
Результат
Данная утилита очень гибкая в настройке и позволяет использовать её в разных вариантах. Существуют готовые скрипты автоматизации управления которые у меня не получилось настроить да и незачем усложнять то что не надо. Шифрование архивов еще никому не вредило и сервис делает это просто и понятно.