Frage Eine große Verzeichnisstruktur lokal kopieren? cp oder rsync?


Ich muss einen großen Verzeichnisbaum kopieren, etwa 1,8 TB. Es ist alles lokal. Aus Gewohnheit würde ich verwenden rsyncAber 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 sie in der Kopie bewahrt werden müssen (ich weiß, dass Rsync dies tut). Sowie Dinge wie Symlinks.

Das Ziel ist leer, so dass ich mich nicht darum kümmern muss, einige Dateien bedingt zu aktualisieren. Es ist alles lokale Festplatte, also muss ich mich nicht um SSH oder Netzwerk kümmern.

Der Grund, warum ich von rsync verführt würde, ist, dass rsync mehr kann, als ich brauche. rsync Prüfsummen Dateien. Ich brauche das nicht und bin besorgt, dass es länger dauern könnte als CP.

Also, was denkst du, rsync oder cp?


217
2017-07-20 14:36


Ursprung


Wenn rsync genau das tut, was Sie wollen, wenn Sie bereits mit der Verwendung für diese spezielle Anwendung vertraut sind und wenn es schnell genug nach Ihrem Geschmack funktioniert, warum sollten Sie dann umschalten? - eleven81
Weil ich befürchte, dass rsync länger als cp dauert, da rsync viele checksumming durchführt, die cp nicht tun wird - Rory
Der CPU-Overhead der Prüfsumme ist im Vergleich zu der Platte / Netzwerk-E / A klein. Es sei denn, die Festplatte befindet sich auf dem gleichen System und das Betriebssystem kann eine clevere Drive-Drive-Kopie im Bus-Controller vornehmen. - Martin Beckett
Die Prüfsummierung erfolgt für Dateien, die sich bei der Überprüfung von Größe und Zeitstempel unterscheiden. Wenn Sie paranoid sind (wie nach einem Stromausfall während des Kopierens), können Sie die Prüfsumme für alle Dateien erzwingen, aber bei einer lokalen Übertragung ist das normalerweise langsamer als bei Null. - korkman
Vielleicht ist er neugierig darauf, seinen Workflow zu verbessern, und vergräbt seinen Kopf nicht im Sand, weil er denkt, dass er alles weiß. Dieser Kommentar nervt mich wirklich. - Martin Konecny


Antworten:


Ich würde Rsync verwenden, da es bedeutet, dass wenn es aus irgendeinem Grund unterbrochen wird, können Sie es problemlos mit sehr geringen Kosten neu starten. Und da es rsync ist, kann es sogar teilweise durch eine große Datei neu gestartet werden. Wie andere schon erwähnt haben, kann es leicht Dateien ausschließen. Die einfachste Möglichkeit, die meisten Dinge zu erhalten, ist die Verwendung der -a Flagge - 'Archiv'. Also:

rsync -a source dest

Obwohl UID / GID und Symlinks durch beibehalten werden -a (sehen -lpgo), Ihre Frage impliziert, dass Sie vielleicht möchten voll Kopie der Dateisysteminformation; und -a enthält keine festen Links, erweiterten Attribute oder ACLs (unter Linux) oder die oben genannten Noch Ressourcen-Forks (unter OS X.) Daher müssen Sie für eine stabile Kopie eines Dateisystems diese Flags einschließen:

rsync -aHAX source dest # Linux
rsync -aHE source dest  # OS X

Der Standard-CP wird erneut gestartet, obwohl der -u Fahne wird "Nur kopieren, wenn die SOURCE-Datei neuer ist als die Zieldatei oder wenn die Zieldatei fehlt". Und das -a (archive) flag wird rekursiv sein, Dateien nicht erneut kopieren, wenn Sie die Berechtigungen neu starten und beibehalten müssen. So:

cp -au source dest

188
2017-07-20 14:40



Das -u-Flag von cp ist wahrscheinlich nicht die beste Lösung, da es eine teilweise kopierte / beschädigte Datei nicht erkennen würde. Das Schöne an rsync ist, dass Sie die Dateien mit md5 summieren können, um Unterschiede zu erkennen. - Chad Huneycutt
Das Hinzufügen von -w (--whole-file) -Option würde ein unterbrochenes rsync beschleunigen, da es nur die Datei anstelle von checksumming kopieren wird. - hayalci
Tatsächlich erkennt rsync lokale Übertragungen und ermöglicht das Kopieren ganzer Dateien ohne automatisches Prüfsummen. - korkman
und - Fortschritt, der wirklich praktisch ist! - Matt
-P oder --progress zeigt den Fortschritt für jede Datei einzeln an. Es ist nützlich für das Kopieren von großen Dateien, nicht für viele (Tausende) kleine Dateien, da es viel mehr Ausgabe bedeutet, die Sie nicht lesen können. Es zeigt nicht den Gesamtfortschritt aller Dateien zusammen. - SPRBRN


Beim Kopieren in das lokale Dateisystem verwende ich immer die folgenden rsync-Optionen:

# rsync -avhW --no-compress --progress /src/ /dst/

Hier ist meine Argumentation:

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)

Ich habe 17% schnellere Übertragungen mit den obigen rsync-Einstellungen über den folgenden tar-Befehl gesehen, wie von einer anderen Antwort vorgeschlagen:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

89
2018-05-07 19:09



Ich habe folgenden Fehler: rsync: --no-compress: unknown option @Ellis Percival. - alper
Das ist blitzschnell. Schneller als dies zu tun rm -rf /src/. - dgo
Wie @alper, --no-compress war keine Option für meine Version von rsync (in CentOS 7); Ich habe stattdessen --compress-level = 0 benutzt. - Paul


