Backup auf S3 Storage mit Duplicity/Duply

Der Amazon (AWS) S3 Speicher wird gerne als unkompliziertes Backup für seine Daten verwendet.
Allerdings sollte dann -da die Daten auf fremden Servern gespeichert sind- auf jeden Fall verschlüsselt erfolgen.
Mit Duply, welches ein Wrapper für Duplicity ist geht das ganz einfach.

Bucket anlegen

Als erstes muss bei Amazon (oder einem anderen S3-Storage Anbieter) ein Bucket angelegt- und der Access-/Secret Key notiert werden.

GPG key generieren

Zunächst muss ein GPG key für die Verschlüsselung generiert werden.

Und um genügend entropy dafür zu haben wird es in den meisten Fällen nötig sein die rng-tools zu installieren.

yum install gpg rng-tools
gpg --gen-key

Bei der Ausgabe ist „XXXXXXXX“ der GPY key; das Passwort ist die eingegebene Passphrase:

gpg: key XXXXXXXX marked as ultimately trusted
Hinweis

Falls später beim Backup die Meldung erscheint:

Volume was signed by key XXXXXXXXXXXXXXXX, not YYYYYYYY

dann muss man in der duply-Konfiguration weiter unten als GPG_KEY die ersten 16 Zeichen des Wertes für: „Key fingerprint“ angeben.

Installation

Nun müssen die Pakete Duplicity und Duply installiert werden:

yum install duply duplicity

Konfiguration

Profil erstellen

duply 'backup' create

In der nun erstellten Datei: /etc/duply/backup/conf müssen die folgenden Werte angepasst werden:

GPG_KEY='_KEY_ID_'
GPG_PW='_GPG_PASSWORD_'
 
TARGET='s3://aws.amazon.com/backup'
 
export AWS_ACCESS_KEY_ID='_ACCESS_KEY_'
export AWS_SECRET_ACCESS_KEY='_SECRET_KEY_'
 
SOURCE='/backup/path'
 
MAX_AGE=1M
MAX_FULL_BACKUPS=4
MAX_FULLS_WITH_INCRS=1

Zuletzt sollte noch eine exclude Liste (z.B. für /sys/, /proc/, /mnt/, usw.) angelegt werden:
/etc/duply/backup/exclude

- /proc/*
- /sys/*
- /mnt/*

Cronjob

Für das regelmässige Backup muss nun noch ein cronjob erstellt werden:

0 0 * * 7   /usr/bin/duply backup full_verify_purge --force > /var/log/duply.log 2>&1
0 0 * * 1-6 /usr/bin/duply backup incr                      > /var/log/duply.log 2>&1
Hinweis

Das: full_verify_purge ist in duplicity ein conditional OR (wird also nur ausgeführt wenn der vorherige Aufruf fehlgeschlagen ist) und würde sich in bash so übersetzen lassen:

duply backup full || duply backup verify || duply backup purge --force

In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht. Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt. Neue Cronjobs können mit crontab -e erstellt werden. Hier ist anzumerken, dass für alle Kommandos und Konfigurationsdateien der absolute Pfad angegeben werden muss.

Hinweis

Anstelle des Profils (backup) könnte man auch den komplette Pfad zur Konfiguration angeben, z.B.:

0 0 * * 7 /usr/bin/duply /root/.duply/backup full_verify_purge --force

Wiederherstellung

Zum Wiederherstellen (restore) können folgende Befehle verwendet werden:

Das letzte Backup nach /tmp/duply-restore/ wiederherstellen:

duply backup restore /tmp/duply-restore/

Die Datei /etc/passwd von vor 4 Tagen nach /tmp/duply-restore/ wiederherstellen:

duply backup fetch etc/passwd /tmp/duply-restore/  4D

Monitoring

Der Status des backups kann mittels:

duply backup status

abgefragt werden.

Für das Überwachen mit icinga kann das Script check_duply verwendet werden.

Quellen

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 15 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.