Server-backup mit duplicity auf Amazon S3

Das Backup für PCs und Laptops macht Backuppc sehr fein, aber für die Root-Server braucht es eine andere Lösung.

Duplicity macht gpg-verschlüsselte Backups und unterstützt die unterschiedlichsten Endpunkte wie ftp, rsync, scp, ssh, webdav[s] und auch Amazon S3. Hier mein Mini-Bash-Skript mit dem ich meine Server dorthin sichere:

#!/bin/bash

BDIRS="/etc /home /"
LOGDIR='/var/log/duplicity'
BAC="s3+http://ihr_bucket_name.s3.amazonaws.com"
# symmetrische verschluesselung fuer gpg
export PASSPHRASE='einelangeschwierigepassphrase'
export AWS_SECRET_ACCESS_KEY="amazon_aws_secret_access_key"
export AWS_ACCESS_KEY_ID="amazon_aws_access_key"
##### end of config ##########

BCLIENT=$(hostname);
for FULL_DIR in $BDIRS
do
  DIR=$(basename $FULL_DIR)
  if [ $DIR == "/" ]
  then
    DIR="root"
  fi
  EXCLUDELIST="/usr/local/etc/duplicity-exclude-$DIR.conf"
  if [ -f $EXCLUDELIST ]; then
    EXCLUDE="--exclude-filelist $EXCLUDELIST"
  else
    EXCLUDE=''
  fi
  duplicity remove-older-than 60D -v3 --force $BAC/$BCLIENT_$DIR >> $LOGDIR/$DIR.log
  duplicity --full-if-older-than 30D -v3 $EXCLUDE $FULL_DIR $BAC/$BCLIENT-$DIR 
    >> $LOGDIR/$DIR.log
done

export PASSPHRASE=""
export AWS_SECRET_ACCESS_KEY=""
export AWS_ACCESS_KEY_ID=""

exit 0

Das Skript entstand in Anlehnung an ein Backup-Skript von Hetzner, wobei ich es noch weiter vereinfacht und auf S3 umgestellt habe. Backups werden 60 Tage aufbewahrt, wobei alle 30 Tage ein volles Backup gemacht wird. In den Zeilen 3 bis 9 sind die entsprechenden Anpassungen zu machen. Aufgerufen wird das Skript jede Nacht von cron:

root@yourhost:/root $ cat /etc/cron.d/duplicity 
# /etc/cron.d/duplicity: crontab fragment for backup
# backup at 4 in the morning
55 3 * * * root /usr/local/sbin/backup.sh >/dev/null 2>&1
root@yourhost:/root $

See also