Ich muss einen großen Verzeichnisbaum kopieren, etwa 1,8 TB. Es ist alles lokal. Aus Gewohnheit würde ich verwenden rsync
, aber ich frage mich, ob es viel Sinn gibt und ob ich lieber verwenden sollte cp
.
Ich mache mir Sorgen um Berechtigungen und uid / gid, da diese in der Kopie erhalten bleiben müssen (ich weiß, dass rsync dies tut). Sowie Dinge wie Symlinks.
Das Ziel ist leer, sodass ich mich nicht darum kümmern muss, einige Dateien bedingt zu aktualisieren. Es ist alles eine lokale Festplatte, so dass ich mich nicht um ssh oder das Netzwerk kümmern muss.
Der Grund, warum ich versucht bin, mich von rsync zu lösen, ist, dass rsync möglicherweise mehr tut, als ich brauche. rsync prüfsummen dateien. Ich brauche das nicht und befürchte, dass es länger dauern könnte als cp.
Also, was denkst du, rsync
oder cp
?
Antworten:
Ich würde rsync verwenden, da dies bedeutet, dass Sie es ohne großen Aufwand neu starten können, wenn es aus irgendeinem Grund unterbrochen wird. Mit rsync kann sogar ein Teil einer großen Datei neu gestartet werden. Wie andere erwähnen, kann es Dateien leicht ausschließen. Der einfachste Weg, die meisten Dinge zu bewahren, ist die Verwendung des
-a
Flags "Archiv". Damit:Obwohl UID / GID und Symlinks von
-a
(see-lpgo
) beibehalten werden , impliziert Ihre Frage, dass Sie möglicherweise eine vollständige Kopie der Dateisysteminformationen wünschen . und-a
enthält keine Hardlinks, erweiterten Attribute oder ACLs (unter Linux) oder die oben genannten oder Resource Forks (unter OS X). Daher müssen Sie für eine robuste Kopie eines Dateisystems diese Flags einschließen:Der Standard-CP wird erneut gestartet, obwohl das
-u
Flag "nur kopiert, wenn die SOURCE-Datei neuer ist als die Zieldatei oder wenn die Zieldatei fehlt" . Das-a
(Archiv-) Flag ist rekursiv und kopiert keine Dateien erneut, wenn Sie neu starten und die Berechtigungen beibehalten müssen. Damit:quelle
Beim Kopieren in das lokale Dateisystem verwende ich immer die folgenden rsync-Optionen:
Hier ist meine Argumentation:
Ich habe 17% schnellere Übertragungen mit den obigen rsync-Einstellungen über den folgenden tar-Befehl gesehen, wie in einer anderen Antwort vorgeschlagen:
quelle
rsync: --no-compress: unknown option
@Ellis Percival.rm -rf /src/
.Wenn ich eine große Datenmenge kopieren muss, verwende ich normalerweise eine Kombination aus tar und rsync. Der erste Durchgang ist es, es zu tarieren, etwa so:
Normalerweise gibt es bei einer großen Anzahl von Dateien einige, die tar aus irgendeinem Grund nicht verarbeiten kann. Möglicherweise wird der Vorgang unterbrochen, oder wenn es sich um eine Dateisystemmigration handelt, möchten Sie möglicherweise die Erstkopie vor dem eigentlichen Migrationsschritt erstellen. Jedenfalls führe ich nach der Erstkopie einen rsync-Schritt durch, um alles zu synchronisieren:
Beachten Sie, dass der abschließende Schrägstrich
/src/
wichtig ist.quelle
pv
in die Mitte, um den Fortschritt beobachten zu können und die Größe aller Daten unter Verwendung von zu schätzendf
. Ich habe auch verwendet--numeric-owner
, da dietar
tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp
rsync
Hier ist das von mir verwendete rsync, ich bevorzuge cp für einfache Befehle, nicht dieses.
cpio
Hier ist ein Weg, der noch sicherer ist, cpio. Es ist ungefähr so schnell wie Teer, vielleicht etwas schneller.
Teer
Dies ist auch gut und setzt sich bei Lesefehlern fort.
Beachten Sie, dass dies alles nur für lokale Kopien ist.
quelle
Was auch immer Sie bevorzugen. Vergessen Sie den
-a
Schalter nicht, wenn Sie sich für die Verwendung entscheidencp
.Wenn Sie wirklich eine Antwort brauchen: Ich würde rsync verwenden, weil es viel flexibler ist. Müssen Sie das System herunterfahren, bevor der Kopiervorgang abgeschlossen ist? Drücken Sie einfach die Tastenkombination Strg-C und fahren Sie fort, sobald Sie zurück sind. Müssen Sie einige Dateien ausschließen? Verwenden Sie einfach
--exclude-from
. Müssen Sie Eigentümer oder Berechtigungen ändern? rsync erledigt das für Sie.quelle
Der
rsync
Befehl berechnet immer Prüfsummen für jedes übertragene Byte.Die Befehlszeilenoption
--checksum
bezieht sich nur darauf, ob Prüfsummen von Dateien verwendet werden, um zu bestimmen, welche Dateien übertragen werden sollen oder nicht, dh:Die Manpage sagt auch Folgendes:
rsync
Berechnet also auch immer eine Prüfsumme der gesamten Datei auf der Empfängerseite, selbst wenn die-c/ --checksum
Option "aus" ist.quelle
rsync -aPhW --protocol=28
beschleunigt diese großen Kopien mit RSYNC. Ich gehe immer rsync, weil der Gedanke, mitten in 90GiB zu sein und es zu brechen, mich von CP abschrecktquelle
rsync ist großartig, hat jedoch Probleme mit sehr großen Verzeichnisbäumen, da die Bäume im Speicher gespeichert werden. Ich habe nur gesucht, ob sie dieses Problem beheben würden, als ich diesen Thread gefunden habe.
Ich fand auch:
http://matthew.mceachen.us/geek/gigasync/
Sie können den Baum auch manuell aufteilen und mehrere rsyncs ausführen.
quelle
Dieser Thread war sehr nützlich und da es so viele Optionen gab, um das Ergebnis zu erzielen, entschied ich mich, einige davon zu vergleichen. Ich glaube, meine Ergebnisse können hilfreich sein, um zu verstehen, was schneller funktioniert hat.
Um 532 GB an Daten zu verschieben, die auf 1.753.200 Dateien verteilt waren, hatten wir folgende Zeiten:
rsync
dauerte 232 Minutentar
dauerte 206 Minutencpio
dauerte 225 Minutenrsync + parallel
dauerte 209 MinutenIn meinem Fall habe ich es vorgezogen, zu verwenden
rsync + parallel
. Ich hoffe, diese Informationen helfen mehr Menschen, sich für eine dieser Alternativen zu entscheiden.Der vollständige Benchmark wird hier veröffentlicht
quelle
cp
? Dies ist der Titel der Frage!cp
ist unsicher, dh: Wenn es bricht müssen Sie von vorne beginnen, das ist, wie ich Optionen bevorzugen, die wieder aufgenommen werden können, alsorsync
ist mein Favorit :)Beim lokalen Kopieren eines lokalen Verzeichnisses ist "cp -van src dest" meiner Erfahrung nach 20% schneller als rsync. Was die Neustartfähigkeit betrifft, ist dies das, was "-n" tut. Sie müssen nur die teilweise kopierte Datei rm. Nicht schmerzhaft, es sei denn, es ist eine ISO oder eine solche.
quelle
ARJ IST SO ALTE SCHULE !! Ich bezweifle wirklich, dass ARJ und / oder Rsync Leistung geben werden.
Auf jeden Fall benutze ich immer cpio:
Dies ist fast schneller als CP, definitiv schneller als Teer und ohne etwas zu leiten.
quelle
cpio
Manpage von FreeBSD .cpio
Leider hat eine 8GB Obergrenze für Dateien.find
Befehl, wie Sie ihn aufgeführt haben, eine Pipe enthält:find . -print | cpio -pdm /target/folder
Sie möchten rclone auf jeden Fall ausprobieren. Dieses Ding ist schnell verrückt:
Dies ist eine lokale Kopie von und zu einer LITEONIT LCS-256 (256 GB) SSD.
Sie können
--ignore-checksum
den ersten Lauf hinzufügen , um ihn noch schneller zu machen.quelle
Beides wird gut funktionieren.
quelle
tar
würde auch die Arbeit machen, aber nicht wieder unterbrochen werden, wie Rsync wird.quelle
Was ist, wenn Sie ARJ verwenden?
Wo
-jm -m1
sind Komprimierungsstufen und-je
macht es eine ausführbare Datei. Jetzt haben Sie eine gekapselte Bash von Dateien.Dann zur Extraktion auf die Zielkarte
wo die Quellkarte erstellt wird (wo
-y
wird immer akzeptiert, überschrieben, übersprungen usw.)Man kann dann das Dateipaket zum Zielbereich scp ftp und es ausführen, wenn das möglich ist.
quelle
Es gibt einige Beschleunigungen, die angewendet werden können
rsync
:Vermeiden
-z
/--compress
: Komprimierung lädt nur die CPU, da die Übertragung nicht über ein Netzwerk, sondern über RAM erfolgt.--append-verify
: Eine unterbrochene Übertragung fortsetzen. Das klingt nach einer guten Idee, hat aber den gefährlichen Fehlerfall: Jede Zieldatei, deren Größe (oder größer) der der Quelle entspricht, wird ignoriert. Außerdem wird die gesamte Datei am Ende mit einer Prüfsumme versehen, was bedeutet, dass--no-whole-file
beim Hinzufügen eines gefährlichen Fehlerfalls keine signifikante Beschleunigung erfolgt .Verwenden
-S
/--sparse
: Folgen von Nullen in spärliche Blöcke verwandeln--partial
oder-P
welche ist--partial --progress
: Speichern Sie alle teilweise übertragenen Dateien für die zukünftige Wiederaufnahme. Hinweis: Dateien haben keinen temporären Namen. Vergewissern Sie sich daher, dass das Ziel von niemand anderem verwendet wird, bis die gesamte Kopie abgeschlossen ist.--no-whole-file
Damit alles, was erneut gesendet werden muss, Delta-Transfer verwendet. Das Lesen der Hälfte einer teilweise übertragenen Datei ist oft viel schneller als das erneute Schreiben.--inplace
Vermeiden des Kopierens von Dateien (aber nur, wenn das Ziel erst nach Abschluss der gesamten Übertragung gelesen wird)quelle