Wenn ich eine große Menge an Daten kopieren muss, verwende ich normalerweise eine Kombination aus tar und rsync. Der erste Durchgang ist es zu tarnen, etwa so:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

Normalerweise wird es bei einer großen Anzahl von Dateien einige geben, mit denen tar aus irgendeinem Grund nicht umgehen kann. Oder vielleicht wird der Prozess unterbrochen oder wenn es sich um eine Dateisystemmigration handelt, möchten Sie vielleicht die erste Kopie vor dem eigentlichen Migrationsschritt machen. Auf jeden Fall mache ich nach der ersten Kopie einen rsync-Schritt, um alles zu synchronisieren:

# cd /dst; rsync -avPHSx --delete /src/ .

Beachten Sie, dass der abschließende Schrägstrich aktiviert ist /src/ ist wichtig.


78
2017-07-20 15:15



+1 Ich habe gefunden, dass tar für große Kopien generell schneller ist als rsync. Ich mag die Idee, auch mit einem finalen rsync fertig zu werden. - Geoff Fritz
tar ist eine gute Wahl, wenn das Zielverzeichnis leer ist. Obwohl mein Weg wäre: cd $ DSTDIR; tar c -C SRCDIR. | Teer - asdmin
Das ist die Schönheit dieser Methode. Sie benötigen keinen doppelten Speicherplatz, da Sie nie eine temporäre TAR-Datei erstellen. Der Teer vor der Pipe packt die Daten und streamt sie in stdout, und der Teer nach der Pipe packt ihn von stdin und entpackt ihn. - Chad Huneycutt
Ich habe eine cp-a für eine 12-GB-Übertragung und diese Methode für eine 42-GB-Übertragung. Die Teermethode dauerte ungefähr 1/4 der Zeit. - NGaida
Ich auch pv in der Mitte, um den Fortschritt beobachten zu können und die Größe aller Daten zu schätzen df. Ich habe es auch benutzt --numeric-owner, da die Quellfestplatte von einem anderen System stammte und ich nicht wollte tar die Besitzer durcheinander bringen: tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp - Petr Pudlák


rsync

Hier ist der rsync ich benutze, ich bevorzuge cp für einfache Befehle, nicht das.

$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/

CPIO

Hier ist ein Weg, der noch sicherer ist, CPIO. Es ist ungefähr so ​​schnell wie Teer, vielleicht ein bisschen schneller.

$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null

Teer

Dies ist auch gut und setzt sich bei Lesefehlern fort.

$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -

Beachten Sie, dass dies alles nur für lokale Kopien ist.


13
2018-02-26 17:06



Warum verwenden Sie die -S und -D Flags für Rsync? - miyalys


rsync -aPhW --protocol=28 hilft, diese großen Kopien mit RSYNC zu beschleunigen. Ich gehe immer rsync, weil der Gedanke, in der Mitte von 90GiB zu sein und es bricht, mich von CP abschreckt


6
2017-07-20 16:24



Was ist der Wert für die Verwendung des älteren Protokolls in dieser Befehlszeichenfolge? - ewwhite
Auf einem Mac-Rechner hängt die ältere Version von Rsync ausgeliefert auf einigen neueren rsync-Protokollumdrehungen, wie 29. Wenn man es an das ältere Protokoll weitergibt, wird es NICHT immer wieder überprüft. - oneguynick
Ich schätze, Nummer 28 ist nicht mehr gültig? - SPRBRN


Das rsync Der 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:

-c, --checksum  Überspringen basierend auf Prüfsumme, nicht Mod-Zeit & Größe "

Die Manpage sagt das auch:

Beachten Sie, dass rsync immer überprüft, dass jede übertragene Datei auf der Empfängerseite korrekt rekonstruiert wurde, indem sie die gesamte Prüfsumme überprüft. Die automatische Überprüfung nach der Übertragung hat jedoch nichts mit der Übertragung dieser Option vor der Übertragung zu tun aktualisiert werden?" prüfen.

So rsync berechnet auch immer eine Prüfsumme der gesamten Datei auf der Empfangsseite, auch wenn -c/ --checksum Option ist "aus".


6
2017-11-28 01:20



Während Ihr Beitrag hier einige interessante Informationen hinzugefügt hat, verringern die Gerüchte und Beleidigungen den Wert Ihres Posts. Diese Seite ist kein Forum für unkonstruktive Gerüchte. Wenn Sie die Quelle ändern konnten, haben Sie Ihre Änderungen als Patch eingereicht? Hast du deine Version auf Github oder so gepostet? Wenn Sie sich so stark fühlen, ist es vielleicht besser, wenn Sie versuchen, etwas konstruktiver zu machen, anstatt unnötig beleidigend zu sein. - Zoredache
Ja, der letzte Absatz war nicht wirklich notwendig. - Sherwin Flight


Was auch immer du bevorzugst. Vergiss das nicht -a wechseln, wenn Sie sich entscheiden zu verwenden cp.

Wenn Sie wirklich eine Antwort brauchen: Ich würde rsync verwenden, weil es viel flexibler ist. Müssen Sie herunterfahren, bevor der Kopiervorgang abgeschlossen ist? Einfach Strg-C und wieder aufnehmen, sobald Sie zurück sind. Müssen einige Dateien ausgeschlossen werden? Benutz einfach --exclude-from. Müssen Sie den Besitz oder die Berechtigungen ändern? rsync wird das für Sie tun.


5
2017-07-20 14:40



Was macht das Flag -p wieder? - Rory
Es wird Inhaberschaft, Zeitstempel und Berechtigungen beibehalten. - innaM
CPA wäre besser. - David Pashley
Tatsächlich. Antwort hat sich entsprechend geändert. - innaM