Rsync: Dateiübertragung und Synchronisation unter Linux
Rsync ist ein effizientes Tool zur Dateiübertragung und -synchronisation zwischen verschiedenen Systemen. Es wird häufig für Backups, Datei-Spiegelungen und das Aktualisieren von Dateien innerhalb lokaler Verzeichnisse oder zwischen entfernten Servern verwendet. Rsync optimiert den Datentransfer, indem es nur Unterschiede zwischen Quell- und Zieldateien überträgt. Aufgrund seiner Geschwindigkeit, Flexibilität und vielseitigen Optionen ist es eine bevorzugte Wahl für Systemadministratoren und Entwickler.
Voraussetzungen
Stellen Sie sicher, dass Sie Zugriff auf eine Linux-Workstation mit nicht-root sudo-Rechten haben und genügend Speicherplatz für große Dateiübertragungen vorhanden ist.
Installation von Rsync unter Linux
Rsync ist in den offiziellen Repositories der meisten Linux-Distributionen verfügbar und oft bereits vorinstalliert. Die folgenden Befehle zeigen, wie Sie Rsync abhängig von Ihrer Distribution installieren können.
Rsync mit APT installieren
sudo apt install rsync
Installation von Rsync mit PKG
sudo pkg install rsync
Rsync mit Pacman installieren
sudo pacman -S rsync
Installation von Rsync mit DNF
sudo dnf install rsync
Rsync mit YUM installieren
sudo yum install rsync
Rsync-Befehlsstruktur
Die folgende Syntax wird in Rsync verwendet:
rsync [OPTION] SRC DEST
Die Rsync-Befehle setzen sich aus diesen Elementen zusammen:
- [OPTION]: Definiert verschiedene Flags oder Parameter zur Steuerung des Synchronisationsprozesses.
- SRC: Gibt die Dateien und Verzeichnisse an, die synchronisiert werden sollen.
- Für eine Übertragung über SSH nutzen Sie
USER@HOST:QUELLE
als Quellpfad. - DEST: Bestimmt das Zielverzeichnis oder die Zieldatei für die Synchronisation.
- Für eine Remote-Synchronisation über SSH geben Sie
USER@HOST:ZIEL
als Zielpfad an.
Rsync-Befehlsoptionen
Hier sind einige der am häufigsten genutzten Rsync-Optionen und ihre Bedeutungen:
Option | Langform | Kurzform | Beschreibung |
---|---|---|---|
Hilfe | --help |
-h |
Zeigt die Rsync-Hilfe an. |
Detailgrad | --verbose |
-v |
Erhöht den Detailgrad der Ausgabe. |
--quiet |
-q |
Unterdrückt nicht-fehlermeldende Ausgaben. | |
Dateiauswahl | --archive |
-a |
Aktiviert den Archivmodus, um Symlinks, Berechtigungen und weitere Attribute beizubehalten. |
--recursive |
-r |
Kopiert Verzeichnisse und deren Inhalte rekursiv. | |
--relative |
-R |
Behält relative Pfade bei. | |
Aktualisierung | --update |
-u |
Überspringt Dateien, die im Zielverzeichnis neuer sind. |
--inplace |
Aktualisiert Zieldateien direkt, ohne temporäre Kopien anzulegen. | ||
Backups | --backup |
-b |
Erstellt Backups von Dateien, bevor sie überschrieben werden. |
--backup-dir=VERZ |
Speichert Backups in einem bestimmten Verzeichnis. | ||
Symbolische Links | --links |
-l |
Kopiert symbolische Links als solche. |
--copy-links |
-L |
Ersetzt symbolische Links durch die Dateien oder Verzeichnisse, auf die sie verweisen. | |
Berechtigungen | --perms |
-p |
Behält Datei-Berechtigungen während der Übertragung bei. |
Zeitstempel | --times |
-t |
Behält ursprüngliche Änderungszeiten bei. |
Entfernen | --delete |
Löscht überflüssige Dateien im Zielverzeichnis, die nicht in der Quelle existieren. | |
--delete-excluded |
Entfernt auch Dateien, die durch Ausschlussregeln (excludes) gefiltert wurden. | ||
Testlauf | --dry-run |
-n |
Simuliert den Transfer, ohne Änderungen vorzunehmen. |
Remote Shell | --rsh=BEFEHL |
-e |
Legt eine Remote-Shell für die Verbindung fest. |
Größenkontrolle | --max-size=GRÖSSE |
Überträgt keine Dateien, die größer als die angegebene Größe sind. | |
--min-size=GRÖSSE |
Ignoriert Dateien, die kleiner als die angegebene Größe sind. | ||
Teilübertragungen | --partial |
Behält unvollständige Übertragungen bei, um sie später fortzusetzen. | |
Dateifilterung | --exclude=MUSTER |
Schließt Dateien aus, die dem angegebenen Muster entsprechen. | |
--include=MUSTER |
Sorgt dafür, dass bestimmte Dateien trotz vorheriger Filterregeln einbezogen werden. | ||
Ausgabeformat | --progress |
Zeigt den Fortschritt der Übertragung an. | |
-P |
Entspricht einer Kombination aus --partial und --progress . |
||
--human-readable |
-h |
Formatiert die Ausgabe in einer leicht verständlichen Weise. | |
Kompression | --compress |
-z |
Komprimiert die Dateiübertragung. |
IP-Version | --ipv4 |
-4 |
Verwendet ausschließlich IPv4. |
--ipv6 |
-6 |
Verwendet ausschließlich IPv6. |
Lokale Dateien mit Rsync übertragen
Die folgenden Schritte zeigen, wie Sie Dateien mit Rsync zwischen Verzeichnissen verschieben können.
Um die Dateien file1
, file2
und file3
in ein Verzeichnis namens dest
zu kopieren, verwenden Sie den Rsync-Befehl. Das letzte Argument in Rsync gibt immer das Ziel an, daher sollte der Befehl sorgfältig verwendet werden, um unbeabsichtigte Überschreibungen zu vermeiden.
rsync file1 file2 file3 dest
- file1 file2 file3: Dateien, die kopiert werden.
- dest: Zielverzeichnis, in dem die Dateien gespeichert werden.
Überprüfen Sie die Dateiübertragung mit folgendem Befehl:
ls dest/
Erwartete Ausgabe:
./dest/file1 ./dest/file2 ./dest/file3
Lokale Verzeichnisse kopieren
Standardmäßig kopiert Rsync nicht automatisch alle Inhalte eines Verzeichnisses. Um Verzeichnisse rekursiv zu kopieren und dabei Attribute wie Zeitstempel, Berechtigungen und symbolische Links zu erhalten, verwenden Sie die Option -a
(Archivmodus).
Kopieren Sie das zuvor erstellte dest
-Verzeichnis:
rsync -a dest/ dest-copy
- -a: Aktiviert den Archivmodus, um die Dateiattribute zu erhalten.
- dest/: Quellverzeichnis (Ein abschließender
/
bedeutet, dass nur der Inhalt kopiert wird, nicht das Verzeichnis selbst). - dest-copy: Zielverzeichnis.
Überprüfen Sie das kopierte Verzeichnis mit:
ls dest-copy/
Erwartete Ausgabe:
./dest-copy/file1 ./dest-copy/file2 ./dest-copy/file3
Dateien oder Verzeichnisse in Rsync ausschließen
Mit der Option --exclude
in Rsync können bestimmte Dateien oder Verzeichnisse von der Synchronisation ausgeschlossen werden.
Das folgende Beispiel kopiert alle Inhalte des aktuellen Verzeichnisses, jedoch ohne file2
sowie alle Verzeichnisse, die mit dest
beginnen:
rsync -a --exclude 'file2' --exclude 'dest*' . output
- -a: Aktiviert den Archivmodus.
- –exclude ‘file2’: Schließt Dateien mit dem Namen
file2
aus. - –exclude ‘dest*’: Ignoriert alle Dateien oder Verzeichnisse, die mit
dest
beginnen. - .: Gibt das aktuelle Verzeichnis als Quelle an.
- output: Zielverzeichnis.
Dateien mit Rsync auf einen Remote-Server übertragen
Folgen Sie diesen Schritten, um Dateien und Verzeichnisse über SSH mit einem entfernten System zu synchronisieren.
Dateien auf eine Remote-Maschine übertragen
Nutzen Sie den folgenden Rsync-Befehl, um Dateien und Verzeichnisse auf einen entfernten Server zu kopieren:
rsync -hazvP --delete --stats . user@192.0.2.1:synced_from_local
- -h: Gibt Dateigrößen in einem lesbaren Format aus.
- -a: Aktiviert den Archivmodus, um Dateiattribute beizubehalten.
- -z: Komprimiert die Dateien während der Übertragung, um die Geschwindigkeit zu erhöhen.
- -v: Aktiviert den ausführlichen Modus für detaillierte Ausgaben.
- -P: Zeigt Fortschrittsanzeigen an und setzt unterbrochene Übertragungen fort.
- –delete: Entfernt Dateien im Zielverzeichnis, die nicht mehr in der Quelle existieren.
- –stats: Zeigt eine detaillierte Statistik zur Übertragung an.
- .: Gibt das aktuelle Verzeichnis als Quelle an.
- user@192.0.2.1:synced_from_local: Definiert die Zielmaschine für die Synchronisation:
- user: Benutzername für den Zugriff auf die Remote-Maschine.
- 192.0.2.1: IP-Adresse der Remote-Maschine.
- synced_from_local: Zielverzeichnis auf dem Remote-Server.
Verbindung zur Remote-Maschine
Nach der Synchronisation können Sie sich per SSH mit der Remote-Maschine verbinden, um die übertragenen Dateien zu überprüfen:
ssh user@192.0.2.1
Überprüfung der synchronisierten Dateien
Führen Sie auf der Remote-Maschine den folgenden Befehl aus, um zu überprüfen, ob alle Dateien erfolgreich übertragen wurden:
ls synced_from_local/
Erwartete Verzeichnisstruktur nach der Synchronisation:
synced_from_local/dest-copy/file1 synced_from_local/dest-copy/file2 synced_from_local/dest-copy/file3 synced_from_local/dest/file1 synced_from_local/dest/file2 synced_from_local/dest/file3 synced_from_local/file1 synced_from_local/file2 synced_from_local/file3 synced_from_local/output/file1 synced_from_local/output/file3
Vorsicht beim Einsatz von --delete
Seien Sie vorsichtig bei der Verwendung des --delete
-Flags, da es Dateien am Zielort unwiderruflich entfernt, wenn sie in der Quelle nicht mehr vorhanden sind. Um unbeabsichtigten Datenverlust zu vermeiden, sollte stets ein Testlauf durchgeführt werden:
rsync -a --delete --dry-run SRC DEST
Fazit
In diesem Leitfaden haben Sie Rsync installiert, gelernt, wie man Dateien sowohl lokal als auch auf eine Remote-Maschine synchronisiert, und wichtige Optionen wie --exclude
und den Archivmodus verwendet. Überprüfen Sie Ihre Rsync-Befehle sorgfältig, insbesondere bei Verwendung von --delete
. Weitere Informationen finden Sie in der Rsync-Dokumentation:
man rsync