Duplicity

Aus Synology Wiki
Wechseln zu: Navigation, Suche

duplicity ist ein Backup-Programm, das eine Vielzahl von Zielen unterstützt, unter anderem:

  • lokal,
  • ssh/scp,
  • rsync,
  • ftp,
  • WebDAV,
  • IMAP (E-Mail) oder
  • Amazon S3.

Weiterhin können die Backups mittels GnuPG verschlüsselt werden.

duplicity verwendet inkrementelle Backups. Mittels des rsync-Algorithmus werden die Änderungen erfasst. Die Dateien werden mittels tar gepackt, für Deltas wird rdiff verwendet. Im Zweifelsfall könnte man also auch direkt die Backup-Dateien entpacken. Die Metadaten werden für den schnelleren Zugriff unter "~/.cache/duplicity/" zwischengespeichert. Wenn die lokalen fehlen, werden sie erst runtergeladen.

Voraussetzungen

Installation

1. Konsole auf der DS öffnen.
2. Mittels IPKG installieren, notwendige Abhängigkeiten werden automatisch mit installiert:

DS> ipkg install py26-duplicity

3. Das Skript erwartet "gpg", installiert wird aber gpg2, also das fixen:

DS> cd /opt/bin
DS> ln -s gpg2 gpg

4. Die Version 0.6.11 von duplicity (aktuelle zum Zeitpunkt der Erstellung dieser Seite) hat einen Bug, der inkrementelle Backups unmöglich macht (leere Manifest-Dateien auf der Ziel-Seite). Zum Fixen sind folgende Schritte notwendig. Bei neueren duplicity-Version ist dies ggf. nicht mehr nötig.

DS> cd wo_die_datei_liegt
DS> tar -xvf GnuPGInterface-0.3.2.tar.gz
  • Installierte ersetzen:
DS> cp GnuPGInterface-0.3.2/GnuPGInterface.py /opt/lib/python2.6/site-packages/duplicity/
DS> rm /opt/lib/python2.6/site-packages/duplicity/GnuPGInterface.pyc

5. Test mit:

DS> duplicity --version

Verschlüsselung

Die folgenden Schritte sind nur notwendig, wenn die Backups verschlüsselt werden sollen. Das Ganze muss einmalig durchgeführt werden. Wenn man bereits Schlüssel besitzt, können die auch verwendet werden.

1. Schlüssel mittels GnuPG erstellen:

DS> gpg2 --gen-key
(Das kann ein Bissel dauern. Alternativ kann man die Schlüssel auch auf einem anderen Rechner erstellen und dann importieren, unter Windows z.B. mit GPG4Win. In dem Fall nicht vergessen, den Schlüssel als vertrauenswürdig zu kennzeichnen.)

2. Schlüssel anzeigen:

DS> gpg2 --list-keys
Wichtig ist die 8-stellige Buchstaben-Ziffer-Kombination in der ersten Zeile (wenn es nur einen Schlüssel gibt), das ist die ID von dem Schlüssel.

Achtung: Auf die Schlüssel (und das dazugehörige Passwort) sollte man gut aufpassen. Sollten die verloren gehen, kommt man nicht mehr an die damit verschlüsselten Daten heran.

Allgemeine Parameter

Die folgenden Parameter sind bei allen Aufrufen von duplicity anzugeben:

  • Wenn Verschlüsselung verwendet werden soll:
--encrypt-key "XXXXXXXX" --sign-key "XXXXXXXX" - wobei XXXXXXXX die Schlüssel-ID von oben ist
duplicity fragt automatisch nach dem Passwort. Wenn man dies umgehen will (zur Automatisierung), kann folgender Befehl (vor dem Aufruf von duplicity) verwendet werden:
export PASSPHRASE=GPGPASSWORT
  • Wenn keine Verschlüsselung verwendet werden soll:
--no-encryption

Backup

Zum Backup ist folgender Befehl zu verwenden:

DS> duplicity ALLGEMEINE_PARAMETER QUELLE ZIEL

Wenn noch kein Backup stattgefunden hat, wird ein vollständiges erstellt (full backup). Ansonsten wird inkrementell basierend vom letzten Backup weitergemacht (also nur die geänderten / neuen Dateien). Die Backup-Dateien (.tar) werden entsprechend der "volsize" (Standard 25 Mb) aufgeteilt.

GMail (mit Verschlüsselung, Zeile umgebrochen):

DS> duplicity --encrypt-key "XXXXXXXX" --sign-key "XXXXXXXX" --volsize 10 --imap-mailbox "LABEL" 
/volume1/was_auch_immer/ imaps://ACCOUNT:PASSWORT@imap.gmail.com/ADRESSE
LABEL - das Label muss schon existieren
ACCOUNT - der Teil vor dem @ der Adresse
PASSWORT - das Passwort (kann man inkl. des : weglassen, dann muss man es immer eingeben)
ADRESSE - Absende-Addresse für die Mails, sollte für jeden Backup-Job unterschiedlich sein

