Wie man mit Rsync lokale und entfernte Verzeichnisse synchronisiert

Einführung

Rsync, was für Remote Sync steht, ist ein Werkzeug zur synchronen Dateiübertragung, sowohl lokal als auch über das Netzwerk. Es verwendet einen Algorithmus, um die Datenmenge zu minimieren, die kopiert werden muss, indem es nur die Teile von Dateien verschiebt, die sich geändert haben.

In diesem Tutorial werden wir Rsync definieren, die Syntax bei Verwendung von rsync überprüfen, erklären, wie man Rsync verwendet, um mit einem entfernten System zu synchronisieren, und andere Optionen, die Ihnen zur Verfügung stehen.

Veröffentlichen Sie Ihre Frontend-Anwendungen von GitHub mit DigitalOcean App Platform . Lassen Sie DigitalOcean Ihre App skalieren.

Voraussetzungen

Um den Umgang mit rsync zum Synchronisieren von Dateien zwischen einem lokalen und einem entfernten System zu üben, benötigen Sie zwei Maschinen, die als Ihr lokaler Computer und Ihre entfernte Maschine fungieren. Diese beiden Maschinen können virtuelle private Server, virtuelle Maschinen, Container oder persönliche Computer sein, solange sie ordnungsgemäß konfiguriert wurden.

Wenn Sie vorhaben, dieser Anleitung mit Servern zu folgen, wäre es ratsam, sie mit administrativen Benutzern einzurichten und auf jedem von ihnen eine Firewall zu konfigurieren. Um diese Server einzurichten, folgen Sie unserer Anleitung zur Initialkonfiguration des Servers.

Unabhängig davon, welche Art von Maschinen Sie verwenden, um diesem Tutorial zu folgen, müssen Sie auf beiden SSH-Schlüssel erstellt haben. Kopieren Sie dann den öffentlichen Schlüssel jedes Servers in die Datei authorized_keys des anderen Servers, wie in Schritt 2 dieser Anleitung beschrieben.

Diese Anleitung wurde auf Maschinen mit Ubuntu 20.04 validiert, obwohl sie im Allgemeinen mit jedem Computer funktionieren sollte, der ein auf Linux basierendes Betriebssystem mit rsync installiert hat.

Definition von Rsync

Rsync ist ein sehr flexibles netzwerkfähiges Synchronisierungstool. Aufgrund seiner Allgegenwärtigkeit auf Linux- und Unix-ähnlichen Systemen und seiner Beliebtheit als Werkzeug für Systemskripte ist es in den meisten Linux-Distributionen standardmäßig enthalten.

Verständnis der Rsync-Syntax

Die Syntax für rsync funktioniert ähnlich wie bei anderen Tools wie ssh, scp und cp.

Zuerst wechseln Sie in Ihr Home-Verzeichnis, indem Sie folgenden Befehl ausführen:

  1. cd ~

Erstellen Sie dann ein Testverzeichnis:

  1. mkdir dir1

Erstellen Sie ein weiteres Testverzeichnis:

  1. mkdir dir2

Fügen Sie nun einige Testdateien hinzu:

  1. touch dir1/file{1..100}

Es gibt jetzt ein Verzeichnis namens dir1 mit 100 leeren Dateien darin. Bestätigen Sie dies, indem Sie die Dateien auflisten:

  1. ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

Sie haben auch ein leeres Verzeichnis namens dir2. Um den Inhalt von dir1 mit dir2 auf demselben System zu synchronisieren, führen Sie rsync aus und verwenden das -r-Flag, das für „rekursiv“ steht und für die Verzeichnissynchronisierung erforderlich ist:

  1. rsync -r dir1/ dir2

Eine andere Option ist die Verwendung des -a-Flags, das ein Kombinationsflag ist und für „Archiv“ steht. Dieses Flag synchronisiert rekursiv und erhält symbolische Links, spezielle und Gerätedateien, Änderungszeiten, Gruppen, Besitzer und Berechtigungen. Es wird häufiger verwendet als -r und ist das empfohlene Flag. Führen Sie denselben Befehl wie im vorherigen Beispiel aus, dieses Mal mit dem -a-Flag:

  1. rsync -a dir1/ dir2

Bitte beachten Sie, dass ein abschließender Schrägstrich (/) am Ende des ersten Arguments in der Syntax der beiden vorherigen Befehle vorhanden ist und hier hervorgehoben wird:

  1. rsync -a dir1/ dir2

Dieser abschließende Schrägstrich kennzeichnet den Inhalt von dir1. Ohne den abschließenden Schrägstrich würde dir1 einschließlich des Verzeichnisses in dir2 platziert werden. Das Ergebnis würde eine Hierarchie wie folgt erstellen:

~/dir2/dir1/[files]

Ein weiterer Tipp ist, deine Argumente vor der Ausführung eines rsync-Befehls zu überprüfen. Rsync bietet eine Methode dafür, indem du die Optionen -n oder --dry-run übergibst. Die -v-Flag, was „verbose“ bedeutet, ist auch notwendig, um die entsprechende Ausgabe zu erhalten. Du kombinierst die a, n und v-Flags im folgenden Befehl:

  1. rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

