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


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

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

[email protected]:~$ gpg --gen-key

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

[email protected]:~$ 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..com
GPG=6EC115F4
DAY_FULL=1
DAYS_STORE=14
FILELIST=~/.config/-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 
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

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

[email protected]:~$ ./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 для инкрементального бекапа

  • Andrey

    опция
    --full-if-older-than 14D
    сильно упростит скрипт

  • Алексей

    Зачем раз в неделю нужно делать полный бекап, ведь инкрементальные будут добавлять необходимую информацию каждый день?

    • Rascal От автора

      Будет, но, как правило, со временем изменений становится все больше и размер инкрементального бекапа приближается к полному.

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

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