1. duplicity: Online-Backups – aber sicher!
duplicity ist ein Tool welches ursprünglich für Linux geschrieben wurde. Es kann durchaus mit Time Machine mithalten. Im Gegensatz zu Time Machine ist dies allerdings keine »Plug&Play Lösung«. Etwas Konsolen-Kenntnisse solltet ihr durchaus mitbringen.
Backups von Daten sind nicht nur sinnvoll, sondern heutzutage ein MUSS! Meistens werden diese auf externen USB-Festplatten gespeichert – jedenfalls im Privatbereich. Aber duplicity kann mehr. Backups in der Amazon S3 Cloud oder per WebDAV, SSH oder einem anderen Protokoll auf dem privaten Server / Firmenserver. Das Backup verläuft dabei vollkommen autonom und wird bereits vor der Übertragung verschlüsselt. Was kann duplicity jetzt genau? Eine kurze Zusammenfassung:
- Vollständige / inkrementelle Backups
- Arbeitet automatisch im Hintergrund
- Archivierung im tar-Format
- gzip-Komprimierung
- GPG-Verschlüsselung der Daten (und zwar vor der Übertragung!)
- rsync-Algorithmus
- Bandbreiteneffizient – es stehen noch genug Upload-Ressourcen zur Verfügung
- Serverupload zu verschiedenen Diensten (local, rsync, SCP/SSH, FTP, WebDAV, IMAP, Amazon S3 Cloud, etc.)
Update
12.08.2014: Das Tutorial eignet sich ebenfalls für Mac OS X Mountain Lion, Mavericks und Yosemite.
2. Ok überzeugt – was benötige ich dafür?
- Mac OS X Lion (oder eine neuere Version). Eventuell funktioniert die beschriebene Variante auch auf älteren Versionen.
- xCode
- Homebrew
- duplicity
Nach Abschluss des Tutorials seid ihr in der Lage wichtige Daten von eurem Mac-Rechner auf einem Server zu sichern. Die Übertragung wird verschlüsselt mittels SSH stattfinden. Mit kleinen Anpassungen ist ein Backup in die Amazon S3 Cloud ebenfalls möglich. Hier sind die Highlights von duplicity nochmals zusammengefasst:
- Das Backup wird vollkommen automatisch im Hintergrund stattfinden
- Eure Daten werden vor der Übertragung verschlüsselt
- Euer Upload wird bei der Übertragung ressourcenschonend genutzt
3. Installation der benötigen Software
- Zunächst wird xCode aus dem AppStore geladen und installiert. xCode ist eine Vorraussetzung für Homebrew.
- Als nächstes wird Homebrew heruntergeladen und ebenfalls installiert.
- Der letzte Schritt ist die eigentliche Installation von duplicity. Dazu wird ein Terminal gestartet und folgendes eingegeben:
brew install duply
Damit sind alle Vorraussetzungen für eine Konfiguration erfüllt. Homebrew installiert die notwendigen Paketabhängigkeiten für duplicity automatisch. Im der folgenden Beschreibung verwende ich das Wort duply. Duply ist ein Frontend für duplicity und erleichtert dessen Handhabung.
4. GPG-Schlüssel erstellen
Damit das Backup später verschlüsselt gespeichert wird, ist die Erstellung von GPG-Schlüsseln notwendig. Wir erstellen ein Schlüsselpaar (privater und öffentlicher Schlüssel). Über das Terminal werden neue Schlüssel generiert:
gpg --gen-key
Das sieht dann so aus:
Hinweis
- Bitte wählt ein sicheres Passwort, dass mindestens aus 12 Zeichen mit Sonderzeichen, Zahlen und Groß-Kleinschreibung besteht.
- Bei der Schlüssel-Generierung habe ich gewählt, dass der Schlüssel nie verfällt.
- Die Schlüsselpaare selbst sollten gut aufbewahrt werden (USB-Stick und in den Schrank damit). Verliert ihr den privaten Schlüssel ist ein Zugriff auf das Backup nicht mehr möglich.
- Die Schlüssellänge sollte ausreichend groß gewählt sein. Ohne jetzt in die Theorie abschweifen zu wollen empfehle ich im Zusammenhang dem RSA-Verfahren mindestens 2048 Bit (besser 4096 Bit) als Schlüssellänge. Pauschal lässt sich sagen: Je kürzer der Schlüssel, desto leichter kann er erraten werden.
5. duply konfigurieren
Zunächst erstellen wir eine Konfigurationsdatei:
duply my_backup create
my_backup ersetzt ihr mit dem gewünschten Namen: zb. macbook
Die Konfiguration ist jetzt unter dem Home-Verzeichnis ~/.duply/my_backup/conf abgelegt.
Für den weiteren Verlauf benutze ich für das Home-Verzeichnis die Bezeichnung »Rechner« und als duply Konfigurationsnamen »macbook«. Wenn ihr die unten dargestellten Befehle ausführen wollt, dann ersetzt die beiden Platzhalter immer mit eurem Home-Verzeichnis und dem gewählten Konfigurationsnamen für duply.
Das Verzeichnis ist versteckt. Wir können die Datei dennoch über das Terminal anschauen:
cat /Users/Rechner/.duply/macbook/conf
Nicht erschrecken. Hier existieren viele Einstellungsmöglichkeiten. Auf die wirklich benötigten werde ich näher eingehen. In den folgenden Schritte benutze ich den Shell-Editor nano.
Öffnen der Konfigurationsdatei mit nano:
sudo nano /Users/Rechner/.duply/macbook/conf
5.1 Schlüssel Konfiguration
Damit die Verschlüsselung funktioniert muss der Fingerprint des zuvor erstellten Schlüssels und das Passwort hinterlegt werden.
Wichtig sind folgende Einstellungen:
GPG_KEY='_KEY_ID_' GPG_PW='_GPG_PASSWORD_' #GPG_KEYS_ENC='<pubkey1>,<pubkey2>,...' #GPG_KEY_SIGN='<prvkey>'
Damit wir die benötigten Informationen erhalten öffnen wir ein zweites Terminal und geben dort folgendes ein:
gpg --list-keys
Der Output sollte dann folgendermaßen aussehen:
Den Fingerprint (Hier: 1EE9A69D) tragt ihr nun in die duply Konfiguration ein:
GPG_KEY=’1EE9A69D′ #GPG_KEYS_ENC=’1EE9A69D′ #GPG_KEY_SIGN=’1EE9A69D′
Die Rauten bitte entfernen, ansonsten wird der Befehl nicht ausgeführt. Jetzt noch das Passwort eintragen mit dem die Schlüssel erzeugt wurden:
GPG_PW='_GPG_PASSWORD_'
5.2 Ziel – Wo wird das Backup abgelegt?
In meinem Beispiel werde ich das Backup auf einen Linux-Server beschreiben. Dieser Server wird mittels SSH angesprochen.
Dazu müssen wir folgende Zeilen in der Konfiguration anpassen:
TARGET='scheme://user[:password]@host[:port]/[/]path'
Die Zeile wird folgendermaßen angepasst:
TARGET='ssh://user:password@127.0.0.1:22'
Ihr könnt euch auch auf euren Amazon S3 Account einloggen und die Daten dort ablegen. Auszug aus der Konfiguration:
for the s3 user/password are AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY
s3://[user:password]@host/bucket_name[/prefix]
s3+http://[user:password]@bucket_name[/prefix]
5.3 Quelle – Was soll gesichert werden?
Ihr wollt sicherlich nicht all eure Daten von der Festplatte sichern. Immerhin handelt es sich hier um ein Online-Backup auf einem Server oder der Amazon S3 Cloud. Die Bandbreite bzw. der Upload wird nicht ausreichen, um hunderte von Gigabyte zu übertragen. Daher sollten nur die »wichtigsten« Daten gesichert werden.
Dazu müssen wir folgende Zeilen in der Konfiguration anpassen:
SOURCE='/path/of/source'
Die Zeile wird folgendermaßen angepasst:
SOURCE='/Users/Rechner'
Hiermit wird das komplette Home-Verzeichnis gespeichert. Da wir das nicht möchten, müssen wir Dateien und Ordner ausschließen. Dazu erstellen wir im duply Konfigurationsordner eine neue Datei:
sudo nano /Users/Rechner/.duply/macbook/exclude
Der Inhalt könnte so aussehen:
Hierbei wird folgendermaßen gesichert:
ALLE Dateien aus dem Ordner Computer, außer:
- /Computer/OSInstall
- /Computer/VirtualBox
Documents und Pictures werden ohne Ausnahme komplett gesichert. Die letzte Zeile mit – ** schließt ansonsten alle weiteren Daten im Home-Verzeichnis aus. Damit unsere exclude Datei von duply auch gelesen werden kann, werden die Berechtigungen noch korrekt gesetzt:
sudo chown Rechner:staff /Users/Rechner/.duply/macbook/exclude sudo chmod 600 /Users/Rechner/.duply/macbook/exclude6. Backup starten
Nach der Konfiguration kann das Backup über das Terminal initiiert werden. Das Backup wird vor der Übertragung vollständig verschlüsselt und komprimiert. Backup starten:
duply macbook backup
Nachdem der Backup-Prozess abgeschlossen wurde, könnt ihr euch die Dateien anschauen, die sich im Backup befinden:
duply macbook list
Mit dem Status-Befehl könnt ihr kontrollieren wie viele Volumes angelegt wurden und ob das Backup vollständig durchgeführt wurde:
duply macbook status
Hinweis
Ihr solltet euer Backup in jedem Fall prüfen / verifizieren! Also unbedingt Punkt 7 ausprobieren.7. Backup wiederherstellen
Hier drei Beispiele zur Wiederherstellung eines Backups.
Komplette Wiederherstellung in den Ordner ~/Restore:
duply macbook restore /Users/Rechner/Restore
Wiederherstellung der Datei example.jpg in den Ordner /tmp:
duply macbook fetch /Users/Rechner/Pictures/example.jpg /tmp/ example.jpg
Wiederherstellung der Datei example.jpg von vor 4 Tagen in den Ordner /tmp:
duply macbook fetch /Users/Rechner/Pictures/example.jpg /tmp/ example.jpg 4D
8. Zeitgesteuerte Backups mit launchd
Falls ihr noch einen Schritt weitergehen wollt, könnt ihr die Backups auch zeitgesteuert durchführen lassen. Hierzu eignet sich launchd, welches seit Mac OS X v10.4 ein fester Bestandteil des Systems darstellt. Das ist ein Framework zum Starten, Verwalten und Beenden von Daemons, Programmen und Shell-Skripten.
8.1 Erstellen des Backup-Skripts
Ihr könnt das Backup-Skript an einem beliebigen Ort in eurem Home-Verzeichnis ablegen.
sudo nano /Users/Rechner/duply.sh
#!/bin/bash ##################### # duply backup script # 19-12-2011 by Mike ##################### # path export export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' # check if duplicity is running if lsof | grep /usr/local/Cellar/duply then echo "===>>> duplicity already running <<<===" else echo "===>>> duplicity starting <<<===" ulimit -n 1024 duply macbook backup duply macbook purge --force fi
Du kannst den Blog aktiv unterstützen!
Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.
Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.
8.2 Einbinden des Skripts in launchd
Jetzt erstellen wir einen Agent der unser Skript in Intervallen aufruft. Der Wert 10800 steht hierbei für Sekunden. 10800 / 60 = 180 Minuten bzw. 3 Stunden. Der launchd Agent ruft also alle 3 Stunden das Skript auf bzw. immer nach einem Neustart des Systems.
sudo nano /Users/Rechner/Library/LaunchAgents/de.localhost.duply. run.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" " http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>de.localhost.duply.run.plist</string> <key>Program</key> <string>/Users/Rechner/duply.sh</string> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>10800</integer> </dict> </plist>
9. duply Befehle
Duply bietet noch weitere Einstellungsmöglichkeiten. Drei davon möchte ich näher erläutern.
Default Einstellungen:
- MAX_FULL_BACKUPS=1 – Ingesamt wird 1 komplettes Backup vorgehalten
- MAX_FULLBKP_AGE=1M – Das Full Backup wird monatlich erneuert. Dazwischen werden lediglich inkrementelle Backups angelegt.
- VOLSIZE=25 – Jede Archivdatei hat 25MB. Nach einem Abbruch bei beispielsweise 18MB für ein Archiv muss nicht das komplette Backup neu angestoßen werden, sondern lediglich der nicht übertragenen Chunk neu hochgeladen werden.
10. Komische Fehlermeldung / Bug
Solltet ihr beim Start des Backups auf folgende Fehlermeldung stoßen…
Max open files of 256 is too low, should be >= 1024.
Use ‚ulimit -n 1024‘ or higher to correct.
… könnt ihr das mit der Eingabe von:
ulimit -n 1024
korrigieren. Der Befehl ist bereits Teil des Backup-Skripts.
Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:
13 Ergänzungen zu “Automatische Online-Backups mit duplicity auf Mac OS X”
Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-ForumAbschließender Hinweis
Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.
Hallo Herr Kuketz,
auf der Suche nach einem Duplicity Tutorial für OS X Lion habe ich ihre tolle Anleitung gefunden:
https://www.kuketz-blog.de/automatische-online-backups-mit-duplicity-auf-mac-os-x/
Nachdem ich mich durch die einzelnen Schritte durchgearbeitet habe läuft das Backup nun wunderbar.
Vielen Dank für die tolle Hilfestellung.
Zum ausprobieren habe ich ein Test Backup erstellt und immer wieder neue Dateien hinzugefügt und gelöscht und hier hat Duplicity sehr stabil gearbeitet.
Dann habe ich größere Testdateien angelegt und zum ausprobieren einige Bilder hinzugefügt. Irgendwann habe ich dann einen Fehler bei meinem Backup erhalten:
»No orphaned or incomplete backup sets found.«
Über jeden Tipp wäre ich Ihnen sehr dankbar.
Vielen Dank im Voraus und Grüße aus Ötigheim
Daniel
Hall Herr Bor,
erstmal Danke für Ihr Feedback! :)
Sie arbeiten auf einem Webdav. Haben sie mal probiert per Hand Dateien mit über 2,3 MB zu kopieren?
Wenn das geht, haben Sie eventuell die Möglichkeit mittels SSH Protokoll zu sichern?
Webdav ist immer etwas heikel. Egal ob auf einem Apache, nginx oder lighttpd Webserver. Oder was nutzen Sie?
Ich persönlich tippe auf ein Problem mit dem Webdav. Serverseitig können Sie da einiges einstellen.
Hallo Herr Kuketz,
vielen Dank für die schnelle Rückmeldung!
Dateien die größer als 2,3 MB sind kann ich ohne Probleme auf den WebDAV schieben, selbst Daten mit 200 MB und mehr.
Der WebDAV (Apache) kann ich leider nicht konfigurieren, da dieser von einem Dienstleister zur Verfügung gestellt wird.
Die Option mit SSH habe ich leider auch nicht :-(
Zuvor habe ich den Backup-Client „Duplicati.com“ ausprobiert, das ein „Ableger“ von Duplicity ist.
Damit lief das Backup ohne Probleme nur hat das Tool einige Darstellungsfehler wegen der Kombination aus dem Mono-Framework und dem Font-Rendering.
Aktuell tippe ich eher auf einen WebDAV Bug in Duplicity, da man im Netz einige User mit dem gleichen Problem findet.
https://niebegeg.net/post/32010111657/duplicity-backups-wiederherstellen/
Ich werde mal das Netz durchstöbern, vielleicht finde ich noch einen Workaround,
da es sonst keine Software für OS X gibt die nur halbwegs funktioniert.
Trotzdem vielen Dank für ihre Unterstützung.
Viele Grüße,
Daniel
Vielen Dank für das gute Tutorial! Werde jetzt mit Duplicity spielen und testen, ob es tut, was ich brauche.
Eine kleine Sache: bei `gpg — gen-key` und `gpg — list-keys` scheint ein Leerzeichen zuviel zu sein, es funktioniert für mich nur, wenn ich `gpg –gen-key` benutze.
Dieser Blogpost ist super, braucht aber noch einen EXTREM wichtigen Hinweis: UNBEDINGT nach dem ersten Backup eine Rücksicherung ausprobieren! Hat man nämlich bei der Schlüsselgenerierung etwas falsch gemacht – das scheint mir passiert zu sein – produziert man unbrauchbare Backups. Fällt einem das erst im Ernstfall auf, steht man im Regen.
Danke. Hab es korrigiert bzw. noch was ergänzt. :)
Läuft bei dir Lion oder Mountain Lion?
Bei mir läuft 10.8.2, Mountain Lion!
Hallo Herr Kuketz,
erstmal vielen tausend Dank für das Tutorial!
Ich habe es soweit durchgearbeitet, jedoch kam erstmal eine Fehlermeldung beim Ausführen von duply meinprofil backup:
…
— Start running command BKP at 19:48:24.000 —
Traceback (most recent call last):
File „/usr/local/bin/duplicity“, line 42, in
from duplicity import log
ImportError: No module named duplicity
19:48:24.000 Task ‚BKP‘ failed with exit code ‚1‘.
…
Ich konnte das heilen, indem ich noch folgende Schritte nach
brew install duply
ausgeführt habe:
brew remove duplicity
brew install python
brew install duplicity
die indirekte installation von duplicity durch die installation von duply scheint nicht zu funktionieren…
Viele Grüße,
Armin
Hallo,
klasse Artikel! DANKE dafür.
Haben Sie duply noch im Einsatz? Sind sie noch zu frieden? Ich beginne gerade mich mit dem Thema Offsite-Backup zu beschäftigen.
Unklar ist mir, ob duplicity auch alle Filesystem Metadaten, die Mac-spezifisch sind speichert. Ich bin hier kein Fachmann, las aber von »Extended Attributes« oder »Ressource Forks«. Können Sie hier aus Erfahrung sprechen?
Ansonsten habe ich mal das duply.sh Skript etwas getuned: mittels caffeinate wird der Mac während des Backups (hoffentlich) am schlafen gehindert. Ausserdem nutzt es das in Lion hinzugekommene Notfification-Center zum Anzeigen von Statusmeldungen. Da wäre noch Luft nach oben (z.B. Notification über Fehler – gerne auch per Email) – hat dazu noch jemand Ideen?
##########
#!/bin/bash
export PATH=’/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin‘
# check if duplicity is running
if lsof | grep /usr/local/Cellar/duply
then
osascript -e ‚display notification „Duply läuft bereits.“ with title „Duply Backup“‚
else
osascript -e ‚display notification „Starte Backup.“ with title „Duply Backup“‚
ulimit -n 1024
caffeinate duply macmini cleanup+backup+purge –force
osascript -e ‚display notification „Backup abgeschlossen.“ with title „Duply Backup“‚
fi
###########
Derzeit setze ich duply nicht ein. Bin auf eine ownCloud Lösung umgestiegen.
Vielen Danke für die tolle Anleitung,
damit krieg ich mein Backup eindlich offsite.
2 Fragen dazu: was macht das purge:
duply macbook purge –force
Und kann mir mal bitte das „1 Komplett-Backup wird vorgehalten“ »aufdröseln»?
Beispiel: 100 GB Backup, 1x monatlich full, 1x wöchentlich inkrementell
Das bedeutet dass auf dem Speicherplatz dafür 400 GB belegt sind, oder?
Wenn man unterstellt das sich wirklich alles ändert und das inkrementelle Backup datentechnisch einem Fullbackup entspricht.
Beim nächsten Fullbackup wird dann alles gelöscht und es sind wieder nur 100GB belegt?
Bzw. anderum:
Wie ist die datensparsamste Einstellung für obiges Beispiel und für ein Szenario wo nur einmal monatlich ein Fullbackup hochgeladen wird und auch nur dieses auf dem Server liegen soll?
Hallo Herr Kuketz,
vielen Dank für die selbsterklärende Anleitungen!! Jeder einzelne Schritt hat so funktioniert wie beschrieben!!!
Ich bekomme lediglich beim Ausführungen der Befehle mit „duply“ folgende Fehlermeldung:
z.B.:
duply my_backup create
env: illegal option — u
usage: env [-i] [name=value …] [utility [argument …]]
duply my_backup backup
Start duply v1.11.1, time is 2016-02-09 20:39:20.
env: illegal option — u
usage: env [-i] [name=value …] [utility [argument …]]
Stundenlanges googlen hat mir keine Verbindung zu Duply gebracht.
Auch wenn ich Duply über brew entferne und wieder installiere, kommt der Fehler wieder.
Meine Rechnerdetails:
O SX Yosemite 10.10.5, duplicity 0.7.06, python 2.7.11, gpg 1.4.20
Haben sie zufälligerweise auch schon Erfahrung mit diesem Fehler gemacht?
Über ein Feedback würde ich mich freuen.
Danke im Voraus
Schönen Abend
Das sieht mir nach einem Typo aus. »Illegal option -u«
Vor dem »u« sollte nur ein Bindestrich stehen.
Oder die Option u exisitert nicht.
Mehr kann ich dazu nicht sagen, da ich schon länger kein Mac OS X mit dieser Kombination nutze.