rsync Linux: Befehl, Optionen und Beispiele

Kopierst du jedes Mal den ganzen Ordner neu, um zwei Server abzugleichen, ist die Übertragung so groß wie der ganze Ordner, auch wenn sich nur eine Datei geändert hat. Der rsync-Befehl, kurz für remote sync, vergleicht Quelle und Ziel und überträgt nur die Dateien, die sich unterscheiden; das funktioniert zwischen lokalen Ordnern genauso wie zwischen Servern, die per SSH verbunden sind. Dieser Beitrag zeigt die Grundlagen, die Optionen und Beispiele für die beiden Verbindungsarten SSH und rsync-Daemon.
Die Ausgaben in diesem Beitrag stammen von rsync 3.2.7 unter AlmaLinux 9.8. Ist rsync nicht installiert, installierst du es mit dem Paketmanager.
# RHEL-Familie
dnf -y install rsync
# Debian-Familie
apt -y install rsync✅ Grundlegende Verwendung
Die grundlegende Syntax sieht so aus.
rsync -Optionen Quelle Zielcp-Befehl: Wie dort schreibst du zuerst die Quelle und dahinter das Ziel. Hängst du an die Quelle einen Schrägstrich [/] an, landet nur der Inhalt des Ordners im Ziel; ohne ihn kommt der Ordner selbst hinein.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.pngFührst du denselben Befehl noch einmal aus, ist die Dateiliste leer, und die gesendeten Bytes (sent) fallen auf einige Hundert. Dateien mit gleicher Größe und gleicher Änderungszeit werden übersprungen.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84Mit -r allein ohne -a bleiben die Änderungszeiten nicht erhalten, und beim nächsten Lauf werden dieselben Dateien erneut gesendet. Beim Synchronisieren von Ordnern ist -a deshalb der Standard.
Die Option -n zeigt nur, welche Dateien sich ändern würden, ohne etwas zu übertragen, und am Ende der Ausgabe steht [(DRY RUN)]. Optionen, die Dateien im Ziel löschen, wie --delete, prüfst du zuerst mit -n und führst sie dann richtig aus.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Optionen des rsync-Befehls & Simulator
| Option | Beschreibung | |
|---|---|---|
| -a | --archiveKopiert auch Unterverzeichnisse und erhält Rechte, Eigentümer, Änderungszeit und symbolische Links (entspricht -rlptgoD) | |
| -v | --verboseGibt die Namen der übertragenen Dateien und die Übertragungsmenge aus | |
| -z | --compressKomprimiert die Dateidaten während der Übertragung | |
| -r | --recursiveKopiert auch Unterverzeichnisse (in -a enthalten) | |
| -t | --timesErhält die Änderungszeit (in -a enthalten). Danach richtet sich, welche Dateien beim nächsten Lauf übersprungen werden | |
| -n | --dry-runZeigt ohne Übertragung nur die Dateien, die sich ändern würden, und markiert das Ende mit (DRY RUN) | |
| -u | --updateÜberspringt Dateien, die im Ziel neuer sind | |
| -h | --human-readableGibt Byte-Zahlen in K, M und G aus | |
| -P | Entspricht --partial --progress. Zeigt den Fortschritt je Datei und setzt abgebrochene Übertragungen fort | |
| -i | --itemize-changesZeigt die Änderungen jeder Datei als Kürzel>f+++++++++ neue Datei · >f.st...... Größe und Zeit geändert · *deleting gelöscht | |
| -e | --rsh=COMMANDLegt die Remote-Shell fest-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Löscht im Ziel Dateien, die es in der Quelle nicht gibt (braucht -r oder -a) | |
| --exclude=PATTERN | Schließt Dateien und Verzeichnisse aus, die zum Muster passen--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Vor --exclude gesetzt, nimmt nur dieses Muster vom Ausschluss aus | |
| --max-size=SIZE | Überträgt keine Dateien, die größer als die angegebene Größe sind (--min-size für kleinere Dateien)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Begrenzt die Übertragungsgeschwindigkeit, Einheit KiB/s | |
| --stats | Gibt Statistiken zu Dateizahl und Übertragungsmenge aus |
✅ Verbindungsarten: SSH und rsync-Daemon
Für die Synchronisation mit einem entfernten Server gibt es zwei Verbindungsarten. Ein einzelner Doppelpunkt [:] nach dem Host läuft über SSH, ein doppelter Doppelpunkt [::] verbindet direkt mit dem rsync-Daemon auf Port 873.
| Art | Per SSH (:) | Per rsync-Daemon (::) |
|---|---|---|
| Syntax | rsync -Optionen user@host:/Pfad /lokaler/Pfad | rsync -Optionen host::Modul/Pfad /lokaler/Pfad |
| Port | SSH-Port (Standard 22) | 873 |
| Verschlüsselung | Per SSH verschlüsselt | Keine Verschlüsselung |
| Authentifizierung | SSH-Schlüssel oder Passwort | hosts allow in rsyncd.conf, optional Konto und Passwort |
| Einrichtung auf dem Server | Keine (funktioniert, sobald SSH-Zugang besteht) | rsync-daemon installieren, /etc/rsyncd.conf, Port 873 öffnen |
| Einsatz | Backup und Deployment zwischen Servern (Standardwahl) | Spiegelung im internen Netz, ohne SSH-Konten herauszugeben |
🔲 Per SSH
Erreichst du den Server per SSH, kannst du rsync ohne Einrichtung auf dem Server sofort nutzen. Bei einem anderen Port oder einer Schlüsseldatei setzt du den ssh-Befehl unverändert in die Option -e.
# lokal → entfernt
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# entfernt → lokal
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# SSH-Port und Schlüsseldatei
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Um bestimmte Dateien oder Verzeichnisse auszulassen, hängst du --exclude für jedes Muster einzeln an oder fasst die Muster in geschweiften Klammern zusammen.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 Per rsync-Daemon
Der rsync-Daemon erlaubt den Zugriff je Modul über Port 873 ohne SSH-Konto. Die Verbindung ist nicht verschlüsselt, daher nutzt man ihn zwischen Servern im selben internen Netz.
Unter AlmaLinux 9 installierst du das Paket rsync-daemon und startest den Dienst. Auf Servern mit firewalld öffnest du Port 873, bei Cloud-Servern in der Firewall der Konsole. Das unter RHEL 8 und älter genutzte xinetd gibt es in Version 9 nicht mehr.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadIn der Konfigurationsdatei [/etc/rsyncd.conf] trägst du Modulname, Pfad und erlaubte Hosts ein. Mit read only = yes können entfernte Clients nur herunterladen.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Schreibst du entfernt nur zwei Doppelpunkte nach dem Host, erscheint die Modulliste; mit dem Modulnamen erscheint die Dateiliste darin.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_dataKopiert wird im Format [Host::Modul/Pfad]. --delete löscht im Ziel Dateien, die es in der Quelle nicht gibt, und --include nimmt nur die Einträge vom Ausschluss aus, die vor --exclude stehen.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

Auf einem Server mit aktivem SELinux kann der Zugriff auf den Modulpfad mit [Permission denied (13)] blockiert werden. Im Test ging es durch, nachdem SELinux mit [setenforce 0] abgeschaltet war.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit begrenzt die Übertragungsgeschwindigkeit in KiB/s, und mit -P siehst du dazu den Fortschritt jeder Datei. --max-size und --min-size übertragen nur Dateien im angegebenen Größenbereich.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.