Rsync (Remote Sync) ist ein Synchronisationstool zum Kopieren von Dateien und Verzeichnissen in einem System oder zwischen Systemen. Der größte Vorteil von rsync besteht darin, dass es nur die geänderten Dateien kopiert und somit den CPU-Verbrauch reduziert und beim Kopieren von Dateien Bandbreite und Zeit spart.
Vorteile von rsync gegenüber scp
Ich habe Ihnen bereits einige praktische Beispiele für den scp-Befehl gezeigt. scp, kurz für Secure Copy, wird auch zum Kopieren von Dateien zwischen zwei entfernten Systemen über ssh verwendet.
Aber rsync hat gewisse Vorteile gegenüber scp, die es zu einer besseren Wahl machen.
- rsync kopiert nur die Dateien, die geändert werden, während scp jede Datei kopiert und sie bei Bedarf überschreibt. So ist eine bessere Geschwindigkeit in rsync garantiert.
- rsync kann auch ohne Verschlüsselung arbeiten. Dadurch kann der Overhead reduziert werden. Dies sollte jedoch berücksichtigt werden, wenn kein Sicherheitsrisiko bei der Übertragung ohne Verschlüsselung besteht.
- Man kann eine unvollständige Übertragung in rsync fortsetzen, während scp dies nicht zulässt.
Wenn Sie rsync nicht haben installiert haben, können Sie es mit Ihrem Paketmanager installieren.
In Ubuntu und Debian können Sie rsync mit dem folgenden Befehl installieren.
sudo apt install rsync
Praktische Beispiele des rsync-Befehls unter Linux
Die rsync Befehl hat die folgende Struktur
rsync [OPTIONS] Source Destination
Wo Quelle und Ziel können lokale Pfade oder entfernte Pfade im Format [email protected]:path/to/file sein
Sehen wir uns anhand einiger hilfreicher Beispiele an, wie der Befehl rsync verwendet wird.
🗒️Wenn Sie ein Verzeichnis A haben, verwenden Sie „A“, um es zu erwähnen, nicht „A/“. Die Verwendung von A/ bezieht sich auf alle Dateien in Verzeichnis A und nicht auf Verzeichnis A selbst. Das Kopieren von A erstellt also ein neues Verzeichnis im Ziel und kopiert dann die Dateien in A. Aber das Kopieren von A/ kopiert nur die Dateien in A in das Ziel.1. Lokale Dateien synchronisieren [Einwegsynchronisierung]
Um lokale Dateien aus dem Verzeichnis A zu kopieren in Backup-A-dir ,
rsync A/ Backup-A-dir/
Dieser Befehl kopiert die Dateien (falls Änderungen gefunden wurden) von Verzeichnis A in Backup-A-dir. Dadurch werden keine zusätzlichen Dateien in Backup-A-dir nach A kopiert, die sich anfangs nicht in A befinden. Aus diesem Grund wird es als unidirektionale Synchronisierung bezeichnet.
2. Remote-Dateien synchronisieren [Einweg-Synchronisation]
Um Dateien zwischen einem Remote-System und einem lokalen System zu synchronisieren, ist der Befehl ähnlich. Beachten Sie, dass der Quellspeicherort und der Zielspeicherort entweder lokale Dateisystempfade oder Remotesystem(ssh)-Pfade sein können.
rsync dev/build [email protected]:~/Backup
3. Zwei-Wege-Synchronisierung
Der obige Befehl kopiert die Dateien von der Quelle zum Ziel. Wenn das System jedoch einige zusätzliche Dateien hatte, die sich nicht auf der Quelle befanden, werden diese nicht durch die Einwegsynchronisierung gelöscht. Wenn Sie das möchten, müssen Sie die bidirektionale Synchronisierung verwenden.
Um beide Endpunkte (Verzeichnisse oder Dateien) im selben Zustand mit denselben Dateien und ohne Extras auf beiden Seiten zu halten, hängen Sie einfach das –delete an Option zum ursprünglichen Befehl.
rsync A/ Backup-A-dir/ --delete
4. Quelldateien nach dem Kopieren löschen
Wenn Sie die Dateien in der Quelle löschen müssen, sobald die Übertragung abgeschlossen ist, –remove-source-files Option sollte sich als nützlich erweisen.
rsync A/ Backup-A-dir/ --remove-source-files
Sie sollten mit dem obigen Befehl vorsichtig sein. Sie sollten die Quelle nur löschen, wenn genügend Kopien erstellt wurden und die Daten in der Quelle nicht mehr benötigt werden.
5. Dateien einschließen und ausschließen
Wenn Sie Dateien übertragen müssen (oder nicht müssen), deren Name einem Muster entspricht,
–einschließen und –ausschließen Möglichkeit verwendet werden. Jeder Option sollte ein Muster nach dem „=“-Zeichen gegeben werden.
rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py
Der obige Befehl kopiert alle Dateien mit der Erweiterung .py außer denen mit der Erweiterung .tmp.py.
Sie können reguläre Ausdrücke als Muster verwenden. Erfahren Sie hier mehr darüber.
Tipp:Wenn die Liste der Muster für eine der Optionen riesig ist, können Sie sie in einer Datei speichern und ihre Namen an –include-from übergeben und –ausschließen-von Option.
6. rsync über SSH
Wenn Sie die Dateien über SSH übertragen möchten, müssen Sie ssh mit -e angeben Option.
rsync -e ssh A/ [email protected]:~/Backup-A-dir/
Dies ist die am meisten bevorzugte Methode zum Übertragen von Dateien auf ein Remote-System, da es verschlüsselt ist. Zu beachten ist, dass durch die Verschlüsselung ein Overhead entsteht. Daher kann die Übertragung länger dauern als bei einer normalen Übertragung.
Damit dies funktioniert, sollten Sie serverseitig konfigurierte ssh-Anmeldungen aktivieren. Der öffentliche Schlüssel und der private Schlüssel müssen sich ebenfalls in ihren jeweiligen Pfaden befinden.
Um mehr über ssh und seine Einrichtung zu erfahren, lesen Sie diese LinuxHandBook-Artikel über die clientseitige SSH-Konfiguration und die serverseitige SSH-Konfiguration.
7. Ausführlicher Modus
Die meisten Befehle in Linux haben eine ausführliche Option, um die Aktion des Befehls im Terminal zu protokollieren. rsync ist keine Ausnahme.
Übergeben Sie entweder -v Option oder —ausführlich Option, um den Befehl ausführlich darzustellen. Es listet die Aktionen auf, die durchgeführt werden, und ihren Fortschritt. Dies wird beim Debuggen sehr hilfreich sein.
rsync A/ Backup-A-dir/ -v -r
Die Ausgabe ähnelt der untenstehenden
$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00
8. Probelauf – Ausführen, aber nicht kopieren
Falls Sie wissen möchten, welche Dateien kopiert werden, ohne die Übertragung tatsächlich durchzuführen, können Sie –dry-run verwenden ( oder -n )-Option.
Es führt alle Vorgänge wie das normale rsync aus Befehl funktioniert mit Ausnahme des Kopierteils. Es listet die Dateien auf, die kopiert oder gelöscht werden (falls erforderlich) und stoppt kurz vor dem Kopieren.
rsync -v A/ Backup-A-dir/ --dry-run
Was zu
führen wird$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
Beachten Sie, dass Sie -v verwenden müssen Option, um die obige Ausgabe des Trockenlaufbefehls anzuzeigen. Wenn nicht, wird der Probelauf durchgeführt, aber die Ergebnisse werden nicht angezeigt.
9. Fortschritt der Übertragung anzeigen
Wenn Sie den Fortschritt der Übertragung anzeigen möchten, verwenden Sie den –Fortschritt Option.
rsync A/ Backup-A-dir/ --progress
Der obige Befehl zeigt einen Fortschrittsbalken ähnlich dem folgenden:
$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)
10. Daten komprimieren und übertragen
Wenn Sie Netzwerkbandbreite und Zeit sparen möchten, können Sie die zu übertragenden Daten mit -z komprimieren Möglichkeit. Es wird am Zielort automatisch dekomprimiert.
Dieser Trick kann viel Zeit und Kosten für das Netzwerk sparen, wenn die zu übertragenden Daten sehr groß sind. Es sollte bei kleinen Dateien vermieden werden, da der Verarbeitungsaufwand die Gesamtzeit überwiegt.
rsync -z A/ Backup-A-dir/
Beachten Sie, dass man die Verwendung von -z vermeiden sollte Option bei lokalen Übertragungen und kleinen Dateien. Es wird die Dinge unnötig verlangsamen.
11. Kopieren Sie die Dateien und Verzeichnisse rekursiv
Alle oben genannten Befehle kopieren nur Dateien, keine Unterverzeichnisse (dasselbe gilt für jeden Linux-Befehl). Daher werden Dateien in diesen Unterverzeichnissen nicht kopiert. Dies kann durch rekursives Kopieren beseitigt werden.
Um die Dateien und Verzeichnisse rekursiv zu kopieren, -r Option verwendet werden.
rsync -r A/ Backup-A-dir/
12. Metadaten archivieren und aufbewahren
Wenn Sie die symbolischen Links, Zeitstempel, Dateiberechtigungen, Benutzer- und Gruppenbesitz der Dateien beibehalten möchten, -a Option verwendet werden.
rsync -a A/ Backup-A-dir/
Diese Option beinhaltet auch die Funktionalität von -r Möglichkeit. Es kopiert also die Dateien rekursiv und bewahrt die Metadaten der kopierten Dateien.
13. Dateigrößenbeschränkung festlegen
Um die Übertragung großer Dateien zu vermeiden, können Sie mit Hilfe von –max-size eine Dateigrößenbeschränkung festlegen Möglichkeit. Dies hilft Ihnen, die zu kopierende Dateigröße im Auge zu behalten.
rsync --max-size='100K' A/ Backup-A-dir/
14. Bandbreitenlimit festlegen
Wenn Sie Einschränkungen bei der Netzwerkgeschwindigkeit haben, können Sie diese mit Hilfe von –bwlimit festlegen Möglichkeit. bwlimit sollte in kbps ausgedrückt werden .
rsync --bwlimit=100 A/ Backup-A-dir/
15. Download mit rsync fortsetzen
Wenn der Download/die Übertragung unvollständig ist, können Sie den Befehl rsync verwenden, um unvollständige Downloads beizubehalten, sodass die Übertragung beim nächsten Mal fortgesetzt werden kann, wenn derselbe Befehl ausgegeben wird.
Um die Übertragung fortzusetzen, –anhängen Option verwendet werden.
rsync --append A /Backup-A-dir/
Dieser StackExchange-Thread ist eine sehr gute Ressource, um mehr zu diesem Thema zu erfahren.
Alle oben genannten Befehle sind grundlegend und kopieren die Datei in einem einzigen Fluss oder Prozess. Wenn 5 TB Daten vorhanden sind und die Übertragung von 1 TB 2 Stunden dauert, dauert die gesamte Übertragung 10 Stunden. Aber es gibt noch eine andere Möglichkeit, die Übertragung zu beschleunigen
Bonus-Tipp:Rsync/parallele Übertragung beschleunigen
parallel ist ein GNU-Dienstprogramm Wird verwendet, um Jobs parallel auszuführen. Rsync kann einfach mit rsync gekoppelt werden .
Installieren Sie GNU parallel im Ubuntu/Debian-System mit
sudo apt install parallel
Bevor wir weitermachen, lassen Sie uns verstehen, wie parallel funktioniert. Betrachten wir eine Analogie.
Angenommen, es gibt 1000 Eier und 100 Körbe mit jeweils einer Drohne. Die Aufgabe besteht darin, es an die Kunden zu liefern. Der Manager weist jedem Korb 10 Eier zu und befiehlt der Drohne, sie zu liefern. Jede Drohne führt eine Operation aus (in unserem Fall rsync-Prozess von 10 Dateien). Der Manager überwacht alle Drohnen. Beachten Sie, dass Drohnen niemals wissen werden, dass es parallel andere Jobs gibt. Nur der Manager tut es.
Ebenso führt rsync die Übertragung von Dateien wie eine Drohne aus. fungiert parallel als Manager.
parallel teilt die zu sendenden Dateien auf und erzeugt eine bestimmte Anzahl von rsync-Prozessen mit jeweils einer anderen Liste von Dateien. parallel verwaltet nur den gesamten Prozess. rsync hat keine Kenntnis von anderen Prozessen parallel noch hat es eine Funktionalität zur parallelen Übertragung. Parallel bietet parallele Übertragung durch Bündelung von Aufgaben.
Der parallele Befehl besteht also aus zwei Teilen, die geleitet werden. Eines sind Argumente (Eier/Dateien) und das andere ist der parallele Befehl (Manager).
ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/
Im obigen Befehl fungiert jede Datei/jedes Verzeichnis in der Ausgabe als Ergebnis des ersten Befehls vor dem Symbol „|“ als Argument. {} repräsentiert das Argument von links im parallelen Befehl.
-j n – Es wird verwendet, um eine Anzahl von n Jobs oder Arbeitern einzustellen. In unserem Fall ist n 20.
Der nächste Teil ist der übliche rsync-Befehl für jedes Argument.
Nachdem die Befehle generiert wurden, werden sie in 20 Prozesse gebündelt und parallel ausgeführt.
Beachten Sie, dass Sie dem obigen rsync-Befehl beliebige Optionen hinzufügen können, wie Sie es ohne parallel tun würden. Fügen Sie einfach die rsync-Optionen (wie -z, -a, -e ssh) nach dem Wort rsync im obigen Befehl hinzu.
Wenn Sie mehr über Parallel erfahren möchten, lesen Sie diese Seite.
Häufige Fehler mit rsync
Bei der Verwendung von rsync können Fehler auftreten. Nachfolgend finden Sie einige häufige mit Tipps zur Fehlerbehebung.
1. rsync-Berechtigung verweigert
Dies ist ein Fehler, der auftreten kann, wenn Sie Pfade verwenden, für die Sie keine entsprechenden Rechte haben. Zum Beispiel:
rsync B/ /home/
Der obige Befehl verursacht den Fehler „Berechtigung verweigert“, wenn Sie keine Schreibberechtigungen für /home/ haben (normale Benutzer tun dies normalerweise nicht)
2. rsync konnte keine Zeiten für
festlegen Dies geschieht, wenn das Dateisystem die Änderungszeiten für Dateien und Verzeichnisse nicht verarbeiten kann. Auf dieser Seite erfahren Sie mehr darüber.
Ich hoffe, Sie haben in diesem Artikel einige gute Beispiele für Synchronisierungsbefehle gelernt. Wenn Sie Vorschläge oder Kommentare haben, können Sie diese gerne unten hinterlassen.