Backup mit rsync

Ich gebe es zu, ich war in letzter Zeit faul und hatte seit Januar kein Backup mehr gemacht. Zuletzt verwendete ich dafür das auf Duplicity aufsetzende Déjà Dup, aber bei der letzten Installation meines Laptops hatte ich arge Probleme das Backup wiederherzustellen, da Déjà Dup die Integrität des Backups in Frage stellte und auch häufig crashte. Nach mehrmaligen Versuchen gelang es zwar doch, aber da Déjà Dup das Backup in einem eigenen Format speichert besteht grundsätzlich die Gefahr das Backup nicht wiederherstellen zu können. Der Ubuntu-Entwickler Michael Terry weist auch in einem Blog-Eintrag auf dieses Risiko hin.

My concern stems from the fact that Déjà Dup uses an opaque backup format [1]. Which means that it does not store your data in plain files that you can just copy back into place with the file manager. You’ll need to use Déjà Dup again to restore them [2]. Which is fine if Déjà Dup is working correctly, as it should.

But just from a risk management perspective, I always recommend that people try to have at least one copy of their data in “plain files” format at all times.

Aus diesem Grund möchte ich ein simples altbewährtes Tool nutzen, bei dem die Wahrscheinlichkeit einer Fehlfunktion geringer ist und ich im Notfall die Dateien auch händisch wiederherstellen kann. Meine Wahl fiel dabei auf rsync. Rsync kann Dateien lokal oder über Netzwerk sichern. Ich verwende in meinem Fall eine USB-Festplatte. Die Syntax von rsync ist simpel:

rsync [OPTIONEN] Quelle Ziel

Als Quelle wählt man natürlich den zu sichernden Ordner, wie z.B. /home/martin und als Ziel das Zielmedium in meinem Fall /media/martin/USB-Festplatten-UUID/Backup wobei ich der Lesbarkeit wegen meine UUID durch USB-Festplatten-UUID ersetzt habe. Bei der Angabe der Quelle ist es wichtig darauf zu achten, dass zwischen Quelle und Quelle/ unterschieden wird.

rsync -a /home/martin/ /media/martin/USB-Festplatten-UUID/Backup

würde nur die Dateien im Ordner martin zum Ziel übertragen, nicht den Ordner martin selbst. Um den gesamten Ordner zu sichern muss man

rsync -a /home/martin /media/martin/USB-Festplatten-UUID/Backup

ausführen.

Wie man der manpage entnehmen kann gibt es sehr viele Optionen für rsync. Im vorigen Beispiel wurde die Option -a benutzt, welche die folgenden Optionen beinhaltet:

-r -> Unterverzeichnisse werden mitkopiert (rekursiv)
-l -> symbolische Links werden mitkopiert
-p -> Rechte bleiben erhalten
-t -> Zeiten bleiben erhalten
-g -> Gruppenrechtebleiben erhalten
-o -> Besitzrechte bleiben erhalten (root)
-D -> Gerätedateien bleiben erhalten (root)

Um Besitzrechte und Gerätedateien zu erhalten muss rsync als root ausgeführt werden. Will man nicht nur symbolische Links sondern auch Hardlinks erhalten, so kann man dies durch die Option -H erreichen. Um nach einem Abbruch an der Abbruchstelle fortsetzen zu können kann man die Option -P verwenden. Durch diese Option wird auch der Fortschritt des Vorgangs angezeigt.
Bei einer Übertragung über ein Netzwerk kann man durch -z die Daten komprimiert übertragen und durch -e wählt man die Remote-Shell, z.B. -e ssh.
Bei Aktualisierungen eines Backups kann die Option --delete sinnvoll sein, da sie Dateien die nicht mehr in der Quelle vorhanden sind auch im Ziel löscht. So verhindert man auch, dass Dateien, welche seit dem letzten Backup umbenannt wurden, doppelt im Backup vorkommen. Mit Hilfe der Option -b können veränderte Dateien, auch durch --delete gelöschte Dateien, in einen durch --backup-dir= definierten Backup-Ordner gesichert werden.
Mittels --exclude= kann man Ordner von der Übertragung ausschließen. Dabei ist zu beachten, dass man den Ordner relativ zur Quelle und nicht absolut angeben muss. D.h. wenn unsere Quelle /home/martin ist und wir wollen /home/martin/.gnupg vom Backup ausschließen, müssen wir dies mit --exclude=/.gnupg tun, nicht mit --exclude=/home/martin/.gnupg.
Verwendet man --stats bekommt man am Ende der Übertragung einen Report und mit -v während des Vorgangs die aktuellen Schritte angezeigt.

Ich habe nun meinen home-Ordner wie folgt gesichert:

rsync -avP --stats /home/martin /media/martin/USB-Festplatten-UUID/Backup

Eine Sicherung, bei der gelöschte Dateien auch im bereits vorhandenen Backup entfernt, aber gesichert, und die Daten komprimiert über SSH übertragen werden könnte so aussehen:

rsync -avPzbe "ssh -p 667" --delete --backup-dir=martin@zweitrechner:/tmp/Backup/Old /home/martin martin@zweitrechner:/tmp/Backup

Weitere Informationen kann man durch man rsync oder diesem LinuxUser-Artikel erhalten.

Warnung: Ich möchte darauf hinweisen, dass ich diesen Artikel hauptsächlich für mich selbst als Gedächtnisstütze geschrieben habe und keine Garantie für Fehlerfreiheit übernehme. Da ich nur einen Rechner habe, konnte ich z.B. das SSH-Beispiel nicht testen. Allgemein würde ich empfehlen, bei so etwas sensiblem wie Backups immer aufmerksam zu sein, das Gehirn einzuschalten und lieber zweimal nachzudenken bevor man handelt.

Teilen: FB | G+ | TW | E-Mail

Hinterlasse einen Kommentar oder diskutiere im OSBN-Chat.

In den Kommentaren können folgende Formatierungen genutzt werden.