Anleitung

rsync: Beispiele für Synchronisation von Dateien und Backups unter Linux

Aktualisiert: · Skillaria.Top

rsync kopiert und synchronisiert Dateien lokal und per SSH und überträgt nur die Änderungen. Der Grundbefehl ist rsync -avz quelle/ user@host:/pfad/: -a erhält Rechte und Zeitstempel, -v zeigt die Dateien, -z komprimiert den Datenstrom; --delete macht das Ziel zu einer exakten Kopie der Quelle, und mit -n prüfen Sie das Ergebnis vorab, ohne etwas zu ändern.

rsync ist das Standardwerkzeug unter Linux zum Kopieren und Synchronisieren von Dateien: lokal, zwischen Datenträgern und zwischen Servern per SSH. Der Hauptunterschied zu cp und scp ist, dass rsync nur überträgt, was sich geändert hat. Deshalb dauert eine erneute Synchronisation eines großen Verzeichnisses nur Sekunden. Im Folgenden finden Sie rsync Beispiele für typische Aufgaben: Projekt auf den Server kopieren, Spiegel eines Verzeichnisses, Ausschlüsse, Backups mit Snapshots und Start nach Zeitplan.

Syntax und die wichtigsten Optionen

Der allgemeine Aufbau des Befehls:

rsync [Optionen] QUELLE... ZIEL

Quelle und Ziel können lokale Pfade oder entfernte Pfade der Form user@host:/pfad sein. Eine Seite ist immer lokal: rsync kopiert nicht direkt zwischen zwei entfernten Rechnern.

OptionWirkung
-aArchivmodus: rekursiv, mit Rechten, Eigentümer, Gruppe, Änderungszeit und symbolischen Links (entspricht -rlptgoD)
-vübertragene Dateien auflisten
-zDaten bei der Übertragung über das Netz komprimieren
-hGrößen gut lesbar anzeigen (K, M, G)
-Pentspricht --partial --progress: Fortschritt und Wiederaufnahme abgebrochener Dateien
-n, --dry-runTestlauf: zeigt, was getan würde, ändert nichts
--deleteDateien im Ziel löschen, die in der Quelle fehlen
--excludeDateien nach Muster nicht kopieren
-eRemote-Shell festlegen, z. B. -e "ssh -p 2222"
-H, -A, -XHardlinks, ACLs und erweiterte Attribute erhalten (nicht in -a enthalten)

In der Praxis reicht in neun von zehn Fällen rsync -avh lokal und rsync -avzh über das Netz.

Schrägstrich am Pfadende: die häufigste Falle

Der häufigste Fehler von Einsteigern hängt mit dem abschließenden Schrägstrich bei der Quelle zusammen. Davon hängt ab, ob das Verzeichnis selbst oder nur sein Inhalt kopiert wird.

# Das VERZEICHNIS project in /backup kopieren → es entsteht /backup/project/...
rsync -av project /backup/

# Den INHALT von project nach /backup kopieren → die Dateien liegen direkt in /backup/
rsync -av project/ /backup/

Merken Sie sich: Ein Schrägstrich am Ende der Quelle bedeutet „der Inhalt dieses Verzeichnisses“. Beim Ziel spielt der Schrägstrich keine Rolle. Sind Sie unsicher, ergänzen Sie -n und sehen nach, welche Pfade rsync anlegen würde.

Lokales Kopieren

Ein Verzeichnis mit Fortschrittsanzeige auf einen externen Datenträger kopieren:

rsync -avhP ~/photos/ /mnt/usb/photos/

Wird derselbe Befehl erneut ausgeführt, kopiert rsync nicht alles noch einmal: Der Vergleich erfolgt über Größe und Änderungszeit, übertragen werden nur neue und geänderte Dateien. Die Zusammenfassung am Ende zeigt, wie viele Daten tatsächlich geflossen sind:

