UNIX
online
pulse
logo
| unixonline.ru | rsync.net | поддержка | duplicity |
услуги
   поддержка
   резервирование
   мониторинг
   оптимизация

цены
контакты
 

Создание зашифрованных резервных копий при помощи Duplicity

rsync.net поддерживает использование утилиты 'duplicity', которая является компактной и мощной утилитой для автоматического шифрования и создания бэкапов.

Дополнительную информацию о поддержке утилит шифрования на rsync.net, их преимуществах и недостатках можно получить по ссылке.

Важно! Если вы используете duplicity для создания резервных копий под пользователем root (что предпочтительно), вам необходимо выполнять все операции и команды под данной учетной записью. Не используйте sudo для создания ключей GPG или запуска команд, т.к. вы можете получить ошибки вида "encryption failed: public key not found".

Установка python и duplicity

Duplicity является скриптом на языке python. Т.о. вам необходимо установить python (версии 2.3 или выше).

Дополнительно, вам потребуется установить GPG и librsync. Данные компоненты уже могут быть установлены в вашей системе.

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

ИЛИ, вы можете получить исходные коды duplicity с сайта автора http://duplicity.nongnu.org/ и выполнить установку командой:

# python setup.py install

Вы можете выбрать альтернативное местоположение. Например, /usr/local:

# python setup.py install --prefix=/usr/local

Вы можете использовать директиву --librsync-dir для указания местоположения librsync в вашей системе. Для Mac OSX с использованием MacPorts эта опция может быть необходима для установки duplicity:

# python setup.py install --librsync-dir=/opt/local

Создание ключей SSH

Хотя duplicity имеет возможность для запроса пароля SSH (см. опцию --ssh-askpass), вы, вероятно, не захотите вводить его каждый раз во время операции резервного копирования.

Т.о., если вы желаете автоматизировать процесс создания бэкапов вам необходимо безпарольное соединение SSH при использовании duplicity.

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

Создание ключа GPG

Duplicity шифрует резервные копии при помощи GPG. Это означает, что вам требуется создать как минимум один ключ GPG который будет использоваться duplicity для шифрования данных и подписи файлов.

Имеется возможность создания двух независимых ключей (возможно, для разных пользователей) и их использования для шифрования и цифровой подписи. Более детальное описание вы можете получить по ссылке:

http://www.debian-administration.org/articles/209

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

Выполните команду:

# gpg --gen-key

При создании ключа, стоит выбрать опции по умолчанию:

Please select what kind of key you want:
   (1) DSA and Elgamal (default)
   (2) DSA (sign only)
   (5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits

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

# gpg --list-keys

Вывод команды должен быть похож на:

/root/.gnupg/pubring.gpg
------------------------
pub   1024D/ABAB2AB3 2007-04-23
uid                  Home File
sub   2048g/12345678 2007-04-23

В выводе отображаются два ключа - публичный и приватный. Обратите внимание на id публичного ключа - в текущем примере это "ABAB2AB3".

Создание резервных копий

Не рекомендуется размещать резервные копии duplicity в корневой директории файловой системы rsync.net, т.к. duplicity генерирует множество служебных дополнительных файлов.

Создайте директорию на файловой системе rsync.net где бы вы хотели хранить резервные копии. В данном примере мы создадим директорию "backups":

# ssh 1234@usw-s001.rsync.net mkdir backups

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

Ваша первая команда duplicity должна выглядеть как:

# duplicity full --encrypt-key="ABAB2AB3" /your/files \
scp://1234@usw-s001.rsync.net/backups

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

Если же в процессе работы возникли ошибки (обычно они начинаются со строк "Traceback (most recent call last):") вам необходимо задать опцию -v9:

# duplicity full -v9 --encrypt-key="ABAB2AB3" /your/files \
scp://1234@usw-s001.rsync.net/backups

и отправить вывод команды по адресу support@rsync.net.

Последующий запуск duplicity

Если первая резервная копия создалась без ошибок, то в дальнейшем вы можете просто запускать утилиту с указанием опции "inc" вместо "full":

# duplicity inc --encrypt-key="ABAB2AB3" /your/files \
scp://1234@usw-s001.rsync.net/backups

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

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

Таким образом, вам необходимо решить сколько времени должны храниться данные и установить опцию "remove-older-than" позволяющую duplicity удалять резервные копии старше чем требуемое количество дней. Например:

# duplicity remove-older-than 30d -v9 --encrypt-key="ABAB2AB3" /your/files \
scp://1234@usw-s001.rsync.net/backups

Для получения информации по опции remove-older-than и формате задания времени вы можете обратиться к документации duplicity.

Помните! Вы не можете удалять бэкапы более новые, нежели ваш последний полный бэкап. Т.о., в примере выше, использование опции remove-older-than ни на что не влияет, т.к. утилита не может удалять резервные копии, которые были созданы после последнего полного бэкапа. Чтобы данная опция работала, необходимо периодически создавать полные резервные копии.

Помните! Duplicity не позволяет задать одновременно опции для операций создания и удаления резервных копий. Директива "remove" должна выполняться отдельной командой.

Помните! Необходимо добавлять директиву --force каждый раз, когда требуется удаление или перезапись данных. Т.о. вам требуется добавлять директиву --force для всех операций, которые используют команды "remove" или "remove-older-than".

Автоматизация

Вы можете создать GPG ключи без использования ключевой фразы. В общем случае, это не самая удачная практика, однако, если вам требуется только шифрование данных на rsync.net, то этого будет вполне достаточно, т.к. ключевая фраза используется только для вашего приватного ключа. С другой стороны, вам требуется создать резервные копии ключей GPG и, если у вас нет надежного способа их хранения, то ключевая фраза необходима. Ниже предоставлен пример скрипта, который экспортирует ключевую фразу.

Итак, вам необходимо создать скрипт, экспортирующий ключевую фразу и запускающий команды duplicity:

#!/bin/bash
export PASSPHRASE=yourpassphrase
duplicity inc --encrypt-key "ABAB2AB3" /your/files \
scp://1234@usw-s001.rsync.net/backups

Убедитесь, что скрипт имеет бит исполнения (chmod +x) и задайте расписание его выполнения в crontab.

Проверка и восстановление

Для проверки ваших резервных копий (а мы настоятельно рекомендуем их проверять) просто поменяйте местами источник и приемник и добавьте директиву "verify":

# duplicity verify --encrypt-key="ABAB2AB3" \
scp://1234@usw-s001.rsync.net/backups /your/files

Данная операция не восстанавливает файлы, а просто сравнивает и проверяет их. Вы можете добавить директиву -v9 для отображения полной информации.

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

# mkdir /your/restored/files
# duplicity --encrypt-key="ABAB2AB3" \
scp://1234@usw-s001.rsync.net/backups /your/restored/files

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

Дополнительные замечания

Автор duplicity, Kenneth Loafman, дал полезный совет:

Как правило, я храню несколько полных резервных копий и использую директивы duplicity в следующем порядке:

# duplicity cleanup target
# duplicity remove-older-than 30d target
# duplicity full|inc source target

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

Я создаю полную копию каждое воскресенье по cron и инкрементальную копию каждую ночь. Это позволяет иметь резервные копии за последний месяц.

Если у вас возникли вопросы по использованию duplicity, вы можете задать их по адресу support@rsync.net.