TL;DR — Kurzzusammenfassung

rsync-Leitfaden: Delta-Algorithmus, essentielle Flags, SSH-Remote-Backups, --link-dest-Snapshots, cron-Automatisierung und Daemon-Modus unter Linux.

rsync ist das Standard-Linux-Tool für effizientes Kopieren von Dateien und Remote-Backups. Sein Delta-Übertragungsalgorithmus berechnet Prüfsummen auf beiden Seiten und sendet nur die unterschiedlichen Bytes — was es für wiederholte Übertragungen großer Verzeichnisbäume deutlich schneller als scp macht. Dieser Leitfaden deckt alles ab, von grundlegenden Flags bis hin zu produktionsreifen inkrementellen Backup-Skripten mit --link-dest-Rotation.

Voraussetzungen

  • Linux-System (Ubuntu 22.04+, Debian 12+, RHEL 9+ oder eine aktuelle Distribution).
  • rsync auf Quell- und Zielrechnern installiert (sudo apt install rsync / sudo dnf install rsync).
  • SSH-Schlüsselauthentifizierung für Remote-Übertragungen konfiguriert.
  • Root- oder sudo-Zugriff für systemweite Backups.

Wie rsync funktioniert

rsync verwendet den Delta-Übertragungsalgorithmus, um die über das Netzwerk gesendeten Daten zu minimieren:

  1. Der Sender listet Dateien auf und berechnet gleitende Prüfsummen kleiner Blöcke.
  2. Der Empfänger prüft, welche Blöcke er bereits besitzt.
  3. Nur fehlende oder geänderte Blöcke werden übertragen.
  4. Metadaten (Berechtigungen, Zeitstempel, Eigentümer) werden separat synchronisiert.

Bei einem großen Verzeichnis, das sich täglich nur um 1% ändert, überträgt rsync bei nachfolgenden Durchläufen typischerweise weniger als 1% der Gesamtdaten. Die erste Übertragung ist immer eine vollständige Kopie; jeder nachfolgende Durchlauf ist standardmäßig inkrementell.

Wichtige Eigenschaften:

  • Prüfsummenbasiert — erkennt Änderungen auch wenn der Änderungszeitstempel nicht aktualisiert wurde.
  • Atomare Übertragung — Dateien werden unter einem temporären Namen geschrieben und bei Abschluss umbenannt.
  • Plattformübergreifend — läuft auf Linux, macOS und Windows (über WSL oder Cygwin).
  • Protokollversion ausgehandelt — Client und Server einigen sich beim Verbindungsaufbau auf die höchste unterstützte Version.

Grundlegende Syntax

rsync [OPTIONEN] QUELLE ZIEL
MusterBedeutung
rsync -a /src/ /dst/Kopiert den Inhalt von /src/ nach /dst/
rsync -a /src /dst/Kopiert das Verzeichnis /src selbst nach /dst/
rsync -a benutzer@host:/remote/ /lokal/Holt vom Remote ins Lokale
rsync -a /lokal/ benutzer@host:/remote/Sendet vom Lokalen ins Remote

Der abschließende Schrägstrich bei der Quelle ist wichtig. /src/ bedeutet „Inhalt von src kopieren”; /src bedeutet „Verzeichnis src selbst ins Ziel kopieren”.


Wesentliche Flags

rsync -avzP --delete \
  --exclude='*.tmp' \
  --exclude='.cache/' \
  /home/benutzer/ benutzer@backupserver:/backups/home/
FlagWirkung
-aArchiv: rekursiv + erhält Berechtigungen, Eigentümer, Zeitstempel, Symlinks, Gerätedateien
-vAusführlich: zeigt jede übertragene Datei
-zKomprimiert Daten während der Übertragung (nützlich bei langsamen Links; bei schnellem LAN weglassen)
-PZeigt Fortschritt pro Datei + behält Teildateien (--progress --partial kombiniert)
--deleteLöscht am Ziel Dateien, die in der Quelle fehlen — erstellt einen exakten Spiegel
-n / --dry-runSimuliert die Übertragung ohne Änderungen vorzunehmen
--exclude=MUSTERÜberspringt Dateien, die dem Muster entsprechen
--include=MUSTERErzwingt die Aufnahme auch wenn ein breiterer Ausschluss sie überspringen würde
-e sshVerwendet SSH als Transport (Standard in modernem rsync; Optionen mit -e 'ssh -p 2222' hinzufügen)
--checksumVergleicht Dateiinhalte (nicht nur Größe+mtime); langsamer, erkennt aber stille Beschädigung
--bwlimit=KBPSBegrenzt die Bandbreitennutzung (z.B. --bwlimit=10000 für 10 MB/s)
--log-file=PFADSchreibt ein Übertragungsprotokoll in die angegebene Datei
--statsGibt nach Abschluss der Übertragung zusammenfassende Statistiken aus

