Duplicity: Unterschied zwischen den Versionen
imported>Bubbas |
imported>Bubbas Cron Jobs |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 108: | Zeile 108: | ||
== Duplicity Backup Skript == | == 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: | 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: | ||
https://github.com/zertrin/duplicity-backup | [https://github.com/zertrin/duplicity-backup duplicity-backup] | ||
Nach Anpassung des sehr gut dokumentierten Konfigurationsfiles <code>duplicity-backup.conf</code> lässt sich durch Aufruf des <code>duplicity-backup.sh</code> Skriptes die entsprechende Aufgabe starten. | Nach Anpassung des sehr gut dokumentierten Konfigurationsfiles "<code>duplicity-backup.conf</code>" lässt sich durch Aufruf des "<code>duplicity-backup.sh</code>" Skriptes die entsprechende Aufgabe starten. | ||
Zum Versenden von Emails kann man mittels | |||
<code>ipkg install nail</code> ein schlankes Tool installieren und dieses als <code>nail</code> in der duplicity-backup Konfigurationsdatei angeben. | Zum Versenden von Emails kann man mittels "<code>ipkg install nail</code>" ein schlankes Tool installieren und dieses als <code>MAIL="nail"</code> in der duplicity-backup Konfigurationsdatei angeben. | ||
== Cron Job == | |||
Um die Backups automatisiert durchzuführen bietet sich ein [[Cron|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: | |||
<pre style="margin-left:20px">DS> ssh-keygen -t rsa | |||
DS> umask 077; cat ~/.ssh/*.pub | cat >>~/.ssh/authorized_keys</pre> | |||
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: | |||
<pre style="margin-left:20px">#!/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</pre> | |||
Skript ausführbar machen: | |||
<pre style="margin-left:20px">chmod +x /path/run.sh</pre> | |||
Dieses Skript kann dann über [[Cron|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: | |||
<pre style="margin-left:20px">/path/run.sh</pre> |
Aktuelle Version vom 4. Januar 2014, 11:57 Uhr
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.
- Von http://sourceforge.net/projects/py-gnupg/files/ die aktuelle Version von GnuPGInterface runterladen (Version 0.3.2 wurde beim Erstellen dieser Seite verwendet).
- Auf die DS kopieren.
- Entpacken:
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