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.