Hetzner - DokuWiki

Duplicity Script/ru

Скрипт резервного копирования с помощью Duplicity

Обратите внимание: перед тем, как начать использовать скрипт следует выполнить его с опцией full для создания первой полной резервной копии.

Скрипт делает резервные копии доступными в течение двух месяцев. Старые версии копий удаляются. Новая полная резервная копия создаётся каждый месяц первого числа.

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

Например, скрипт можно разместить в /usr/local/sbin/backup.sh и сделать его исполняемым с помощью chmod 755 /usr/local/sbin/backup.sh. П еред использованием необходимо внести в скрипт детали доступа, такие как имя пользователя, пароль и имя хоста. Также необходимо задать пароль GPG, используемый для шифрования копий.

#!/bin/bash
#
# Simple script for creating backups with Duplicity.
# Full backups are made on the 1st day of each month or with the 'full' option.
# Incremental backups are made on any other days.
#
# USAGE: backup.sh [full]
#

# get day of the month
DATE=`date +%d`

# Set protocol (use scp for sftp and ftp for FTP, see manpage for more)
BPROTO=scp

# set user and hostname of backup account
BUSER='u10000'
BHOST='u10000.your-backup.de'

# Setting the password for the Backup account that the
# backup files will be transferred to.
# for sftp a public key can be used, see:
# http://wiki.hetzner.de/index.php/Backup
#BPASSWORD='yourpass'

# directories to backup (but . for /)
BDIRS="etc home srv ."
TDIR=`hostname -s`
LOGDIR='/var/log/duplicity'

# Setting the pass phrase to encrypt the backup files. Will use symmetrical keys in this case.
PASSPHRASE='yoursecretgpgpassphrase'
export PASSPHRASE

# encryption algorithm for gpg, disable for default (CAST5)
# see available ones via 'gpg --version'
ALGO=AES

##############################

if [ $ALGO ]; then
 GPGOPT="--gpg-options '--cipher-algo $ALGO'"
fi

if [ $BPASSWORD ]; then
 BAC="$BPROTO://$BUSER:$BPASSWORD@$BHOST"
else
 BAC="$BPROTO://$BUSER@$BHOST"
fi

# Check to see if we're at the first of the month.
# If we are on the 1st day of the month, then run
# a full backup. If not, then run an incremental
# backup.

if [ $DATE = 01 ] || [ "$1" = 'full' ]; then
 TYPE='full'
else
 TYPE='incremental'
fi

for DIR in $BDIRS
do
  if [ $DIR = '.' ]; then
    EXCLUDELIST='/usr/local/etc/duplicity-exclude.conf'
  else
    EXCLUDELIST="/usr/local/etc/duplicity-exclude-$DIR.conf"
  fi

  if [ -f $EXCLUDELIST ]; then
    EXCLUDE="--exclude-filelist $EXCLUDELIST"
  else
    EXCLUDE=''
  fi

  # first remove everything older than 2 months
  if [ $DIR = '.' ]; then
   CMD="duplicity remove-older-than 2M -v5 --force $BAC/$TDIR-system >> $LOGDIR/system.log"
  else
   CMD="duplicity remove-older-than 2M -v5 --force $BAC/$TDIR-$DIR >> $LOGDIR/$DIR.log"
  fi
  eval $CMD

  # do a backup
  if [ $DIR = '.' ]; then
    CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE / $BAC/$TDIR-system >> $LOGDIR/system.log"
  else
    CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE /$DIR $BAC/$TDIR-$DIR >> $LOGDIR/$DIR.log"
  fi
  eval  $CMD

done

# Check the manpage for all available options for Duplicity.
# Unsetting the confidential variables
unset PASSPHRASE
unset FTP_PASSWORD

exit 0

Файлы или директории, копии которых создавать не нужно, передаются duplicity с помощью exclude-filelist в скрипте. Здесь можно создать лист исключений для каждой директории, для которой создаётся резервная копия. Исключения записываются в файл /usr/local/etc/duplicity-exclude.conf для корневой директории, для других директорий они записываются в /usr/local/etc/duplicity-exclude-$DIR.conf (например: /usr/local/etc/duplicity-exclude-home.conf). Это может включать следующее содержимое:

- /dev
- /proc
- /sys
- /tmp
- /etc
- /home
- /srv
- /var/cache

Для периодического выполнения скрипта можно воспользоваться планировщиком задач cron. Скрипт можно разместить либо в /etc/cron.daily (ежедневно), /etc/cron.weekly (еженедельно) или в /etc/cron.monthly (ежемесячно). Также можно использовать crontab, чтобы назначить конкретное время выполнения, назначив его в файле /etc/cron.d/:

# /etc/cron.d/duplicity
0 0 * * * root /usr/local/sbin/backup.sh >/dev/null 2>&1


Оригинальная версия от sethx опубликовано на форуме Hetzner.



© 2017. Hetzner Online GmbH. Alle Rechte vorbehalten.