Опыт показывает, что нельзя быть слишком параноидальным в отношении резервных копий системы. Когда речь идет о защите и сохранении ценных данных, лучше перегибать палку и убедиться, что вы можете полагаться на свои резервные копии в случае необходимости.
Даже сегодня, когда некоторые облачные и хостинговые провайдеры предлагают автоматизированные резервные копии для VPS по относительно низкой цене, вам лучше создать свою собственную стратегию резервного копирования с использованием ваших собственных инструментов, чтобы сэкономить немного денег, а затем, возможно, использовать их на покупку дополнительного хранилища или получение более крупного VPS.
Звучит интересно? В этой статье мы покажем вам, как использовать инструмент под названием Duplicity для резервного копирования и шифрования файлов и каталогов. Кроме того, использование инкрементального резервного копирования для этой задачи поможет нам сэкономить место.
Having said that, let’s get started.
Установка инструмента резервного копирования Duplicity в Linux
Для установки Duplicity в дистрибутивах на основе RHEL сначала вам нужно будет включить репозиторий EPEL (вы можете пропустить этот шаг, если используете сам Fedora).
На RHEL 9:
subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
На CentOS 9, AlmaLinux 9, Rocky Linux 9:
dnf config-manager --set-enabled crb dnf install epel-release
На RHEL 8:
subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
На CentOS 9, AlmaLinux 9, Rocky Linux 9:
dnf config-manager --set-enabled powertools dnf install epel-release
Затем запустите,
dnf install duplicity
Для дистрибутивов на основе Debian таких как Ubuntu и Linux Mint.
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 protected] ssh-copy-id -p XXXXX [email protected]
Затем убедитесь, что вы можете подключиться к резервному серверу без использования пароля:
ssh [email protected]

Теперь нам нужно создать GPG ключи, которые будут использоваться для шифрования и дешифрования наших данных:
gpg2 --full-gen-key
Вас попросят ввести:
- Тип ключа
- Размер ключа
- Длительность действия ключа
- A passphrase

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

Строка, выделенная жёлтым цветом выше, известна как идентификатор открытого ключа и является запрашиваемым аргументом для шифрования ваших файлов.
Создание резервной копии Linux с помощью Duplicity
Для начала просто давайте сделаем резервную копию только каталога /var/log, за исключением /var/log/anaconda и /var/log/sa.
Поскольку это наша первая резервная копия, она будет полной. Последующие запуски будут создавать инкрементные резервные копии (если мы не добавим опцию full без тире прямо рядом с duplicity в команде ниже):
PASSPHRASE="tecmint" duplicity --encrypt-key 115B4BB13BC768B8B2704E5663C429C3DB8BAD3B --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://[email protected]//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 на резервном сервере, где будут храниться файлы резервных копий.
Замените ВашПарольЗдесь, ВашИдентификаторОткрытогоКлючаЗдесь и УдаленныйСервер на пароль, который вы ввели ранее, идентификатор открытого ключа GPG и IP-адрес или имя хоста резервного сервера, соответственно.
Ваш вывод должен быть похож на следующее изображение:

На изображении выше указано, что было создано резервное копирование общим объемом 86.3 MB в 3.22 MB в пункте назначения. Давайте перейдем на резервный сервер, чтобы проверить нашу недавно созданную резервную копию:

A second run of the same command yields a much smaller backup size and time:

Восстановление резервных копий Linux с помощью Duplicity
Для успешного восстановления файла, каталога с его содержимым или всей резервной копии пункт назначения не должен существовать (duplicity не перезаписывает существующий файл или каталог). Для ясности давайте удалим журнал cron на сервере CentOS:
rm -f /var/log/cron
Синтаксис для восстановления одного файла с удаленного сервера:
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore filename sftp://root@RemoteHost//backups/rhel8 /where/to/restore/filename
где,
- имя_файла – это файл, который нужно извлечь, с относительным путем к каталогу, который был скопирован
- /куда/восстановить – это каталог в локальной системе, куда мы хотим восстановить файл.
В нашем случае, чтобы восстановить основной журнал cron из удаленной резервной копии, нам нужно выполнить:
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore cron sftp://[email protected]:XXXXX//backups/rhel8 /var/log/cron
Журнал cron должен быть восстановлен в желаемое место назначения.
Точно так же, не стесняйтесь удалить каталог из /var/log и восстановить его с помощью резервной копии:
rm -rf /var/log/mail PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore mail sftp://[email protected]:XXXXX//backups/rhel8 /var/log/mail
В этом примере каталог mail должен быть восстановлен в его исходное местоположение со всем содержимым.
Использование команды Duplicity
В любое время вы можете отобразить список архивированных файлов с помощью следующей команды:
duplicity list-current-files sftp://[email protected]:XXXXX//backups/rhel8
Удалить резервные копии, старше 6 месяцев:
duplicity remove-older-than 6M sftp://[email protected]:XXXXX//backups/rhel8
Восстановить мой_файл внутри каталога gacanepa, как это было 2 дня и 12 часов назад:
duplicity -t 2D12h --file-to-restore gacanepa/myfile sftp://[email protected]:XXXXX//remotedir/backups /home/gacanepa/myfile
В последней команде мы можем увидеть пример использования интервала времени (как указано в -t): серия пар, где каждая состоит из числа, за которым следует один из символов s, m, h, D, W, M или Y (указывающих секунды, минуты, часы, дни, недели, месяцы или годы соответственно).
Сводка
В этой статье мы объяснили, как использовать Duplicity, утилиту для резервного копирования, которая предоставляет шифрование файлов и каталогов из коробки. Я настоятельно рекомендую вам ознакомиться с сайтом проекта Duplicity для получения дополнительной документации и примеров.
Мы предоставили страницу руководства пользователя Duplicity в формате PDF для вашего удобства в чтении, это также полное справочное руководство.
Не стесняйтесь сообщить нам, если у вас есть какие-либо вопросы или комментарии.
Source:
https://www.tecmint.com/duplicity-create-encrypted-incremental-linux-backup/