rsync: Daten sicher im Gleichschritt
rsync ist ein praktisches Tool, das den Datentransfer über Netzwerke vereinfacht und den Abgleich lokaler Ordner beschleunigt. Dank seiner Flexibilität ist dieses Synchronisierungstool ideal für verschiedenste Aufgaben auf Dateiebene. [TOC]
Was ist rsync?
rsync steht für „remote synchronization“ und ist ein vielseitiges, netzwerkfähiges Synchronisierungstool für Linux. Mit diesem Open-Source-Programm gleichst du Dateien und Verzeichnisse lokal oder über Netzwerkgrenzen hinweg ab. Das Tool nutzt eine differenzielle Übertragungstechnik: Es werden nur jene Datenblöcke übertragen, die sich tatsächlich geändert haben. Das spart Bandbreite und macht den Prozess extrem schnell. Durch zahlreiche Optionen hast du die volle Kontrolle über das Synchronisationsverhalten. Die flexible Syntax erlaubt dir alles – von der einfachen lokalen Kopie bis hin zu komplexen Netzwerk-Backups.
Die Syntax von rsync
Der Aufbau der rsync-Befehle ist logisch und ähnelt Tools wie SSH, SCP oder CP. Die Basis sieht so aus:
rsync [OPTION] source destinationbashBei source gibst du den Quellpfad an, während destination das Ziel definiert. world4you empfiehlt dir die Nutzung von Optionen, um den Abgleich genau zu steuern. Hier sind die wichtigsten Parameter:
-a(Archive): Übernimmt rekursiv Berechtigungen, Zeitstempel, Gruppen und Besitzer:innen.-v(Verbose): Liefert dir detaillierte Infos zum aktuellen Vorgang.-r(Recursive): Synchronisiert Ordner inklusive aller Unterverzeichnisse.-u(Update): Überträgt nur Dateien, die in der Quelle neuer sind als im Ziel.-z(Compress): Komprimiert Daten während der Übertragung für weniger Traffic.-n–itemize-changes: Listet dir alle geplanten Änderungen präzise auf.--delete: Entfernt Dateien im Ziel, die in der Quelle gelöscht wurden.--exclude: Damit klammerst du spezifische Daten vom Abgleich aus.--dry-run: Führt einen Testlauf durch, ohne echte Daten zu verschieben.--progress: Zeigt dir den Fortschritt der Übertragung in Echtzeit an.--partial: Behält Teildateien bei Abbruch bei, damit du später genau dort fortsetzen kannst.
rsync-Syntax im Einsatz
Schauen wir uns die Anwendung in der Praxis an. Zuerst erstellen wir den Ordner dir1 mit 100 leeren Testdateien sowie ein leeres Zielverzeichnis dir2:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashUm den Inhalt von dir1 lokal mit der Option dir2 abzugleichen, nutzt du:
$ rsync -r dir1/ dir2bashSicherer fährst du mit -a. Damit kopierst du rekursiv und behältst Links, Zeiten, Gruppen und Rechte bei:
$ rsync -a dir1/ dir2bashWichtiger Tipp: Der Schrägstrich (/) am Ende der Quelle entscheidet! Er gibt an, dass der Inhalt des Ordners synchronisiert wird und nicht der Ordner selbst.
$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashVergisst du den Schrägstrich, landet der gesamte Ordner „Quellverzeichnis“ als Unterordner im „Zielverzeichnis“:
$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .bashNutze am besten immer den abschließenden Slash an der Quelle, damit deine Daten genau dort landen, wo du sie haben willst.
rsync: Abgleich mit einem Remote-System
Die Synchronisation mit einem entfernten Server ist unkompliziert. Du benötigst lediglich SSH-Zugriff auf den Zielrechner und die passenden Login-Daten. rsync nutzt standardmäßig SSH (Secure Shell) für die sichere Verbindung. Achte darauf, dass rsync auf beiden Systemen installiert ist.
Sobald die SSH-Verbindung steht, kannst du den Ordner dir1 übertragen. Hier lassen wir den Slash weg, um das Verzeichnis komplett zu verschieben:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashSchickst du Daten vom lokalen PC zum Server, ist das eine „push“-Operation. Holst du Daten vom Server zu dir lokal, nennen wir das „pull“-Operation. Die Syntax dafür:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashProfi-Optionen für rsync
Passe das Verhalten von rsync mit diesen Einstellungen noch genauer an deine Bedürfnisse an.
Effizienter Transfer unkomprimierter Daten
Spar dir Bandbreite bei unkomprimierten Dateien mit dem Parameter -z:
$ rsync -az source destinationbashStatus checken und Übertragungen fortsetzen
Kombiniere --progress und --partial einfach zu -P. So siehst du den Fortschrittsbalken und kannst abgebrochene Transfers jederzeit wieder aufnehmen:
$ rsync -azP source destination
Output
sending incremental file list
./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .bashWiederholst du den Befehl, ist die Ausgabe kürzer, da rsync via Zeitstempel prüft, was sich wirklich geändert hat.
$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashVerzeichnisse exakt spiegeln
Für eine identische Kopie musst du Dateien im Ziel löschen, die es in der Quelle nicht mehr gibt. Das erreichst du mit --delete. Sei hier vorsichtig, damit du nichts Wichtiges entfernst.
Nutze vorher unbedingt --dry-run. Das ist eine Simulation, die dir zeigt, was passieren würde, ohne tatsächlich Daten zu löschen. Sicher ist sicher:
$ rsync -a --delete source destinationbashDaten gezielt vom Abgleich ausschließen
Mit --exclude verhinderst du, dass beispielsweise Logfiles oder temporäre Dateien übertragen werden.
$ rsync -a --exclude=pattern_to_exclude source destinationbashMöchtest du trotz eines Ausschlussmusters bestimmte Dateien dennoch mitnehmen, hilft dir die Option --include=.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashSichere Backups erstellen
Die Option --backup erlaubt es dir, Sicherungskopien geänderter Dateien aufzubewahren. Mit --backup-dir legst du fest, wo diese Backups landen sollen:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashMehr Details zu diesem Thema findest du in unserem Guide Server-Backups mit rsync.