Datensynchronisation mit rsync
rsync ist ein vielseitiges Tool, das den Dateitransfer über Netzwerkverbindungen vereinfacht und die Synchronisierung lokaler Verzeichnisse beschleunigt. Die hohe Flexibilität macht das Synchronisierungstool zu einer ausgezeichneten Option für eine Vielzahl von Operationen auf Dateiebene. [TOC]
Was ist rsync?
rsync, abgekürzt für „remote synchronization“, ist ein flexibles sowie netzwerkfähiges Synchronisierungstool unter Linux. Mit dem Open-Source-Programm können Dateien und Verzeichnisse zwischen lokalen Systemen oder über Netzwerke hinweg synchronisiert werden. Dazu nutzt das Tool eine differenzielle Datenübertragungstechnik, bei der nur die tatsächlich geänderten Abschnitte von Daten übertragen werden. Dadurch wird der Datenaustausch minimiert und der Synchronisationsprozess erheblich beschleunigt. Dank einer Vielzahl von Optionen erlaubt rsync eine genaue Steuerung des Synchronisationsverhaltens. Die flexible Syntax ermöglicht dabei sowohl einfache lokale Kopien als auch komplexe Netzwerksynchronisationen.
Die Syntax von rsync
Die Befehlssyntax von rsync ist einfach aufgebaut und ähnelt der von SSH, SCP und CP. Der grundlegende Aufbau sieht wie folgt aus:
rsync [OPTION] source destination
bashBei source
wird der Quellpfad eingetragen, aus dem die Daten synchronisiert werden sollen, während als destination
der Zielpfad angegeben wird. Dazu bietet rsync eine Vielzahl von Optionen, mit denen der Synchronisationsprozess an die jeweiligen Anforderungen angepasst werden kann. Zu den am häufigsten verwendeten Optionen gehören:
-
-a
(Archive): Behält rekursiv Dateiberechtigungen, Zeitstempel, Gruppen, Besitzer und spezielle Dateieigenschaften bei. -
-v
(Verbose): Zeigt detaillierte Informationen über den Synchronisationsprozess an. -
-r
(Recursive): Synchronisiert Verzeichnisse und deren Inhalte rekursiv. -
-u
(Update): Überträgt nur Dateien, die neuer sind als die bereits vorhandenen im Zielverzeichnis. -
-z
(Compress): Reduziert den Datenverkehr über das Netzwerk. -
-n
–itemize-changes: Zeigt eine Liste der Änderungen an, die vorgenommen werden sollen. -
--delete
: Löscht Dateien im Zielverzeichnis, die in der Quelle nicht mehr existieren. -
--exclude
: Schließt bestimmte Dateien oder Verzeichnisse von der Synchronisation aus. -
--dry-run
: Simuliert den Synchronisationsprozess, ohne tatsächlich Dateien zu übertragen. -
--progress
: Zeigt den Fortschritt der Dateiübertragung an. -
--partial
: Dateien, die teilweise übertragen wurden, verbleiben im Zielverzeichnis, wenn die Übertragung unterbrochen wird. Bei einer erneuten Übertragung wird die Datei von ihrem letzten Zustand fortgesetzt.
rsync-Syntax: Beispiel
Die rsync-Syntax lässt sich leicht an einem praktischen Beispiel nachvollziehen. Mit dem folgenden Befehl wird das Verzeichnis dir1
inklusive 100 leerer Testdateien und ein zweites, leeres Verzeichnis dir2
erstellt:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bashDer Inhalt von dir1
lässt auf demselben System mit dir2
mit der Option -r
synchronisieren:
$ rsync -r dir1/ dir2
bashAlternativ kann dazu die Option -a
verwendet werden, die rekursiv synchronisiert und symbolische Links, spezielle Gerätedateien, Modifizierungszeiten, Gruppen, Eigentümer und Berechtigungen enthält:
$ rsync -a dir1/ dir2
bashHinweis: Der Schrägstrich (/) am Ende des Quellverzeichnisses in einem rsync-Befehl ist wichtig, da er angibt, dass der Inhalt des Verzeichnisses synchronisiert werden soll, nicht das Verzeichnis selbst.
$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bashOhne den abschließenden Schrägstrich am Quellverzeichnis wird der Inhalt des Verzeichnisses „Quellverzeichnis“ in das „Zielverzeichnis“ kopiert:
$ 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
. . .
bashIn der Praxis ist es daher sinnvoll, den Schrägstrich am Ende des Quellverzeichnisses zu verwenden, um sicherzustellen, dass der Synchronisationsprozess wie erwartet abläuft und der Inhalt des Quellverzeichnisses korrekt im Zielverzeichnis landet.
rsync: Synchronisation mit einem Remote-System
Die Synchronisation eines Remote-Systems mit rsync ist im Allgemeinen nicht schwer, Voraussetzung dafür ist, dass Sie SSH-Zugriff auf den Remote-Rechner haben und die notwendigen Authentifizierungsinformationen kennen. rsync verwendet häufig SSH (Secure Shell) für die sichere Kommunikation mit Remote-Systemen. Zudem muss das Tool auf beiden Seiten installiert sein.
Ist der SSH-Zugriff zwischen beiden Rechnern verifiziert, kann der Ordner dir1
auf einem Remote-Computer synchronisiert werden. In diesem Fall soll das eigentliche Verzeichnis übertragen werden, daher fällt der nachgestellte Schrägstrich im folgenden Befehl weg:
$ rsync -a ~/dir1 username@remote_host:destination_directory
bashWird ein Verzeichnis von einem lokalen System auf ein Remote-System verschoben, wird dies als „push“-Operation bezeichnet. Im Gegensatz dazu sprich man von einer „pull“-Operation, wenn ein Remote-Verzeichnis mit einem lokalen System synchronisiert wird. Die Syntax dazu sieht wie folgt aus:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash- Bis zu 1 Gbit/s Bandbreite & unbegrenzt Traffic
- Schneller NVMe-SSD-Speicher
- Kostenlose Plesk Web Host Edition
Verwendung weiterer Optionen in rsync
Mit den bereits weiter oben vorgestellten Optionen lässt sich das Standardverhalten von rsync weiter anpassen.
Übertragung nicht komprimierter Dateien mit rsync
Die Netzwerkbelastung bei der Übertragung von nicht komprimierten Dateien lässt sich mit der Option -z
wie folgt reduzieren:
$ rsync -az source destination
bashFortschritt anzeigen und unterbrochene Übertragungen wiederaufnehmen
Mit -P
lassen sich die Optionen --progress
und --partial
miteinander kombinieren. Damit erhalten Sie eine Übersicht über den Fortschritt der Übertragungen und können gleichzeitig unterbrochene Übertragungen wiederaufnehmen:
$ 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)
. . .
bashFühren Sie den Befehl erneut aus, um eine kürzere Ausgabe zu erhalten. Dadurch lässt sich mit rsync anhand von Änderungszeiten ermitteln, ob Änderungen vorgenommen wurden.
$ 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.00
bashVerzeichnisse mit rsync synchron halten
Um sicherzustellen, dass zwei Verzeichnisse tatsächlich synchron gehalten werden, ist es erforderlich, im Zielverzeichnis Dateien zu löschen, die aus der Quelle entfernt wurden. Standardmäßig entfernt rsync jedoch keine Dateien aus dem Zielverzeichnis. Dieses Verhalten kann mit der Option --delete
modifiziert werden. Allerdings ist es ratsam, diese Option mit Vorsicht zu verwenden, da diese Dateien im Zielverzeichnis löscht, die in der Quelle nicht mehr vorhanden sind.
Bevor Sie die Option anwenden, sollten Sie die Option --dry-run
verwenden. Diese ermöglicht es Ihnen, eine Simulation des Synchronisationsprozesses durchzuführen, ohne tatsächliche Dateien zu löschen. So können Sie sicherstellen, dass nur die gewünschten Änderungen vorgenommen werden, ohne versehentlich wichtige Daten zu verlieren:
$ rsync -a --delete source destination
bashDateien und Verzeichnisse von der Synchronisation mit rsync ausschließen
In rsync können Sie mit der Option --exclude
bestimmte Dateien und Verzeichnisse von der Synchronisation ausschließen. Dies ist nützlich, wenn z. B. temporäre Dateien, Logdateien oder andere Inhalte nicht synchronisiert werden sollen.
$ rsync -a --exclude=pattern_to_exclude source destination
bashHaben Sie ein Muster zum Ausschließen von Dateien angegeben, können Sie diesen Ausschluss für Dateien, die einem anderen Muster entsprechen, mit der Option --include=
überschreiben.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bashBackups mit rsync speichern
Die Option --backup
bietet Ihnen die Möglichkeit, Backups von wichtigen Dateien zu speichern. Sie wird in Verbindung mit der Option --backup-dir
verwendet. Diese gibt das Verzeichnis an, in dem die Backup-Dateien gespeichert werden sollen:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bashEinen genauen Überblick über die verschiedenen Backup-Szenarien erhalten Sie in unserem weiterführenden Artikel Server-Backups mit rsync.