Führen Sie immer zuerst einen Trockenlauf durch

rsync -avzn --delete /wichtig/ benutzer@host:/backup/wichtig/

Überprüfen Sie die Ausgabe, dann führen Sie ohne -n erneut aus, um die Änderungen anzuwenden.


Remote-Synchronisierung über SSH

Senden (lokal → remote)

rsync -avz -e "ssh -i ~/.ssh/backup_ed25519" \
  /var/www/html/ \
  backupuser@192.168.1.50:/backups/webroot/

Holen (remote → lokal)

rsync -avz -e "ssh -i ~/.ssh/backup_ed25519" \
  backupuser@192.168.1.50:/backups/webroot/ \
  /var/www/html/

Benutzerdefinierter SSH-Port

rsync -avz -e "ssh -p 2222" /src/ benutzer@host:/dst/

Backup-SSH-Schlüssel einschränken

In ~/.ssh/authorized_keys auf dem Backup-Server den öffentlichen Schlüssel mit einem erzwungenen Befehl versehen:

command="rsync --server --daemon .",no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-ed25519 AAAA...schlüssel...

Bandbreitenbegrenzung

# Auf 5 MB/s begrenzen
rsync -avz --bwlimit=5000 /quelle/ benutzer@host:/ziel/

# Auf 1 MB/s für Hintergrund-Backup-Jobs begrenzen
rsync -avz --bwlimit=1000 --delete /home/ benutzer@host:/backups/home/

Für dynamischere Drosselung:

nice -n 19 ionice -c 3 rsync -avz --bwlimit=2000 /quelle/ benutzer@host:/ziel/

Berechtigungen, Eigentümer und Erweiterte Attribute erhalten

Das Flag -a ist eine Kurzform für -rlptgoD:

Unter-FlagErhält
-rRekursion
-lSymbolische Links als symbolische Links
-pBerechtigungen (chmod-Bits)
-tÄnderungszeitstempel
-gGruppeneigentümer
-oBenutzereigentümer (erfordert Root)
-DGeräte- und Sonderdateien

Für ACLs und erweiterte Attribute:

rsync -aAX /quelle/ /ziel/
Extra-FlagErhält
-APOSIX-ACLs
-XErweiterte Attribute (xattrs)

--link-dest ermöglicht Hard-Link-basierte Snapshot-Backups — jedes tägliche Verzeichnis sieht wie eine vollständige Kopie aus, aber nur neue oder geänderte Dateien benötigen zusätzlichen Speicherplatz.

Konzept

/backups/
  2026-03-20/   ← vollständige Daten, 50 GB
  2026-03-21/   ← unveränderte Dateien per Hard-Link + nur geänderte Dateien; ~200 MB extra
  2026-03-22/   ← per Hard-Link von 2026-03-21 + heutige Änderungen; ~150 MB extra

Skript

#!/bin/bash
set -euo pipefail

QUELLE="/home/"
ZIEL="backupuser@192.168.1.50:/backups"
HEUTE=$(date +%Y-%m-%d)
GESTERN=$(date -d "yesterday" +%Y-%m-%d)
SSH_KEY="/root/.ssh/backup_ed25519"

rsync -avz \
  -e "ssh -i $SSH_KEY" \
  --link-dest="$ZIEL/daily/$GESTERN" \
  --delete \
  "$QUELLE" \
  "$ZIEL/daily/$HEUTE/"

echo "Backup abgeschlossen: $HEUTE"

Rotation: täglich / wöchentlich / monatlich

#!/bin/bash
QUELLE="/home/"
BASIS="/backups"
HEUTE=$(date +%Y-%m-%d)
DOW=$(date +%u)
DOM=$(date +%d)

ZIEL_HEUTE="$BASIS/daily/$HEUTE"
LETZTER_LINK="$BASIS/daily/latest"

rsync -a --delete \
  --link-dest="$LETZTER_LINK" \
  "$QUELLE" "$ZIEL_HEUTE/"

ln -sfn "$ZIEL_HEUTE" "$LETZTER_LINK"

[ "$DOW" -eq 7 ]  && cp -al "$ZIEL_HEUTE" "$BASIS/weekly/$(date +%Y-W%V)"
[ "$DOM" -eq 01 ] && cp -al "$ZIEL_HEUTE" "$BASIS/monthly/$(date +%Y-%m)"

