rsync
Was rsync anders macht
Abschnitt betitelt „Was rsync anders macht“cp -a und scp -r kopieren alles, jedes Mal. rsync vergleicht Quelle und Ziel und überträgt nur, was sich geändert hat, bei grossen Dateien sogar nur die geänderten Blöcke. Das erste Spiegeln eines Verzeichnisses dauert gleich lang wie mit cp, jedes weitere nur Sekunden. Darum ist rsync das Werkzeug für Backups über das Netz und für Migrationen: Erst im laufenden Betrieb in Ruhe alles kopieren, dann den alten Server stoppen und in wenigen Minuten den Rest nachziehen.
Die Grundform:
rsync [optionen] quelle zielQuelle oder Ziel (nicht beide) dürfen auf einem anderen Rechner liegen, geschrieben als host:pfad. Die Verbindung läuft dann über SSH.
Die wichtigsten Optionen
Abschnitt betitelt „Die wichtigsten Optionen“| Option | Bedeutung |
|---|---|
-a |
archive: rekursiv, mit Rechten, Besitzer, Zeitstempeln und Symlinks. Praktisch immer |
-v |
zeigt, welche Dateien übertragen werden |
-n |
dry run: nur zeigen, nichts tun. Vor jedem --delete |
--delete |
löscht im Ziel, was in der Quelle nicht mehr existiert (echter Spiegel) |
--exclude=MUSTER |
auslassen, mehrfach möglich |
-z |
komprimiert bei der Übertragung, lohnt sich über langsame Leitungen |
-h, --progress |
lesbare Grössen, Fortschritt bei grossen Dateien |
--link-dest=VERZ |
unveränderte Dateien als Hardlink auf VERZ anlegen statt kopieren |
Der Schrägstrich am Ende
Abschnitt betitelt „Der Schrägstrich am Ende“Die Stolperfalle Nummer eins. Ob die Quelle mit / endet, entscheidet, ob das Verzeichnis selbst oder nur sein Inhalt kopiert wird:
rsync -av quelle/ ziel/ # Inhalt von quelle landet direkt in ziel/rsync -av quelle ziel/ # ergibt ziel/quelle/...Merkhilfe: quelle/ heisst «was drin ist», quelle heisst «das Verzeichnis». Beim Ziel spielt der Schrägstrich keine Rolle.
Hands-on:
- Testdaten anlegen und beide Varianten vergleichen:
lokale VM mkdir -p ~/rs/quelleecho eins > ~/rs/quelle/a.txtecho zwei > ~/rs/quelle/b.txtrsync -av ~/rs/quelle/ ~/rs/ziel1/rsync -av ~/rs/quelle ~/rs/ziel2/tree ~/rs - Noch einmal ausführen. Was erwartest du? Die Ausgabe zeigt nur noch
sending incremental file listund die Statistik, keine Datei wird übertragen:lokale VM rsync -av ~/rs/quelle/ ~/rs/ziel1/ - Datei in der Quelle löschen und spiegeln, erst als Trockenlauf, dann echt:
lokale VM rm ~/rs/quelle/b.txtrsync -avn --delete ~/rs/quelle/ ~/rs/ziel1/rsync -av --delete ~/rs/quelle/ ~/rs/ziel1/ls ~/rs/ziel1/
Über SSH
Abschnitt betitelt „Über SSH“Lokale Syntax, entfernte Seite als host:pfad. Mit dem Alias server aus Teil 1 und dem hinterlegten Schlüssel braucht es kein Passwort:
ssh server mkdir -p backuprsync -av -e ssh ~/rs/quelle/ server:backup/quelle/ssh server ls -l backup/quelle-e ssh ist heute der Standard und kann weggelassen werden. Du brauchst die Option, wenn SSH Zusatzargumente bekommt, etwa -e 'ssh -p 2222'. Die Gegenrichtung (vom Server holen) ist dieselbe Zeile mit vertauschten Seiten:
rsync -av server:/etc/ssh/ ~/rs/server-ssh-config/Für Dateien, die nur root lesen darf, kombinierst du rsync mit sudo auf dem Server: rsync -av --rsync-path='sudo rsync' server:/var/log/ ~/rs/logs/ (setzt voraus, dass sudo ohne Passwort erlaubt ist, was auf deiner Server-VM standardmässig nicht der Fall ist; eine Alternative ist ein eigener Backup-Benutzer mit gezielter sudo-Regel).
Vollsicherungen mit –link-dest
Abschnitt betitelt „Vollsicherungen mit –link-dest“Ein Spiegel ist kein Backup: Löscht du heute eine Datei, ist sie nach dem nächsten rsync --delete auch im Spiegel weg. Du willst Stände: einen pro Tag, jeder vollständig, aber ohne jeden Tag alles neu zu kopieren.
Genau das leistet --link-dest. Du gibst den vorherigen Stand an. Für jede Datei, die sich seit dann nicht geändert hat, legt rsync im neuen Stand einen Hardlink auf die alte Datei an statt einer Kopie. Hardlinks kennst du aus Modul 4: zwei Verzeichniseinträge, ein Inode, einmal Speicherplatz. Nur geänderte Dateien werden wirklich kopiert.
Hands-on:
- Erster Stand (eine normale Kopie):
lokale VM mkdir -p ~/rs/snaprsync -av ~/rs/quelle/ ~/rs/snap/1/ - Etwas ändern, zweiter Stand mit Bezug auf den ersten.
--link-destbraucht einen absoluten Pfad oder einen relativ zum Ziel:lokale VM echo drei > ~/rs/quelle/c.txtrsync -av --link-dest="$HOME/rs/snap/1" ~/rs/quelle/ ~/rs/snap/2/ - Kontrolle.
ls -lizeigt Inode-Nummer und Link-Zähler.a.txthat in beiden Ständen denselben Inode und den Zähler 2,c.txtgibt es nur in Stand 2:lokale VM ls -li ~/rs/snap/1/ ~/rs/snap/2/du -sh ~/rs/snap/* - Jetzt
a.txtändern und einen dritten Stand anlegen. Was erwartest du beils -lifüra.txt?lokale VM echo "eins, geändert" > ~/rs/quelle/a.txtrsync -av --link-dest="$HOME/rs/snap/2" ~/rs/quelle/ ~/rs/snap/3/ls -li ~/rs/snap/*/a.txt
a.txt in Stand 3 ist eine neue Datei mit eigenem Inode, die Stände 1 und 2 behalten die alte Version. Jeder Stand sieht aus wie eine Vollsicherung und kann unabhängig gelöscht werden, der Platzbedarf wächst nur um die Änderungen. In einem Skript nennst du die Stände nach Datum (2026-11-05) und zeigst mit --link-dest auf den jüngsten vorhandenen.
rsync oder scp?
Abschnitt betitelt „rsync oder scp?“scp |
rsync |
|
|---|---|---|
| Überträgt | immer alles | nur Unterschiede |
| Abbruch | von vorn beginnen | weitermachen (--partial, -P) |
| Spiegeln mit Löschen | nein | --delete |
| Trockenlauf, Ausschlüsse | nein | -n, --exclude |
| Installiert | immer (gehört zu SSH) | meist, sonst apt install rsync auf beiden Seiten |
Faustregel: eine Datei schnell rüber, scp. Ein Verzeichnis, wiederholt oder gross, rsync.
Lösung anzeigen
script labs/linux/10-remote-backup/rsync.txtssh server mkdir -p backup/spiegel backup/staendersync -av ~/rs/quelle/ server:backup/spiegel/rm ~/rs/quelle/c.txtrsync -avn --delete ~/rs/quelle/ server:backup/spiegel/rsync -av --delete ~/rs/quelle/ server:backup/spiegel/rsync -av ~/rs/quelle/ server:backup/staende/1/echo geaendert >> ~/rs/quelle/a.txtrsync -av --link-dest=../1 ~/rs/quelle/ server:backup/staende/2/ssh server ls -li backup/staende/1 backup/staende/2# 4: rsync legt ~/backup/daten/ an und löscht alle anderen Einträge in ~/backup/,# weil sie in der Quelle nicht vorkommen. Darum zuerst mit -n prüfen.exitSelbstcheck · 4 Fragen
Weiterführend
Abschnitt betitelt „Weiterführend“man rsync, Abschnitt «USAGE» mit den Beispielen zum Schrägstrich- rsync-Artikel im ubuntuusers-Wiki