Backups mit Duplicity und Duply

Duplicity ist ein Backuptool, welches mit einem PGP-Key verschlüsseltes Backups, auf einem anderen Server anlegt. FÜr die Datensicherung also ideal. Als Speicherort können viele Variatnen, wie SSH, SCP, Amazon S3 oder auch OneDrive oder Dropbox verwendet werden. Es können inkrementelle und volle Backups angelegt werden. Inkrementelle Backups sichern nur die Änderungen zum letzen Vollbackup.

Dadurch wird nicht der komplette Datenbestand erneut gesichert, was natürlich Zeit spart. Also starten wir mit der Installation: Wir laden das Paket runter:

wget https://code.launchpad.net/duplicity/0.7-series/0.7.15/+download/duplicity-0.7.15.tar.gz

Duplicity entpacken, benötigte Pakete installieren, und Duplicity installieren:

tar xvzf duplicity-0.7.14.tar.gz
apt-get install python-dev librsync-dev intltool python-paramiko python-pycryptopp python-setuptools python-fasteners build-essential
cd duplicity-0.7.14
python setup.py install

Die Installation installiert in /usr/local/bin. Um Backups automatisiert auf einem anderen Rechner durchzuführen, müssen wir uns ohne Password beispielsweise per SSH anmelden können. Dazu erstellen wir SSH-Keys auf dem Server (wo Duplicity läuft) und schieben sie auf den zweiten Server, wo das Backup abgelegt werden soll:

ssh-keygen -t rsa
ssh-copy-id root@BACKUPHOST

Mit dem SSH-Befehl testen wir die Verbindung, ob alles geklappt hat:

ssh root@BACKUPHOST

Wir erstellen einen Ordner wo die Backups später liegen sollen(auf dem Backupserver):

mkdir /backup/duplicity

Damit das ganze verschlüsselt wird erstellen wir GPG-Keys. Das ist vorallem wichtig, wenn der Backupserver ein gemieteter Server im Netz oder ein Cloud Dienst wie OneDrive, Google Drive, Dropbox ist:

gpg --gen-key

Gespeichert in /root/.gnupg Public Key ID rausfinden um unseren erstellten Schlüssel zu finden:

gpg --list-keys

Optional ändern wir die Gültigkeit des Keys auf unendlich:

gpg --edit-key KEY-ID
gpg> expire
gpg> 0 für key does not expire eingeben
gpg> key 1
gpg> expire
gpg> 0 für key does not expire eingeben
gpg> save

Um das ganze Backupverfahren automatisiert und so einfach wie möglich laufen zu lassen, nutzen wir das Duply-Script:

wget https://downloads.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/2.0.x/duply_2.0.3.tgz
tar xvfz duply_2.0.3.tgz
cp duply_2.0.3/duply /usr/local/bin/

Duply kann mehrere Backups verwalten und nutzt dafür Profile. Zum Beispiel kann man ein Profil für ein Backup auf Server1 per SCP machen und ein Profil für ein Backup auf OneDrive. Profil erstellen:

duply backupuser create

Wir bearbeiten die Config und führen unsere Daten ein. DIe GPG-Key-ID aus dem früheren Schritt, unser festgelegtes Password dafür, das Target, wo das Backup gesichert werden soll (der Backupserver), die Source, wo von das Backup angelegt werden soll. Dann bestimmen wir mit MAX_AGE das Alter für die Backups. Ist ein Backup älter, wird es später automatisch gelöscht. Außerdem sollen maximal 4 Backups insgesamt gespeichert werden:

nano /root/.duply/backupuser/conf
GPG_KEY='0569ALC6'
GPG_PW='test123'
TARGET='sftp://[email protected]//backup/duplicity'
SOURCE='/root/test'
MAX_AGE=1M
MAX_FULL_BACKUPS=4

Wenn nötig, können Scripte vor und nach dem Backup automatisch ausgeführt werden. Dazu gibt es die Pre und Post Dateien:

/root/.duply/backupuser/pre
/root/.duply/backupuser/post

Es können Dateien excludiert werden:

/root/.duply/backupuser/exclude

Dann geht es los mit dem ersten Backup, welches wir manuell starten:

duply backupuser backup

Um später ein Full-Backup zu erzwingen:

duply backupuser full && duply backupuser purge --force

Wir können einen Status des Backups abfragen:

duply backupuser status

Und um alles zu automatisieren, setzen wir die Befehle in Crontab:

crontab -e
# Backup jede Nacht um 2:00
00 2 * * * /usr/local/bin/duply backupuser backup
# Full Backup einmal im Monat und alte löschen (MAX_FULL_BACKUPS Anzahl von vorhin wird beachtet)
#00 2 1 * * /usr/local/bin/duply backupuser full && /usr/local/bin/duply backupuser purgeFull --force
# Full Backup einmal im Monat und alte löschen (älter als MAX_AGE)
00 4 1 * * /usr/local/bin/duply backupuser full && /usr/local/bin/duply backupuser purge --force

Ein Widerherstellen des Backups (Restore) ist ähnlich einfach zu machen (/root/test ist der Ordner, wo das Backup wiederhergestellt wird): duply backupuser restore /root/test Wenn beim Restore ein Fehler “Volume was signed by key XXXXXX, not XXXXXX; Task RESTOREfailed with exit code 22”erscheint, ist es halb so wild. Der Restore lief trotzdem ohne Fehler durch. Der Fehler kann aber verhindert werden. Entweder den vollen langen Key in duply config einfügen oder temporär:

duply backupuser restore /root/test2 --sign-key XXXLANGERGPGKEYXXX