GMX (Webdav, keine Verschlüsselung):

DS> duplicity --no-encryption /volume1/was_auch_immer/ webdavs://KUNDENUMMER:PASSWORT@mediacenter.gmx.net/
KUNDENUMMER - die Kundennummer bei GMX
PASSWORT - das Passwort (kann man inkl. des : weglassen, dann muss man es immer eingeben)
Am Ende kann ein Pfad angehängt werden, wenn das Backup in einen Ordner soll. Dieser muss bereits am Ziel existieren.

Status

Anzeige des Status:

DS> duplicity collection-status ALLGEMEINE_PARAMETER ZIEL
gibt sowas in der Form:
Chain start time: Thu Jan 20 19:05:05 2011
Chain end time: Sun Feb  6 04:00:17 2011
Number of contained backup sets: 22
Total number of contained volumes: 55
 Type of backup set:                            Time:      Num volumes:
                Full         Thu Jan 20 19:05:05 2011                34
         Incremental         Thu Jan 20 19:45:23 2011                 1
         Incremental         Thu Jan 20 19:49:01 2011                 1
--snip --
         Incremental         Sat Feb  5 04:00:18 2011                 1
         Incremental         Sun Feb  6 04:00:17 2011                 1

Anzeige der enthaltenen Dateien:

DS> duplicity list-current-files ALLGEMEINE_PARAMETER ZIEL

Wiederherstellen

Zum Wiederherstellen von Dateien muss nur die Angabe von Quelle und Ziel umgedreht werden:

DS> duplicity ALLGEMEINE_PARAMETER ZIEL QUELLE

Wenn man nur einzelne Dateien haben möchte, kann man diese mit "--file-to-restore PFAD" angeben.

Aufräumen

Muss man bedenken, dass durch die inkrementellen Backups der Platzbedarf auf dem Ziel immer weiter wächst. Daher sollte man von Zeit zu Zeit aufräumen. Dazu ein neues vollständiges Backup erzwingen:

DS> duplicity full ALLGEMEINE_PARAMETER QUELLE ZIEL

Und anschließend das vorhergehende Set und die jetzt überflüssigen Metadaten löschen:

DS> duplicity remove-all-but-n-full 1 --force ALLGEMEINE_PARAMETER ZIEL
DS> duplicity cleanup --extra-clean --force ALLGEMEINE_PARAMETER ZIEL


Duplicity Backup Skript

Um die vorher beschriebenen Backup / Restore / CleanUp Aufgaben zu vereinfachen bzw. zu automatisieren bietet sich ein Wrapper Skript um duplicity an. Ein solches gibt es z.B. unter: duplicity-backup

Nach Anpassung des sehr gut dokumentierten Konfigurationsfiles "duplicity-backup.conf" lässt sich durch Aufruf des "duplicity-backup.sh" Skriptes die entsprechende Aufgabe starten.

Zum Versenden von Emails kann man mittels "ipkg install nail" ein schlankes Tool installieren und dieses als MAIL="nail" in der duplicity-backup Konfigurationsdatei angeben.

Cron Job

Um die Backups automatisiert durchzuführen bietet sich ein Cron Job an. Jedoch scheint dies Probleme zu machen: Ein Backup, dass aus der Kommandozeile gestartet wurde verursacht als identischer Befehle einen Fehler über einen Cron Job.

Aus diesem Grund kann man den Aufruf aus der Kommandozeile vorgauckeln, indem man ein Skript schreibt, dass sich selbst von der Diskstation auf der Diskstation per ssh einloggt und den gewünschten Befehl ausführt.

Dazu müssen wir erst ssh Zugang mittels preshared Key ermöglichen. Wir erstellen einen neuen ssh Key und kopieren ihn in die Liste der autorisierten Keys:

DS> ssh-keygen -t rsa
DS> umask 077; cat ~/.ssh/*.pub |  cat >>~/.ssh/authorized_keys

Danach erstellen wir ein Shell Skript (z.B. run.sh), dieses macht den ssh Login, öffnet mittels EOT ein Terminal, führt unser oben konfiguriertes duplicity-backup Skript aus und schließt das Terminal wieder:

#!/opt/bin/bash
ssh -o PreferredAuthentications=publickey root@diskstation << EOT
/opt/bin/bash /path/duplicity-backup.sh -c /path/duplicity-backup.conf --backup > /path/duplicity.log 2>&1
EOT

Skript ausführbar machen:

chmod +x /path/run.sh

Dieses Skript kann dann über Cron aufgerufen werden oder ab DSM 4.2 auch über den Aufgabenplaner, den man über das DSM Webinterface in den Systemeinstellungen unter Aufgabenplanung / Benutzerdefiniertes Skript einstellt:

/path/run.sh