sending incremental file list
2026/10/IMG_2041.jpg
          4.12M 100%   38.40MB/s    0:00:00 (xfr#1, to-chk=0/1534)

sent 4.13M bytes  received 9.25K bytes  2.76M bytes/sec
total size is 6.82G  speedup is 1,648.21

Der Wert speedup zeigt, wie viel weniger Daten im Vergleich zu einem vollständigen Kopieren übertragen wurden.

rsync per SSH: auf den Server und zurück

Für entfernte Pfade nutzt rsync standardmäßig SSH, Sie müssen also nichts Besonderes einrichten, solange sich der normale Login per ssh anmelden lässt. Am bequemsten geht es mit Schlüsseln: Dann wird kein Passwort abgefragt, und der Befehl lässt sich in cron eintragen.

# Website auf den Server hochladen
rsync -avz ./site/ deploy@203.0.113.10:/var/www/site/

# Logs vom Server auf den eigenen Rechner holen
rsync -avz deploy@203.0.113.10:/var/log/nginx/ ./nginx-logs/

# SSH auf einem nicht standardmäßigen Port und mit einem bestimmten Schlüssel
rsync -avz -e "ssh -p 2222 -i ~/.ssh/deploy_key" ./site/ deploy@203.0.113.10:/var/www/site/

rsync muss auf beiden Rechnern installiert sein, denn auf der Gegenseite wird es über SSH gestartet. Fehlt es dort, erscheint rsync: command not found — installieren Sie das Paket (sudo apt install rsync oder sudo dnf install rsync).

Ist der Host in ~/.ssh/config unter einem Alias eingetragen, versteht rsync ihn ebenfalls: rsync -avz ./site/ prod:/var/www/site/.

Root-Rechte auf dem Server

Gehören die Dateien im Ziel dem Benutzer root, Sie melden sich aber als normaler Benutzer an, lässt sich der entfernte rsync über sudo starten:

rsync -avz --rsync-path="sudo rsync" ./conf/ admin@server:/etc/myapp/

Dafür muss sudo auf dem Server für rsync ohne Passwort funktionieren (Regel in sudoers). Andernfalls hängt der Befehl und wartet auf eine Eingabe.

Spiegel eines Verzeichnisses: --delete

Standardmäßig fügt rsync Dateien nur hinzu und aktualisiert sie, löscht aber nichts. Damit das Ziel eine exakte Kopie der Quelle wird, brauchen Sie --delete:

rsync -avh --delete ~/projects/ /mnt/backup/projects/

Das ist eine mächtige und gefährliche Option. Ein Fehler im Pfad (etwa eine leere Quelle oder ein vergessener Schrägstrich) löscht Daten im Ziel. Deshalb gilt eine Regel: Jeden Befehl mit --delete starten Sie zuerst mit -n.

$ rsync -avhn --delete ~/projects/ /mnt/backup/projects/
sending incremental file list
deleting old-app/README.md
deleting old-app/
app/main.py

sent 1.20K bytes  received 64 bytes  2.53K bytes/sec
total size is 18.4M  speedup is 14,554.39 (DRY RUN)

Die Zeilen deleting zeigen, was gelöscht würde. Sind Sie sicher, dass alles stimmt, starten Sie den Befehl ohne -n.

Weitere Varianten: --delete-after löscht Dateien erst nach der Übertragung (das Ziel bleibt länger vollständig), --backup --backup-dir=/mnt/backup/deleted-$(date +%F) löscht nicht, sondern verschiebt zu löschende und ersetzte Dateien in ein eigenes Verzeichnis.

Ausschlüsse: --exclude und --include

Temporäre Dateien, Abhängigkeiten und Geheimnisse auszuschließen ist bei Deployment und Backups üblich.

# Mehrere Muster
rsync -avz --exclude='.git/' --exclude='node_modules/' --exclude='*.log' ./app/ server:/srv/app/

# Muster aus einer Datei
rsync -avz --exclude-from='.rsyncignore' ./app/ server:/srv/app/

Die Datei .rsyncignore ist eine einfache Liste von Mustern, eines pro Zeile:

.git/
node_modules/
*.log
.env
tmp/

So funktionieren die Muster:

  • Ein Muster ohne führenden Schrägstrich (*.log) trifft auf jeder Verschachtelungsebene zu.
  • Ein Muster mit führendem Schrägstrich (/tmp/) ist an die Wurzel der Übertragung gebunden und schließt nur das oberste tmp aus.
  • Ein abschließender Schrägstrich (cache/) bedeutet „nur Verzeichnisse“.
  • Regeln werden der Reihe nach geprüft, es gilt die erste passende.

Aus dem letzten Punkt folgt ein Trick, um „nur das Nötige zu kopieren“: zuerst erlauben, dann alles Übrige verbieten.

# Nur .conf-Dateien kopieren, die Verzeichnisstruktur bleibt erhalten
rsync -av --include='*/' --include='*.conf' --exclude='*' /etc/ ./etc-confs/

Dabei ist --include='*/' nötig, damit rsync in alle Unterverzeichnisse hineingeht. Mit --prune-empty-dirs (-m) vermeiden Sie das Anlegen leerer Ordner.

Backups mit rsync

Einfache tägliche Kopie

Ein minimales Backup des Home-Verzeichnisses auf eine zweite Festplatte:

rsync -aH --delete --exclude='.cache/' /home/alice/ /mnt/backup/alice/

Der Nachteil: Es wird nur eine Version gespeichert. Wurde eine Datei beschädigt und hat sich das Backup bereits synchronisiert, ist die alte Version verloren.

Inkrementelle Snapshots mit --link-dest

Die Option --link-dest löst dieses Problem fast ohne zusätzlichen Platzbedarf. Unveränderte Dateien werden nicht kopiert, sondern als Hardlinks auf die Dateien des vorherigen Snapshots angelegt. Jeder Snapshot sieht aus wie eine vollständige Kopie, belegt aber nur den Platz der Änderungen.

#!/bin/bash
set -euo pipefail

SRC="/home/alice/"
DEST="/mnt/backup/snapshots"
TODAY="$(date +%F)"

mkdir -p "$DEST"
rsync -aH --delete \
  --exclude='.cache/' \
  --link-dest="$DEST/latest" \
  "$SRC" "$DEST/$TODAY"

ln -sfn "$DEST/$TODAY" "$DEST/latest"

Beim ersten Lauf existiert das Verzeichnis latest noch nicht — rsync gibt eine Warnung aus und erstellt eine vollständige Kopie, das ist normal. Alte Snapshots entfernen Sie mit einem gewöhnlichen rm -rf: Dateien, auf die andere Snapshots verweisen, bleiben dabei erhalten.

Snapshots, die älter als 30 Tage sind, löschen Sie so:

find /mnt/backup/snapshots -maxdepth 1 -type d -name '20*' -mtime +30 -exec rm -rf {} +

Backup eines Servers auf einen anderen Rechner

Am sichersten ist die Richtung „vom Backup-Server zum Arbeitsrechner“: Der Backup-Rechner holt die Daten selbst, und der produktive Server hat keinen Zugriff auf die Kopien. Wird er gehackt, bleiben die Backups unversehrt.

rsync -azH --delete -e "ssh -i /root/.ssh/backup_key" \
  backup@web01:/var/www/ /srv/backups/web01/www/

Datenbanken kann man so nicht kopieren: Dateien einer laufenden Datenbank sind während des Kopierens nicht konsistent. Erstellen Sie zuerst einen Dump (mysqldump, pg_dump) und lassen Sie rsync die fertige Dump-Datei übertragen.

Start nach Zeitplan mit cron

Das Backup-Skript tragen Sie mit crontab -e in cron ein:

# Jeden Tag um 03:15, Ausgabe ins Protokoll
15 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Damit ein Backup aus cron tatsächlich funktioniert, prüfen Sie Folgendes:

  • Im Skript stehen absolute Pfade: cron hat einen minimalen PATH und ein anderes aktuelles Verzeichnis.
  • Der SSH-Schlüssel kommt ohne Passwort aus, und der Host steht bereits in known_hosts — sonst hängt rsync an der Rückfrage zur Authentizität des Schlüssels.
  • Das Skript wertet den Rückgabecode aus: rsync gibt 0 bei Erfolg zurück, 23, wenn nicht alle Dateien übertragen wurden, und 24, wenn Dateien während des Kopierens verschwanden.
  • Vor dem gleichzeitigen Start zweier Kopien schützt flock: flock -n /tmp/backup.lock /usr/local/bin/backup.sh.

Statt cron können Sie auch einen systemd-Timer verwenden. Er schreibt die Ausgabe ins Journal, und die Ergebnisse lassen sich bequem mit journalctl ansehen.

Nützliche Optionen für große Übertragungen

AufgabeOption
Geschwindigkeit begrenzen, damit der Kanal nicht verstopft--bwlimit=5M
Eine große Datei nach einem Abbruch fortsetzen-P (oder --partial)
Gesamtfortschritt statt Dateiliste--info=progress2
Nach Inhalt statt nach Zeit vergleichen-c (--checksum), langsamer
Dateien nicht überschreiben, die im Ziel neuer sind-u (--update)
Vorhandene Dateien nicht überschreiben--ignore-existing
Quelldateien nach der Übertragung löschen (Verschieben)--remove-source-files
Ausführliche Statistik am Ende--stats

Typische Fehler und ihre Behebung

  • Permission denied beim Schreiben — dem Benutzer fehlen Rechte auf das Zielverzeichnis. Prüfen Sie den Eigentümer des Verzeichnisses oder verwenden Sie --rsync-path="sudo rsync".
  • Dateien werden jedes Mal erneut kopiert — die Änderungszeit wird nicht erhalten. Stellen Sie sicher, dass -a oder -t gesetzt ist; auf FAT/exFAT ergänzen Sie --modify-window=2, weil diese Dateisysteme Zeiten nur auf zwei Sekunden genau speichern.
  • Fehler chown oder chgrp beim Kopieren auf einen USB-Stick oder ein Netzlaufwerk — das Dateisystem unterstützt keine Eigentümer. Ersetzen Sie -a durch -rlt.
  • Unerwartete Verschachtelung /backup/project/project — der Schrägstrich am Ende der Quelle wurde verwechselt.
  • connection unexpectedly closed — Problem mit SSH oder rsync ist auf der Gegenseite nicht installiert. Prüfen Sie den normalen Login per ssh und ob rsync auf dem Server vorhanden ist.

Fazit

Für den Alltag genügen wenige Befehle: rsync -avz quelle/ host:/ziel/ für das Kopieren per SSH, --delete zusammen mit einem Testlauf -n für einen Spiegel, --exclude für Unnötiges und --link-dest für Backups mit Snapshots. Achten Sie auf den Schrägstrich am Ende der Quelle — dann ist rsync das verlässlichste Mittel, um Dateien zwischen Rechnern zu übertragen. Synchronisation und Datensicherung werden im Kurs zu Linux praxisnah behandelt.

Häufige Fragen

Worin ist rsync besser als scp?

scp kopiert Dateien jedes Mal vollständig, rsync überträgt nur die Änderungen, kann Übertragungen fortsetzen, im Ziel Überflüssiges löschen und Dateien nach Muster ausschließen. Für das einmalige Kopieren einer Datei ist der Unterschied gering, für regelmäßige Synchronisation ist rsync deutlich schneller.

Kann ich rsync unter Windows verwenden?

Ja, über WSL, wo sich rsync wie unter einem normalen Linux installieren lässt, oder über Cygwin. Dateien eines Windows-Rechners mit einem Linux-Server zu synchronisieren geht am bequemsten aus WSL heraus.

Verschlüsselt rsync die übertragenen Daten?

rsync selbst verschlüsselt nicht, doch beim Kopieren per SSH läuft der gesamte Datenverkehr durch die verschlüsselte SSH-Verbindung. Unverschlüsselt werden Daten nur beim Arbeiten mit einem rsync-Daemon über eine Adresse der Form rsync:// übertragen.

Wie prüfe ich, ob die Kopie mit dem Original übereinstimmt?

Starten Sie rsync -avnc quelle/ ziel/ — mit -c werden die Dateien anhand von Prüfsummen verglichen, und -n verändert nichts. Ist die Dateiliste leer, sind die Kopien identisch.

Was passiert, wenn ich rsync mitten in der Übertragung abbreche?

Bereits übertragene Dateien bleiben erhalten, eine unvollständige Datei wird standardmäßig gelöscht. Ein erneuter Start desselben Befehls setzt an der Abbruchstelle fort, und mit -P bleibt auch der Teil einer abgebrochenen Datei erhalten.

Das Thema im Video lernen

Dieses Thema wird im Kurs „Linux: с нуля до уверенного администрирования“ ausführlich mit Praxis behandelt.

Zum Kurs