Wie man mit Rsync lokale und entfernte Verzeichnisse synchronisiert

Einführung

Rsync, was für „remote sync“ steht, ist ein Tool zur Synchronisierung von lokalen und entfernten Dateien. Es verwendet einen Algorithmus, der die Menge der kopierten Daten minimiert, indem er nur die Teile der Dateien verschiebt, die sich geändert haben.

In dieser Anleitung werden wir die grundlegende Verwendung dieses leistungsstarken Dienstprogramms behandeln.

Was ist Rsync?

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

Grundlegende Syntax

Die grundlegende Syntax von rsync ist sehr einfach und funktioniert ähnlich wie bei ssh, scp und cp.

Wir werden zwei Testverzeichnisse und einige Testdateien mit den folgenden Befehlen erstellen:

  • cd ~
  • mkdir dir1
  • mkdir dir2
  • touch dir1/file{1..100}

Wir haben jetzt ein Verzeichnis namens dir1 mit 100 leeren Dateien darin.

  • ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

Wir haben auch ein leeres Verzeichnis namens dir2.

Um den Inhalt von dir1 mit dir2 auf demselben System zu synchronisieren, geben Sie ein:

  • rsync -r dir1/ dir2

Die Option -r bedeutet rekursiv, was für die Synchronisierung von Verzeichnissen notwendig ist.

Wir könnten stattdessen auch die Option -a verwenden:

  • rsync -a dir1/ dir2

Die Option -a ist ein Kombinationsflag. Sie steht für „archivieren“ und synchronisiert rekursiv und bewahrt symbolische Links, spezielle und Gerätedateien, Änderungszeiten, Gruppe, Besitzer und Berechtigungen. Sie wird häufiger verwendet als -r und ist in der Regel das, was Sie verwenden möchten.

Ein wichtiger Hinweis

Sie haben vielleicht bemerkt, dass am Ende des ersten Arguments in den obigen Befehlen ein nachgestellter Schrägstrich (/) steht:

  • rsync -a dir1/ dir2

Dies ist notwendig, um „den Inhalt von dir1“ zu bedeuten. Die Alternative, ohne den abschließenden Schrägstrich, würde dir1, einschließlich des Verzeichnisses, innerhalb von dir2 platzieren. Dadurch würde eine Hierarchie entstehen, die wie folgt aussieht:

  • ~/dir2/dir1/

Überprüfen Sie Ihre Argumente immer doppelt, bevor Sie einen rsync-Befehl ausführen. Rsync bietet eine Methode, dies zu tun, indem die Optionen -n oder --dry-run übergeben werden. Das -v-Flag (für verbose) ist ebenfalls notwendig, um die entsprechende Ausgabe zu erhalten:

  • rsync -anv dir1/ dir2
Output
sending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .

Vergleichen Sie diese Ausgabe mit der Ausgabe, die wir erhalten, wenn wir den abschließenden Schrägstrich entfernen:

  • rsync -anv dir1 dir2
Output
sending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .

Sie können hier sehen, dass das Verzeichnis selbst übertragen wird.

Wie man Rsync zur Synchronisierung mit einem entfernten System verwendet

Die Synchronisierung mit einem entfernten System ist trivial, wenn man SSH-Zugriff auf den entfernten Rechner hat und rsync auf beiden Seiten installiert ist. Sobald der SSH-Zugang zwischen den beiden Rechnern verifiziert ist, können Sie den Ordner dir1 mit dieser Syntax auf den entfernten Rechner synchronisieren (beachten Sie, dass wir in diesem Fall das eigentliche Verzeichnis übertragen wollen, daher lassen wir den nachgestellten Schrägstrich weg):

  • rsync -a ~/dir1 username@remote_host:destination_directory

Dies wird als „Push“-Vorgang bezeichnet, weil ein Verzeichnis vom lokalen System auf ein entferntes System übertragen wird. Der umgekehrte Vorgang ist „pull“. Er wird verwendet, um ein entferntes Verzeichnis mit dem lokalen System zu synchronisieren. Befände sich das dir1 auf dem entfernten System statt auf unserem lokalen System, würde die Syntax lauten:

  • 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.

Nützliche Optionen für Rsync

Rsync bietet viele Optionen, um das Standardverhalten des Dienstprogramms zu ändern. Wir haben bereits einige der notwendigsten Flags besprochen.

Wenn Sie Dateien übertragen, die nicht bereits komprimiert wurden, wie z.B. Textdateien, können Sie die Netzwerkübertragung reduzieren, indem Sie die Komprimierung mit der Option -z hinzufügen:

  • rsync -az source destination

Das -P-Flag ist sehr hilfreich. Es kombiniert die Flaggen --progress und --partial. Mit dem ersten erhalten Sie einen Fortschrittsbalken für die Übertragungen und mit dem zweiten können Sie unterbrochene Übertragungen wieder aufnehmen:

  • 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)file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101). . .

Wenn wir den Befehl erneut ausführen, erhalten wir eine kürzere Ausgabe, da keine Änderungen vorgenommen wurden. Dies veranschaulicht die Fähigkeit von rsync, anhand der Änderungszeiten festzustellen, ob Änderungen vorgenommen wurden.

  • rsync -azP source destination
Output
sending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00

Wir können die Änderungszeit einiger Dateien aktualisieren und sehen, dass rsync intelligenterweise nur die geänderten Dateien neu kopiert:

  • touch dir1/file{1..10}
  • rsync -azP source destination
Output
sending incremental file listfile1 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, müssen Dateien aus dem Zielverzeichnis gelöscht werden, wenn sie aus dem Quellverzeichnis entfernt werden. Standardmäßig löscht rsync nichts aus dem Zielverzeichnis.

Wir können dieses Verhalten mit der Option --delete ändern. Bevor Sie diese Option verwenden, verwenden Sie die Option --dry-run und führen Sie Tests durch, um Datenverluste zu vermeiden:

  • rsync -a --delete source destination

Wenn Sie bestimmte Dateien oder Verzeichnisse ausschließen möchten, die sich innerhalb eines zu synchronisierenden Verzeichnisses befinden, können Sie dies tun, indem Sie sie in einer kommagetrennten Liste nach der Option --exclude= angeben:

  • rsync -a --exclude=pattern_to_exclude source destination

Wenn wir ein Ausschlussmuster angegeben haben, können wir diesen Ausschluss für Dateien, die einem anderen Muster entsprechen, mit der Option --include= außer Kraft setzen.

  • rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

Schließlich kann die Option --backup von rsync verwendet werden, um Sicherungskopien von wichtigen Dateien zu speichern. Sie wird in Verbindung mit der Option --backup-dir verwendet, die das Verzeichnis angibt, in dem die Sicherungsdateien gespeichert werden sollen.

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

Fazit

Rsync kann Dateiübertragungen über Netzwerkverbindungen vereinfachen und die Synchronisierung lokaler Verzeichnisse robuster machen. Die Flexibilität von rsync macht es zu einer guten Option für viele verschiedene Operationen auf Dateiebene.

Wenn Sie rsync beherrschen, können Sie komplexe Backup-Operationen entwerfen und eine feinkörnige Kontrolle darüber erhalten, was und wie übertragen wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.