rsync

Aus wiki.archlinux.de

rsync ist ein Programm, welches Dateien kopiert. Dieses kann sowohl lokal, als auch in einem Netzwerk passieren. Es ist dabei sehr schnell, da es lediglich die unterschiedlichen Dateiteile kopiert. Deshalb ist rsync hervorragend für (wiederkehrende) Sicherungen geeignet. Jedoch ist rsync nur unidirektional - d.h. es kann nur in eine Richtung synchronisieren. Bidirektionale Synchronisation ist z.B. durch unison möglich, welches allerdings dasselbe Protokoll wie rsync benutzt.

Installation

Das Programm ist als rsync in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S rsync

Anwendung

rsync nutzt verschiedene Optionen, sowie je ein Quell- und ein Zielverzeichnis.

Für lokale Kopien
rsync [OPTION...] SRC... [DEST]
Für Kopien übers Netzwerk
rsync [OPTION...] [USER@]HOST:SRC... [DEST] # pull, z.B. Download
rsync [OPTION...] SRC... [USER@]HOST:DEST   # push, z.B. Backup

Lässt man das zweite Verzeichnis weg, so werden lediglich die Dateien im ersten Verzeichnis angzeigt.

Will man lediglich die Dateien in einem Ordner, nicht aber den Ordner selbst kopieren, so erreicht man dies, indem man ein Backslash an den Quellpfad hängt (z.B. /home/hans/docs/). Der Ordner wird dementsprechend mit kopiert, wenn man den Backslash weglässt (z.B. /home/hans/docs).

Nützliche Optionen sind unter anderen:

  • -a um rekursiv (-r) zu kopieren und dabei Rechte (-p), Gruppenrechte (-g), Zeiten (-t) und symbolische Links (-l) sowie als Root Besitzrechte (-o) und Gerätedateien(-D) beizubehalten.
  • -v für die Ausgabe der Informationen über die kopierten Dateien (und eine kleine Zusammenfassung zum Schluss). Je mehr -v, desto umfangreicher die Ausgabe. Mehr als zwei -v sind allerdings nur für Debuggingzwecke ratsam. Zwei -v bewirken, dass nicht nur alle transferierten Dateien angezeigt werden, sondern auch solche, die übersprungen werden. Außerdem ist die Zusammenfassung am Ende umfangreicher.
  • -P um eine Fortschrittsanzeige anzuzeigen (--progress) und bei Abbruch ab der Abbruchstelle weiterzukopieren (--partial).
  • -n für einen Testdurchlauf ohne Änderungen
  • -z für die Komprimierung der übertragenen Dateien (Diese kann auch über '-e "ssh -C"' eingeschaltet werden)
  • -e für die Definition der Remote-Shell (z.B. ssh)
  • -b sichert alle veränderten (auch durch --delete gelöschten) Dateien
  • --exclude=REGEXP schließt alle aus der Quelle betroffenen Dateien vom Kopiervorgang aus
  • --delete löscht alle Dateien des Ziels, die in der Quelle nicht vorhanden sind
  • -W vermeidet die Prüfung der einzelnen Blocks und kopiert stattdessen die gesamte Datei. Das ist besonders bei großen Dateien nützlich.

Beispiele

$ rsync -avPzbe "ssh -p 667" --delete --backup-dir=/home/hans/Sicherung/Alt peter@rechner:/tmp/ /home/hans/Sicherung 

Kopiert die Temporärdateien von einem entfernten Rechner über die SSH mit Port 667 auf den lokalen Rechner. Weiter werden die vorherigen Sicherungen und alle Dateien in /home/hans/Sicherung/, die nicht in /tmp/ liegen, nach /home/hans/Sicherung/Alt verschoben.

# rsync -a --sparse --delete --delete-excluded --exclude-from=/root/excludelist / /mnt/sdb/backup

Kopiert alle Dateien und Ordner beginnend in / auf eine externe Festplatte, welche vorher nach /mnt/sdb gemountet wurde. Beim Kopieren werden auch die im SRC gelöschten Elemente auch im DEST gelöscht = SYNC/MIRROR. Weiterhin werden entsprechend excludelist bestimmte Dateien und Ordner ausgeschlossen, z.B. /dev/* und /proc/* und /boot/lost+found. Wichtig ist hier, auch /mnt/sdb/* auszuschließen, da es sonst zu einem Loop kommt.