Jetzt vergleiche diese Ausgabe mit der, die du erhältst, wenn du den abschließenden Schrägstrich entfernst, wie im Folgenden:

  1. rsync -anv dir1 dir2
Output
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .

Diese Ausgabe zeigt nun, dass das Verzeichnis selbst übertragen wurde, anstatt nur die Dateien innerhalb des Verzeichnisses.

Verwenden von Rsync zum Synchronisieren mit einem Remote-System

Um rsync zum Synchronisieren mit einem Remote-System zu verwenden, benötigst du lediglich konfigurierten SSH-Zugriff zwischen deinen lokalen und Remote-Maschinen sowie rsync auf beiden Systemen installiert. Sobald der SSH-Zugriff zwischen den beiden Maschinen verifiziert ist, kannst du den Ordner dir1 aus dem vorherigen Abschnitt mit einer Remote-Maschine synchronisieren, indem du die folgende Syntax verwendest. Bitte beachte in diesem Fall, dass du das tatsächliche Verzeichnis übertragen möchtest, daher lässt du den abschließenden Schrägstrich weg:

  1. rsync -a ~/dir1 username@remote_host:destination_directory

Dieser Vorgang wird als eine Push-Operation bezeichnet, weil er ein Verzeichnis vom lokalen System auf ein entferntes System „drückt“. Die gegenteilige Operation ist Pull und wird verwendet, um ein entferntes Verzeichnis mit dem lokalen System zu synchronisieren. Wenn das Verzeichnis dir1 auf dem entfernten System anstelle Ihres lokalen Systems wäre, wäre die Syntax wie folgt:

  1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

Wie bei cp und ähnlichen Tools ist die Quelle immer das erste Argument und das Ziel immer das zweite.

Verwendung anderer Rsync-Optionen

Rsync bietet viele Optionen zur Änderung des Standardverhaltens des Dienstprogramms, wie die Flag-Optionen, die Sie im vorherigen Abschnitt kennengelernt haben.

Wenn Sie Dateien übertragen, die noch nicht komprimiert wurden, wie Textdateien, können Sie den Netzwerktransfer durch Hinzufügen von Kompression mit der Option -z reduzieren:

  1. rsync -az source destination

Die Flagge -P ist ebenfalls hilfreich. Sie kombiniert die Flaggen --progress und --partial. Die erste Flagge bietet eine Fortschrittsanzeige für die Übertragungen, und die zweite Flagge ermöglicht es Ihnen, unterbrochene Übertragungen fortzusetzen:

  1. rsync -azP source destination
Output
sending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .

Wenn Sie den Befehl erneut ausführen, erhalten Sie eine verkürzte Ausgabe, da keine Änderungen vorgenommen wurden. Dies verdeutlicht die Fähigkeit von Rsync, Änderungszeiten zu verwenden, um festzustellen, ob Änderungen vorgenommen wurden:

  1. rsync -azP source destination
Output
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00

Angenommen, Sie würden die Änderungszeit einiger Dateien mit einem Befehl wie dem folgenden aktualisieren:

  1. touch dir1/file{1..10}

Dann, wenn Sie rsync erneut mit -azP ausführen würden, werden Sie in der Ausgabe sehen, wie Rsync intelligent nur die geänderten Dateien erneut kopiert:

  1. rsync -azP source destination
Output
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .

Um zwei Verzeichnisse wirklich synchron zu halten, ist es notwendig, Dateien aus dem Zielverzeichnis zu löschen, wenn sie aus der Quelle entfernt werden. Standardmäßig löscht rsync nichts aus dem Zielverzeichnis.

Sie können dieses Verhalten mit der Option --delete ändern. Bevor Sie diese Option verwenden, können Sie -n, die Option --dry-run, verwenden, um einen Test durchzuführen, um Datenverlust zu vermeiden:

  1. rsync -an --delete source destination

Wenn Sie bestimmte Dateien oder Verzeichnisse ausschließen möchten, die sich in einem zu synchronisierenden Verzeichnis befinden, können Sie dies tun, indem Sie sie in einer durch Kommas getrennten Liste nach der Option --exclude= angeben:

  1. rsync -a --exclude=pattern_to_exclude source destination

Wenn Sie ein bestimmtes Muster zum Ausschließen haben, können Sie diesen Ausschluss für Dateien, die zu einem anderen Muster passen, mit der Option --include= überschreiben:

  1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

Zuletzt kann die Option --backup von Rsync verwendet werden, um Backups wichtiger Dateien zu speichern. Sie wird in Verbindung mit der Option --backup-dir verwendet, die das Verzeichnis angibt, in dem die Backup-Dateien gespeichert werden sollen:

  1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

Fazit

Rsync kann Dateiübertragungen über Netzwerkverbindungen optimieren und die Robustheit der lokalen Verzeichnissynchronisierung erhöhen. Die Flexibilität von Rsync macht es zu einer guten Option für viele verschiedene Dateioperationen.

A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories