Пример использования duplicity для инкрементального бекапа

В этом блоге я уже говорил про «облачный» бекап с использованием 7z+Dropbox, развивая тему хочу поделиться простым скриптом инкрементального зашифрованного бекапа на удаленный ftp-сервер с помощью утилиты duplicity.

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

rascal@localhost:~$ gpg --gen-key

Список доступных ключей:

rascal@localhost:~$ gpg --list-keys
/home/rascal/.gnupg/pubring.gpg
------------------------
pub   2048R/6EC115F4 2012-02-26
uid                  Rascal (localhost) 
sub   2048R/C1203923 2012-02-26

А теперь непосредственно сам скрипт:

#!/bin/bash

# ENV
FTP_USER=username
FTP_PASSWORD=paSSw0rd
FTP_HOST=ftp.example.com
GPG=6EC115F4
DAY_FULL=1
DAYS_STORE=14
FILELIST=~/.config/backup-duplicity.list

#
# * Do not edit below this line
#
DAY_OF_WEEK=`date +%u`

if [ "$DAY_OF_WEEK" -eq "$DAY_FULL" ]
then
    ARG1=full
else
    ARG1=incr
fi

# Run backup
export FTP_PASSWORD
duplicity $ARG1 --encrypt-key="$GPG" --include-filelist=$FILELIST / ftp://$FTP_USER@$FTP_HOST/

# Clear old data
duplicity remove-older-than ${DAYS_STORE}D ftp://$FTP_USER@$FTP_HOST/

unset FTP_PASSWORD
exit 0

Описание переменных используемых в скрипте:
FTP_USER — логин ftp-сервера
FTP_PASSWORD — пароль ftp-сервера
FTP_HOST — адрес ftp-сервера
GPG — ключ используемый для шифрования
DAYS_FULL — день в который происходит полный бекап; 0 — воскресение, 6 — суббота
DAYS_STORE — за сколько дней хранить резервные копии.

Формат списка backup-duplicity.list:

- /bin
- /boot
- /dev
+ /etc
+ /home
- /home/rascal/Downloads
- /lib
- /lib32
- /lib64
- /media
- /mnt
- /opt
- /proc
+ /root
- /sbin
- /selinux
- /srv
- /sys
- /tmp
- /usr
- /var
+ /var/spool/cron/crontabs

Результат работы скрипта выглядит примерно так:

rascal@localhost:~$ ./bin/backup-duplicity.sh
NcFTP version is 3.2.4
Reading filelist /home/rascal/.config/backup-duplicity.list
Sorting filelist /home/rascal/.config/backup-duplicity.list
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
--------------[ Backup Statistics ]--------------
StartTime 1330020724.17 (Thu Feb 23 22:12:04 2012)
EndTime 1330020729.34 (Thu Feb 23 22:12:09 2012)
ElapsedTime 5.17 (5.17 seconds)
SourceFiles 1649
SourceFileSize 4468555 (4.26 MB)
NewFiles 1649
NewFileSize 4468555 (4.26 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 1649
RawDeltaSize 3594797 (3.43 MB)
TotalDestinationSizeChange 812970 (794 KB)
Errors 0
-------------------------------------------------

3 комментария “Пример использования duplicity для инкрементального бекапа”

Комментирование закрыто.