Mit rsync können wir lokale und entferne Dateien z. B. von anderen Servern und Computern miteinander synchronisieren. Das Werkzeug Rsync gibt es bereits seit dem Jahr 1996 und es ist bis heute eine beliebte und gut funktionierende Lösung für Synchronisierungen zwischen zwei Servern oder für die Durchführung von automatisierten Backups.
Rsync verwendet einen Algorithmus, der nur bestimmte Daten kopiert, die entweder Änderungen aufweisen oder neu zu einem Verzeichnis hinzugefügt worden sind. Bereits vorhandene Dateien, die nicht verändert wurden, werden dabei nicht erneut kopiert.
So wird der anfallende Datenverkehr im Netzwerk auf ein absolutes Minimum reduziert. Rsync kann auch dazu verwendet werden, die Datenbestände von redundanten Clouds, z. B. Nextcloud, OwnCloud oder Seafile miteinander zu synchronisieren oder für NAS-Umzüge eingesetzt werden. Das ist häufig dann praktisch, wenn alle Dateien und Verzeichnisse von der alten NAS auf einen neuen Netzwerkspeicher kopiert werden sollen.
Das Werkzeug arbeitet sehr zuverlässig und die erreichten Kopiergeschwindigkeiten sind ausgezeichnet. Die Dateiübertragung über das Netzwerk erfolgt standardgemäß über das SSH-Protokoll. In diesem Artikel zeige ich euch anhand verschiedener Beispiele, wie Rsync für Spiegelungen (Mirroring), Sicherungen (Backups) und einfachen Kopierfunktionen verwendet werden kann. Dafür stehen dem Anwender eine breite Palette unterschiedlicher Befehle und Argumente zur Verfügung.
Inhaltsverzeichnis: So funktioniert Rsync (Tutorial)
Rsync unter Linux installieren (Ubuntu, Debian, CentOS und viele weitere)
Rsync gehört standardgemäß zu den meisten Linux-Standard-Repositorien (Paketquellen). Das macht die Installation z. B. unter Linux Ubuntu, Debian, Fedora oder CentOS sehr komfortabel. Um das Werkzeug auf unserem Hostsystem zu installieren, müssen wir nur einen einzigen Befehl in das Terminal eingeben.
Installation unter Debian, Ubuntu, Mint und APT-basierten Distributionen:
apt-get install rsync
Installation unter Fedora, CentOS, RHEL und yum-basierten Distributionen:
yum install rsync
Installation unter Rocky Linux, Almalinux und dnf-basierten Distributionen:
dnf install rsync
Rsync muss auf dem Quell- und auf dem Zielcomputer installiert werden, um Remote-Synchronisationen z. B. über das lokale Netzwerk oder über das Internet zu ermöglichen.
Verzeichnisse mit Rsync zwischen zwei Linux-Servern synchronisieren
Möchten wir Rsync dafür verwenden, bestimmte Verzeichnisse zwischen zwei Servern miteinander zu synchronisieren, dann müssen wir wie folgt vorgehen. Rsync unterstützt neben dem SSH-Protokoll auch das Kopieren von Dateien über NFS- oder Samba-Freigaben (SMB) z. B. von einem Windows-Computer oder eines NAS-Systems.
Dafür können wir die Netzwerkpfade auch permanent mounten. Anschließend können wir ein Verzeichnis von einem Server auf den anderen kopieren bzw. 1:1 synchronisieren.
Ein lokales Verzeichnis auf einen Remote-Computer übertragen (Lokal > Remote)
rsync -a /var/www /ubuntu@192.168.178.50:/var/www
Erklärung: In diesem Beispiel haben wir das www-Verzeichnis eines Linux-basierten Webservers von einem Server auf einen anderen im selben IP-Netzwerk synchronisiert. Rsync kann aber auch dafür verwendet werden, Verzeichnisse und Dateien von einem Remote-Computer (Server) auf dem lokalen Hostsystem zu übertragen.
Der in diesem Befehl verwendete Parameter -a steht für archive und stellt sicher, dass die Berechtigungen und Attribute der einzelnen Dateien und der Verzeichnisse auf beiden Seiten identisch sind. Eine Liste mit den am häufigsten verwendeten Optionen befindet sich im letzten Abschnitt (Befehlssyntax) vom Beitrag.
Ein Verzeichnis mit allen Dateien von einem Remote-Computer auf dem lokalen Computer übertragen (Remote > Lokal):
rsync -a ubuntu@192.168.178.50:/var/www /var/www
Wie die Befehle gezeigt haben, können wir mit Rsync in beiden Richtungen synchronisieren. Das macht das Befehlszeilenprogramm unter Linux so leistungsstark. Ob wir das Befehlszeilenprogramm für Backups, Synchronisierungen oder für einfache Kopierarbeiten verwenden, generell sind alle drei dieser Aufgaben jederzeit möglich.
Mit einem Crontab können wir die Synchronisation zwischen zwei Linux-basierten Servern auch automatisieren. Das gelingt uns, indem wir die Synchronisationsfunktion mit der gewünschten Befehlssyntax immer zu bestimmten Uhrzeiten vornehmen lassen.
Wichtiges über die Funktionsweise von Rsync:
Der angemeldete Benutzer, der den Befehl für die Synchronisierung ausführt, muss am Quellsystem über Leseberechtigungen und am Zielsystem über Schreibberechtigungen verfügen. Sind diese Berechtigungen nicht vorhanden, kann Rsync die Befehlsanweisung nicht durchführen!
Rsync ist dazu in der Lage, Verzeichnisse auf dem Linux-Hostsystem selbstständig anzulegen, damit die Ordner-Struktur von dem Ziel zur Quelle synchron bleibt. Wir können anstelle einer IP-Adresse auch mit dem Hostnamen arbeiten oder einen Moint-Point anlegen.
Daten mit Rsync über einen SSH-Tunnel übertragen
Haben wir Rsync auf beiden Systemen (Quelle und Ziel) installiert, können wir Dateien über einen sicheren SSH-Tunnel übertragen. Das funktioniert mit der folgenden Befehlssyntax:
rsync -av -e ssh user@192.168.178.50:/home/ /mnt/nas-server/home/
Bei der Übertragung von sehr großen Verzeichnissen ist es empfehlenswert, den Befehl mit einer Anzeige auszuführen, die uns über den aktuellen Synchronisation- und Kopierfortschritt auf dem Laufenden hält. Das gelingt uns mit der Option -P.
Mit Rsync Backups auf einen lokalen USB-Datenträger durchführen
Wie bereits erwähnt kann Rsync auch auf lokaler Ebene verwendet werden. Somit ersetzt das Programm die üblichen Befehle wie SCP, SFTP und CP. Die grundlegende Syntax dafür lautet wie folgt:
rsync -a /home/user /mnt/USB
Erklärung: Wir haben das Home-Verzeichnis auf einem gemounteten USB-Speichermedium kopiert. Das funktioniert selbstverständlich auch zwischen zwei gewöhnlichen Verzeichnissen auf dem lokalen Laufwerk.
Optionen und Argumente für die Steuerung (Befehlssyntax)
Geben wir den Befehl rsync -help in das Terminal ein, erhalten wir eine Ausgabe mit unterschiedlichen Optionen für die Verwendung von Rsync. Darunter finden wir verschiedene Schalter zur Steuerung von Datensynchronisationen zwischen einem Ziel- und einem Quell-Pfad.
Anbei folgt eine kurze Zusammenfassung der wichtigsten Optionen (-a):
-r, --recursive (Rekursion in Verzeichnisse)
-l, --links (Symlinks als Symlinks kopieren)
-p, --perms (Berechtigungen beibehalten)
-t, --times (Änderungszeiten beibehalten)
-g, --group (Gruppe beibehalten)
-o, --owner (Besitzer beibehalten)
-D gleich wie --devices --specials
--devices Gerätedateien beibehalten
--specials
-H, --hard-links (harte Links bewahren)
-A, --acls (ACLs beibehalten)
-X, --xattrs (erweiterte Attribute beibehalten)