rsync benutzen
rsync
"rsync is a fast and extraordinarily versatile file copying tool."
rsync kann Dateien entweder lokal kopieren (auf demselben PC oder an den PC angeschlossene USB-Platte) oder über das LAN und Internet zu einem anderen Rechner. Dabei sind auch verschlüsselte Übertragungen möglich.
Das Schöne an rsync ist, dass es einen Algorithmus benutzt um SOURCE und TARGET zu vergleichen. Es werden nur veränderte Dateien von SOURCE in TARGET übertragen. Das verringert erheblich die Menge der zu übertragenden Daten.
Die Grundlagen von rsync
Auch hier kommen zuerst die Grundlagen von rsync, wer bereits mit rsync vertraut ist, kann diese Seite natürlich überspringen.
Ein abstrakter Befehl von rsync sieht so aus:
rsync [options] [source directory] [target directory]
Dieser Befehl vergleicht SOURCE mit TARGET und überträgt alles, was unterschiedlich ist in das Zielverzeichnis TARGET. Dabei werden je nach "options" auch Dateien in TARGET gelöscht, wenn sie in SOURCE nicht mehr vorhanden sind.
Exakt an diesem Punkt hätte ich fast den Gedanken verworfen, jemals rsync als Backup-Tool zu benutzen. Es gibt eine Eigenart bei rsync, die ich immer wieder nachlesen muss, wenn ich ein neues Sicherungsscript anfange.
rsync -a /SOURCE /TARGET
ist nicht dasselbe wie
rsync -a /SOURCE/ /TARGET
Das erste Kommando kopiert das Verzeichnis SOURCE und alle Inhalte von SOURCE in TARGET. Als Ergebnis erhalten wir /TARGET/SOURCE/meinedatei.txt. Das zweite Kommando kopiert nur den Inhalt des Verzeichnisses SOURCE in TARGET, als Ergebnis erhalten wir /TARGET/meinedatei.txt. Ein slash am Ende des SOURCE Verzeichnisses kopiert nur den Inhalt von SOURCE, nicht das Verzeichnis selbst.
rsync Optionen
rsync hat wirklich eine Menge Optionen, die am Anfang ebenfalls ziemlich verwirrend sind. Aber ich will hier nicht die kompletten Optionen beschreiben, schaut einfach in dem oben angegebenen Link. Ich werde mich hier nur auf die Optionen beziehen, die für mich wichtig sind.
Im Beispiel etwas früher habe ich die Option -a benutzt. Diese Option steht für Archivmode und beinhaltet eine ganze Reihe weiterer Optionen:
Die manpage dazu:
-a, –archive archive mode; equals -rlptgoD (no -H,-A,-X)
dabei bedeuten:
r: arbeite Rekursiv
l: behalte Links
p: behalte Berechtigungen
t: behalte Zeiten
g: behalte Gruppe
o: behalte Besitzer
D: behalte Gerätedateien und Special-files
Damit ist schon alles, was ich benötige abgedeckt, darüber hinaus benutze ich noch
-v (–verbose) wenn ich eine gesprächige Ausgabe haben will
–delete damit gelöschte Dateien in SOURCE auch in TARGET gelöscht werden (Vorsicht, immer erst an Beispielen ausprobieren, sonst kann man sich schon mal ein Verzeichnis löschen!)
–link-dest=[link directory] dazu gebe ich ein paar weitere Erklärungen ab, der Rest der Optionen kann in der manpage nachgelesen werden.
–link-dest=[link directory] Normalerweise vergleicht rsync SOURCE mit TARGET. Mit dieser Option kann rsync angewiesen werden, ein anderes als SOURCE zum vergleichen zu nehmen. Dateien im [link directory] bleiben dabei unangetastet. Für Dateien, die sowohl in SOURCE als auch im [link directory] unverändert sind wird ein Hardlink im TARGET angelegt.
Wenn ich mit rsync -av –delete /SOURCE/ /TARGET immer in dasselbe Verzeichnis schreibe wie in meinem script hier, enthält /TARGET genau den Stand von SOURCE. Schreibe ich mit rsync -av –delete /SOURCE/ /TARGET jeden Tag in ein neues Verzeichnis, mache ich täglich ein Voll-Backup. Ich möchte aber ein inkrementelles Backup, deshalb vergleiche ich mit einem statischen Zustand.
rsync -av --delete --link-dest=/A-Voll /A/ /A-2
Damit sichere ich den Zustand von A in A-2 und lege alle in A-Voll und A unveränderten Dateien in A-2 als Hardlink an. Wird eine Datei in A verändert, überträgt rsync diese Datei als Voll-Backup in das Verzeichnis A-2.
rsync kann als Sicherungsziel (TARGET) externe Servern benutzen dazu müss ihr unter ssh und der Option -e nachlesen, dieses Thema will stellt sich für mich im Moment nicht.