Поиск по сайту:

Duplicity – создание зашифрованных инкрементальных резервных копий в Linux


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

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

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

Тем не менее, давайте начнем.

Установка инструмента резервного копирования Duplicity в Linux

Чтобы установить duplicity в дистрибутивах на основе RHEL, вам необходимо сначала включить репозиторий EPEL (вы можете пропустить этот шаг, если используете саму Fedora):

yum update 
yum install epel-release
OR
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Тогда беги,

yum install duplicity

Для Debian и производных:

sudo apt update 
sudo apt install duplicity

Теоретически поддерживаются многие методы подключения к файловому серверу, хотя на практике пока опробованы только ssh/scp/sftp, локальный доступ к файлам, rsync, ftp, HSI, WebDAV и Amazon S3.

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

Наша тестовая среда состоит из компьютера с RHEL 8 (для резервного копирования) и компьютера с Debian 11 (сервер резервного копирования).

Создание SSH-ключей для беспарольного входа на удаленный сервер

Давайте начнем с создания ключей SSH в нашем поле RHEL и передачи их на резервный сервер Debian.

Если вы используете SSH на другом порту, то приведенная ниже команда предполагает, что демон sshd прослушивает порт XXXXX на сервере Debian. Замените AAA.BBB.CCC.DDD фактическим IP-адресом удаленного сервера.

ssh-keygen -t rsa
ssh-copy-id [email 
ssh-copy-id -p XXXXX [email   

Затем вам следует убедиться, что вы можете подключиться к резервному серверу без использования пароля:

ssh [email 

Теперь нам нужно создать ключи GPG, которые будут использоваться для шифрования и дешифрования наших данных:

gpg2 --full-gen-key

Вам будет предложено ввести:

  • Вид ключа
  • Размер ключа
  • Как долго ключ должен быть действителен
  • Парольная фраза

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

После того, как ключи были сгенерированы, вы можете перечислить их следующим образом:

gpg --list-keys

Строка, выделенная желтым цветом выше, известна как идентификатор открытого ключа и является запрошенным аргументом для шифрования ваших файлов.

Создание резервной копии Linux с помощью Duplicity

Для начала давайте создадим резервную копию только каталога /var/log, за исключением /var/log/anaconda и /var/log/sa . .

Поскольку это наша первая резервная копия, она будет полной. Последующие запуски будут создавать инкрементальные резервные копии (если только мы не добавим полную опцию без дефисов рядом с duplicity в приведенной ниже команде):

PASSPHRASE="tecmint" duplicity --encrypt-key 115B4BB13BC768B8B2704E5663C429C3DB8BAD3B --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://[email //backups/rhel8
OR
PASSPHRASE="YourPassphraseHere" duplicity --encrypt-key YourPublicKeyIdHere --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://root@RemoteServer:XXXXX//backups/rhel8

Убедитесь, что вы не пропустили двойную косую черту в приведенной выше команде! Они используются для указания абсолютного пути к каталогу с именем /backups/rhel8 в поле резервного копирования и здесь будут храниться файлы резервных копий.

Замените YourPassphraseHere, YourPublicKeyIdHere и RemoteServer на введенную ранее парольную фразу, идентификатор открытого ключа GPG, а также IP-адрес или имя хоста резервной копии. сервер соответственно.

Ваш вывод должен быть похож на следующее изображение:

На изображении выше показано, что в общей сложности 86,3 МБ было зарезервировано в 3,22 МБ в месте назначения. Давайте переключимся на сервер резервного копирования, чтобы проверить нашу вновь созданную резервную копию:

Второй запуск той же команды дает гораздо меньший размер и время резервной копии:

Восстановление резервных копий Linux с помощью Duplicity

Для успешного восстановления файла, каталога с его содержимым или всей резервной копии место назначения не должно существовать (дублирование не перезапишет существующий файл или каталог). Чтобы внести ясность, давайте удалим журнал cron в окне CentOS:

rm -f /var/log/cron

Синтаксис восстановления одного файла с удаленного сервера:

PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore filename sftp://root@RemoteHost//backups/rhel8 /where/to/restore/filename

где,

  • имя файла — файл, который необходимо извлечь, с относительным путем к каталогу, для которого была создана резервная копия.
  • /where/to/restore — каталог в локальной системе, в который мы хотим восстановить файл.

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

PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore cron sftp://[email :XXXXX//backups/rhel8 /var/log/cron

Журнал cron должен быть восстановлен в нужное место.

Аналогично, вы можете удалить каталог из /var/log и восстановить его из резервной копии:

rm -rf /var/log/mail
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore mail sftp://[email :XXXXX//backups/rhel8 /var/log/mail

В этом примере каталог mail должен быть восстановлен в исходное местоположение со всем его содержимым.

Другие особенности Duplicity

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

duplicity list-current-files sftp://[email :XXXXX//backups/rhel8

Удалите резервные копии старше 6 месяцев:

duplicity remove-older-than 6M sftp://[email :XXXXX//backups/rhel8

Восстановите myfile внутри каталога gacanepa, как это было 2 дня и 12 часов назад:

duplicity -t 2D12h --file-to-restore gacanepa/myfile sftp://[email :XXXXX//remotedir/backups /home/gacanepa/myfile

В последней команде мы можем увидеть пример использования временного интервала (как указано в -t): серию пар, каждая из которых состоит из числа, за которым следует один из символов <. Strong>s, m, h, D, W, M или Y (с указанием секунд, минут, часов, дней, недель, месяцев или лет соответственно).

Краткое содержание

В этой статье мы объяснили, как использовать Duplicity, утилиту резервного копирования, которая обеспечивает шифрование файлов и каталогов «из коробки». Я настоятельно рекомендую вам заглянуть на сайт проекта duplicity для получения дополнительной документации и примеров.

Для вашего удобства мы предоставили справочную страницу duplicity в формате PDF, которая также является полным справочным руководством.

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