Ich benutze rsync seit einiger Zeit, um Dateien zu kopieren. Nach meinem Verständnis ist rsync schneller als cp, wenn sich einige der zu übertragenden Dateien bereits im Zielverzeichnis befinden und nur die inkrementelle Differenz (dh die "Deltas") übertragen werden.
Wenn dies korrekt ist, hätte es einen Vorteil, rsync zu verwenden, um den Inhalt eines Ordners A , zum Beispiel eines Ordners B , zu verschieben, wobei B leer ist?
Der Ordner A enthält fast 1 TB Daten (und Millionen von Dateien). Die Übertragung würde über ein lokales Netzwerk erfolgen ( A und B befinden sich auf verschiedenen Dateisystemen, die beide auf einem Supercomputer installiert sind , z. B. A ist NFS und B ist Luster ).
Welche Flags sollte ich außerdem verwenden, um rsync aufzufordern , Dateien von A nach B zu verschieben (nicht zu kopieren) (dh A zu löschen, wenn die Übertragung erfolgreich abgeschlossen wurde)?
rsync
ersetzen zu könnenmv
. Ich würde erwartenmv
, dass die meisten Dateisystemtypen schneller sind, wenn sich Quelle und Ziel im selben Dateisystem befinden, darsync
unabhängig davon eine Kopie erstellt werden müsste undmv
wahrscheinlich einige Verzeichniseinträge geändert werden müssen. Das nächste, was ich zu einem finden kann,rsync mv
ist der--remove-source-files
Befehl, aber das entfernt keine Verzeichnisse.mv
schneller machen würde ?mv
kann über ein Netzwerk nicht funktionieren - es würde einen lokalen Mount (zB NFS) angewiesen. Wenn der Engpass im Netzwerk liegt,rsync
wäre das wahrscheinlich schneller, alsmv
darsync
Komprimierung machen kann.cp
hat die-u
Option, Quelldatei zu kopieren, wenn es neuer als die Zieldatei ist oder wenn die Zieldatei fehltAntworten:
Sie können
--remove-source-files
an rsync übergeben, um Dateien zu verschieben, anstatt sie zu kopieren.In Ihrem Fall macht die Verwendung von rsync jedoch keinen Sinn, da das Ziel leer ist. Eine Ebene
mv
erledigt die Arbeit so schnell wie möglich.In Ihrem Fall kann sich die Wahl des Netzwerkprotokolls auf die Leistung auswirken, wenn Sie zwischen NFS, Samba, sshfs, sftp, rsync und ssh, tar piped in ssh usw. wählen. Die relative Geschwindigkeit dieser Methoden hängt davon ab Da es keine Möglichkeit gibt, allgemeine Ratschläge zu geben, müssen Sie Ihre eigenen Benchmarks ausführen.
quelle
--remove-source-files
löscht nur die Dateien in der Quelle. Wenn Sie die Quelle löschen möchten, müssen Sie dann nach der erfolgreichen Ausführung von rsync keine rm -rf (oderfind
alle Verzeichnisse und Übergaben-delete
) für die Quelle ausführen.--checksum
, um die Ergebnisse der ersten Synchronisierung zu überprüfen.Da
--remove-source-files
keine Verzeichnisse entfernt werden, gebe ich die folgenden Befehle aus, um Dateien über ssh zu verschieben:Ich persönlich mag die
--progress
Funktion, da ich diese Übertragung manuell mache. Entfernen Sie es, wenn Sie ein Skript verwenden. Ich gehe davon aus, dass es Transfers geringfügig verlangsamt. Diefind
Löschoption des Befehls löscht nur leere Verzeichnisse - nicht verwendenrm -rf
, da nicht leere Verzeichnisse gelöscht werden können, falls eine Datei nicht übertragen wurde. Die-delete
Option aktiviert die-depth
Option, sodass leere Verzeichnisbäume von unten nach oben gelöscht werden.quelle
-delete
ist viel schöner als-exec rmdir {} +
etcWie Gilles sagte, gibt es im Allgemeinen keinen Vorteil,
rsync
Dateien zu verschieben, wennmv
derselbe Job einfacher erledigt wird, und es gibt keinen potenziellen Geschwindigkeitsgewinn zwischen normalen Dateisystemen.Es gibt jedoch einige Male, in denen es einen Vorteil gibt. Insbesondere, wenn Sie Zweifel an der Stabilität der Quelle, des Ziels oder der Maschine haben, die die Arbeit
rsync
erledigt, erhalten Sie mithilfe von die Möglichkeit , die Arbeit fortzusetzen. Dies kann ein beachtlicher Vorteil sein, wenn Sie eine sehr große Übertragung durchführen und Ihr Stromnetz beispielsweise unzuverlässig ist. Die Verwendung von rsync ist eine stabilere Methode, um im Falle eines Ausfalls eine Beschädigung der Daten zu vermeiden und dort fortzufahren, wo Sie aufgehört haben.quelle
mv
ist nur besser, wenn das Ziel und die Quelle in der gleichen Partition sind, so dassmv
nur die Metadaten der Datei bearbeitet werden, anstatt eine Kopie zu erstellen.rsync
statt mv einmal, um die Ordnerstruktur beizubehalten (falls Sie sie verwenden--relative
).Ich befand mich in einer Situation, in der rsync schneller ist als mv, weil mv die Anzahl der Dateien im Verzeichnis nicht verarbeiten kann. Ich habe 1,8 Millionen Fotos von einer Überwachungskamera, die 20 Tage lief, und der Befehl mv wird mit einem Fehler beendet, da er keine Ressourcen zuweisen kann.
rsync scheint jedoch problemlos mit allen Dateien umzugehen.
quelle
Wenn Sie Verzeichnisse rekursiv zusammenführen möchten ... verschieben Sie ein Verzeichnis in ein anderes Verzeichnis mit möglicherweise doppelten Verzeichnisnamen, dann finden Sie meine Antwort hier auf serverfault.com.
mv
leistet schlechte Arbeit, wenn Verzeichnisse mit demselben Namen existieren undrsync
jede Datei kopiert (Lese- und Schreibzugriff), anstatt sie nur zu verschieben (Lese- und Schreibzugriff auf Metadaten).quelle
Es gibt keine Möglichkeit, Dateien mit rsync zu verschieben, wie dies mit dem Linux-Befehl mv möglich wäre. Mit --remove-source-files kopieren Sie im Wesentlichen Dateien in das Ziel und löschen dann Dateien (außer Verzeichnisse) aus der Quelle. Dies könnte Ihren Zweck zum Verschieben von Dateien erfüllen, aber Sie sparen KEINE Zeit oder I / O-Operationen.
quelle