1.Установка Duplicity
Ubuntu
1 |
# apt-get update && apt-get install duplicity |
Centos (предварительно подключаем EPEL-репозитарий)
1 |
# yum update && yum install epel-release && yum install duplicity |
Если необходимо использовать шифрование/дешифрование, то генерируем GnuPG-ключи
1 |
# gpg --gen-key |
1 2 3 4 |
(1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) |
Тип ключа – вариант 1
Размер ключа – 2048
Как долго ключи будет валидны – 0(навсегда)
Вводим имя и Email
1 2 |
Change (N)ame, (C)omment, (E)-mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. |
Если необходимо,то задаем пароль-фразу
Для получения энтропии необходимой для генерации ключей в другом терминале на сервере выполняем какие-либо задачи или команды
Просмотр списка ключей
1 |
# gpg --list-keys |
1 2 3 4 5 |
/root/.gnupg/pubring.gpg ------------------------ pub 2048R/73B39905 2015-09-26 uid YourName YourSurname <XXXX@gmail.com> sub 2048R/A384982E 2015-09-26 |
Нас интересует ID публичного ключа – в данном случае
1 |
73B39905 |
.
Он будет использоваться как аргумент при выполнении команды duplicity для шифрования файлов
Базовые команды для работы с duplicity
2.Создание бекапа
Cоздание бекапа,который будет храниться локально на том же сервере
Бекап ТОЛЬКО каталогов /etc и /var/log без шифрования – размер тома =1024Mb, который сохраняется в локальной папке backup-duplicity Размер тома определяет какого размера временный файл будет создавать duplicity в файловой системе(по умолчанию создает этот файл в /tmp или /usr/tmp).По умолчанию(если не указана опция full) duplicity создает инкрементный бекап, но при запуске впервые duplicity создаст полный бекап
1 |
# duplicity --no-encryption --volsize=1024 --include=/etc --include=/var/log --exclude=/** / file:///backup-duplicity |
Аналогично,но с шифрованием
1 |
# duplicity --encrypt-key="73B39905" --volsize=1024 --include=/etc --include=/var/log --exclude=/** / file:///backup-duplicity |
Я не использовал пароль-фразу при создании gpg-ключей.Если использовалась такая фраза, то
Выполняем команду
1 |
# PASSPHRASE="YourPasshraseHere" duplicity --encrypt-key="73B39905" --volsize=1024 --include=/etc --include=/var/log --exclude=/** / file:///backup-duplicity |
При повторном выполнении этой же команды будет создан инкрементальный бекап
Бекап каталога /var/log исключая каталог /var/log/mysql
1 |
# duplicity --no-encryption --volsize=1024 --exclude=/var/log/mysql --include=/var/log/ --exclude=/** / file:///backup-duplicity |
Бекап всего каталога root за исключением папок /mnt, /proc, /tmp
1 |
# duplicity --no-encryption --volsize=1024 --exclude=/mnt --exclude=/proc --exclude=/tmp / file:///backup-duplicity |
Бекап на удаленный сервер по SFTP
Для этого нужно доустановить пакет
Ubuntu
1 |
# apt-get install python-paramiko |
Centos
Пакет автоматически устанавливается при установке duplicity
1 |
python-paramiko |
А) подключение по паролю
1 |
# duplicity --no-encryption --volsize=1024 --include=/etc --exclude=/** / sftp://$SSHUSER:$SSHPASSWORD@$SSHSERVER:$SSHPORT/$DESTFOLDER |
1 |
# duplicity --no-encryption --volsize=1024 --include=/etc --exclude=/** / sftp://root:123456@192.168.1.71:2222//backup/ |
Б) подключение по ключам
1 |
# duplicity --no-encryption --volsize=1024 --include=/etc --exclude=/** / sftp://$SSHUSER@$SSHSERVER:$SSHPORT/$DESTFOLDER |
1 |
# duplicity --no-encryption --volsize=1024 --include=/etc --exclude=/** / sftp://root@192.168.1.71:2222//backup/ |
Бекап на удаленный сервер по FTP
Для этого нужно доустановить пакет
Ubuntu
1 |
# apt-get install ncftp |
1 2 |
# duplicity --no-encryption --volsize=1024 --include=/etc --exclude=/** / ftp://ftpuser:ftppassword@ftphost/backup/ |
1 |
# duplicity --no-encryption --volsize=1024 --include=/etc --exclude=/** / ftp://user1:123@192.168.1.71/backup/ |
3.Восстановление из бекапа
По умолчанию(если не используется опция)
1 |
--force |
duplicity не перезаписывает существующие файлы и каталоги, поэтому восстанавливать нужно либо во временную папку либо использовать опцию
1 |
--force |
для принудительной перезаписи уже существующих файлов/каталогов
Полное восстановление бекапа во временный каталог
1 |
# mkdir /duplicity-temp |
1 |
# duplicity --no-encryption restore file:///backup-duplicity/ /duplicity-temp/ |
Проверяем
1 |
# find /duplicity-temp/etc/ -type f | wc -l |
1 |
1031 |
1 |
# find /etc/ -type f | wc -l |
1 |
1031 |
Восстановление одного файла
1 |
# duplicity --file-to-restore etc/mysql/my.cnf file:///backup-duplicity/ --no-encryption /duplicity-temp/my.cnf |
Проверка
1 |
# diff /etc/mysql/my.cnf /duplicity-temp/my.cnf |
Аналогично но восстановление файла, который был 3 дня назад
1 |
# duplicity --no-encryption -t 3D --file-to-restore etc/mysql/my.cnf file:///backup-duplicity/ /duplicity-temp/my.cnf |
Временные параметры
1 |
s |
— секунды
1 |
m |
– минуты
1 |
h |
— часы
1 |
D |
— дни
1 |
W |
— недели
1 |
M |
— месяцы
1 |
Y |
— годы
4.Другие полезные команды duplicity
просмотр списка файлов в последней резервной копии
1 |
# duplicity list-current-files file:///backup-duplicity |
при использовании шифрования
1 |
# duplicity list-current-files --encrypt-key="73B39905" file:///backup-duplicity |
Просмотр инфорамции о бекапе
1 |
# duplicity collection-status file:///backup-duplicity |
Проверка последней версии бекапа
1 |
# duplicity verify --no-encryption file:///backup-duplicity /etc/ |
при использовании шифрования
1 |
# duplicity verify --encrypt-key="73B39905" file:///backup-duplicity /etc/ |
Удаление бекапов старше 30 дней
1 |
# duplicity remove-older-than 30D --force file:///backup-duplicity/ |
5.Несколько скриптов с удаленной отливкой по SFTP, FTP, S3-Amazon
Создание бекапа без шифрования каталогов /etc и /var/www полного бекапа раз в 7 дней, в остальные дни –инкрементальный бекап. Удалять бекапы старше 30 дней, заливать бекапы по SFTP в каталог /backup в корне на удаленный сервер
1 |
# nano /root/duplicity-sftp.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/bin/bash SSHPORT="2222" SSHUSER="root" SSHPASSWORD="123456789" SSHSERVER="192.168.1.71" DESTFOLDER="/backup" DAYS_FULL=7 DAYS_STORE=30 #Authentiffication via SSH-keys duplicity --full-if-older-than ${DAYS_FULL}D --no-encryption --volsize=1024 --include=/etc --include=/var/www --exclude=/** / sftp://$SSHUSER@$SSHSERVER:$SSHPORT/$DESTFOLDER # Remove backup older 30 days duplicity remove-older-than ${DAYS_STORE}D --force sftp://$SSHUSER@$SSHSERVER:$SSHPORT/$DESTFOLDER #Authentification via password #duplicity --full-if-older-than ${DAYS_FULL}D --no-encryption --volsize=1024 --include=/etc --include=/var/www --exclude=/** / sftp://$SSHUSER:$SSHPASSWORD@$SSHSERVER:$SSHPORT/$DESTFOLDER # Remove backup older 30 days # duplicity remove-older-than ${DAYS_STORE}D --force sftp://$SSHUSER:$SSHPASSWORD@$SSHSERVER:$SSHPORT/$DESTFOLDER |
Аналогично, но заливка на удаленный сервер по FTP в каталог backup в домашний каталог пользователя user1
1 |
# nano /root/duplicity-ftp.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash FTPPORT="21" FTPUSER="user1" FTPPASSWORD="123" FTPSERVER="192.168.1.71" DESTFOLDER="backup" DAYS_FULL=7 DAYS_STORE=30 #Authentification via password duplicity --full-if-older-than ${DAYS_FULL}D --no-encryption --volsize=1024 --include=/etc include=/var/www --exclude=/** / ftp://$FTPUSER:$FTPPASSWORD@$FTPSERVER:$FTPPORT/$DEST$ #Remove backup older 30 days duplicity remove-older-than ${DAYS_STORE}D --force ftp://$FTPUSER:$FTPPASSWORD@$FTPSERVER:$FTPPORT/$DESTFOLDER |
Аналогично,но заливка на S3 Amazon в бакет,указанный в скрипте
Для этого нужно доустановить пакет
Ubuntu
1 |
# apt-get install python-boto |
1 |
# nano /root/duplicity-aws.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/bash # The S3 destination followed by bucket name DEST="s3://s3.eu-central-1.amazonaws.com/your_backet_name/" DAYS_FULL=7 DAYS_STORE=30 # Export some ENV variables so you don't have to type anything export AWS_DEFAULT_REGION='your_region' export AWS_ACCESS_KEY_ID='your_access_key' export AWS_SECRET_ACCESS_KEY='your_secret_key' duplicity --full-if-older-than ${DAYS_FULL}D --no-encryption --volsize=1024 --include=/etc include=/var/www --exclude=/** / ${DEST} #Remove backup older 30 days duplicity remove-older-than ${DAYS_STORE}D --force ${DEST} # Reset the ENV variables. unset AWS_DEFAULT_REGION unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY |
Источники:
1. http://duplicity.nongnu.org
2. http://www.tecmint.com/create-encrypted-linux-file-system-backups-using-duplicity/
3. http://www.linuxmd.net/instruction/199-ustanovka-i-nastrojka-duplicity-na-debian-based-distributivakh-tutorial
4. http://wiki.russianfedora.pro/index.php?title=%D0%90%D1%80%D1%85%D0%B8%D0%B2%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_Duplicity