find "$BASIS/daily"   -maxdepth 1 -type d | sort | head -n -7  | xargs rm -rf
find "$BASIS/weekly"  -maxdepth 1 -type d | sort | head -n -4  | xargs rm -rf
find "$BASIS/monthly" -maxdepth 1 -type d | sort | head -n -12 | xargs rm -rf

Automatisierung mit cron und systemd-Timern

cron

crontab -e
# Hinzufügen:
0 2 * * * /usr/local/bin/rsync-backup.sh >> /var/log/rsync-backup.log 2>&1

systemd-Dienst + Timer

/etc/systemd/system/rsync-backup.service:

[Unit]
Description=Tägliches rsync-Backup
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
User=root
ExecStart=/usr/local/bin/rsync-backup.sh
StandardOutput=journal
StandardError=journal

/etc/systemd/system/rsync-backup.timer:

[Unit]
Description=Täglicher rsync-Backup-Timer

[Timer]
OnCalendar=*-*-* 02:00:00
RandomizedDelaySec=10min
Persistent=true

[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now rsync-backup.timer

rsync Daemon-Modus

Für hohe Volumina oder geplante Pulls ohne interaktive SSH-Authentifizierung:

/etc/rsyncd.conf

uid = nobody
gid = nogroup
use chroot = yes
max connections = 4
log file = /var/log/rsyncd.log

[backups]
    path = /backups/shared
    comment = Geteilter Backup-Bereich
    read only = no
    auth users = backupclient
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.1.0/24
    hosts deny = *
chmod 600 /etc/rsyncd.secrets
systemctl enable --now rsync

Client-Nutzung

rsync -avz backupclient@backupserver::backups /lokal/wiederherstellen/

Der doppelte Doppelpunkt (::) signalisiert den Daemon-Modus.


Überwachung und Protokollierung

rsync -avz --stats /quelle/ /ziel/ 2>&1 | tee /var/log/rsync-$(date +%Y%m%d).log

Fehler in Skripten überprüfen

rsync -avz /quelle/ /ziel/
EXIT=$?
if [ $EXIT -ne 0 ] && [ $EXIT -ne 24 ]; then
  echo "rsync fehlgeschlagen mit Code $EXIT" | mail -s "Backup fehlgeschlagen auf $(hostname)" admin@beispiel.com
fi

Exit-Code 24 (Dateien während der Übertragung verschwunden) ist bei aktiven Systemen normal; behandeln Sie ihn als Erfolg.


rsync vs scp vs sftp vs Borg vs rclone

MerkmalrsyncscpsftpBorgBackuprclone
Delta-ÜbertragungJaNeinNeinJa (Dedup)Teilweise
Partielle fortsetzenJa (-P)NeinJaJaJa
VerschlüsselungVia SSHSSHSSHAES-256 nativVia SSH/API
DeduplizierungNeinNeinNeinJaNein
Inkrementelle SnapshotsJa (--link-dest)NeinNeinJaNein
Cloud-BackendsNeinNeinNeinNur SSHS3, GCS, viele
KomprimierungJa (-z)NeinNeinlz4/zstdJa
Am besten fürSpiegelung, BackupsEinmalige KopieInteraktive DateienSpeichereffizientes BackupCloud-Sync

Zusammenfassung

  • rsync verwendet Delta-Übertragung — nur geänderte Dateiblöcke werden gesendet, was wiederholte Backups sehr schnell macht.
  • Verwenden Sie -aAXz, um alle Metadaten einschließlich ACLs und xattrs zu erhalten; fügen Sie -P für fortsetzbare Übertragungen hinzu.
  • Führen Sie immer einen Trockenlauf mit -n durch, bevor Sie --delete zu einem neuen Ziel hinzufügen.
  • --link-dest erstellt speichereffiziente Hard-Link-Snapshots — die Grundlage professioneller Rotationsschemata.
  • Schränken Sie Backup-SSH-Schlüssel in authorized_keys mit einem erzwungenen Befehl ein, um den Schadenradius zu begrenzen.
  • Bevorzugen Sie systemd-Timer gegenüber cron für automatisierte Backups — bessere Protokollierung und Behandlung verpasster Läufe.
  • Exit-Code 24 ist bei aktiven Systemen normal; behandeln Sie ihn in Skripten als Erfolg.
  • Führen Sie rsync --stats aus und protokollieren Sie die Ausgabe, um stille Backup-Fehler zu erkennen, bevor Sie wiederherstellen müssen.

Verwandte Artikel