it-swarm.com.de

Befehl kopieren oder rsync

Der folgende Befehl funktioniert wie erwartet ...

cp -ur /home/abc/* /mnt/windowsabc/

Hat rsync einen Vorteil? Gibt es eine bessere Möglichkeit, den Ordner alle 24 Stunden synchron zu sichern?

61
shantanuo

Rsync ist besser, da nur die aktualisierten Teile der aktualisierten Datei anstelle der gesamten Datei kopiert werden. Es verwendet auch Komprimierung und Verschlüsselung, wenn Sie möchten. Schauen Sie sich dieses Tutorial an .

49
marchica

rsync ist aufgrund der detaillierteren Bestandsaufnahme von Dateien und Blöcken nicht unbedingt effizienter. Der Algorithmus ist fantastisch bei dem, was er tut, aber Sie müssen Ihr Problem verstehen, um zu wissen, ob es wirklich die beste Wahl ist.

In einem sehr großen Dateisystem (zB viele tausend oder Millionen Dateien), in dem Dateien zwar hinzugefügt, aber nicht aktualisiert werden, ist "cp -u" wahrscheinlich effizienter. cp entscheidet sich dafür, ausschließlich auf Metadaten zu kopieren, und kann einfach mit dem Kopieren beginnen.

Beachten Sie, dass Sie möglicherweise eine Pufferung wünschen, z. durch die Verwendung von tar anstelle von straight cp, abhängig von der Größe der Dateien, der Netzwerkleistung, anderer Festplattenaktivität usw. finde ich die folgende Idee sehr nützlich:

tar cf - . | tar xCf directory -

Metadaten selbst können auf sehr großen (Cluster-) Dateisystemen tatsächlich einen erheblichen Overhead verursachen, aber rsync und cp teilen dieses Problem.

rsync scheint häufig das bevorzugte Werkzeug zu sein (und in allgemeinen Anwendungen ist meine gewöhnliche Standardeinstellung), aber wahrscheinlich gibt es viele Leute, die rsync blind verwenden, ohne es zu überdenken.

47
ckg

Mit dem Befehl werden neue Verzeichnisse und Dateien mit dem aktuellen Datums- und Zeitstempel sowie Sie selbst als Eigentümer erstellt. Wenn Sie der einzige Benutzer Ihres Systems sind und dies täglich tun, ist dies möglicherweise nicht wichtig. Wenn es jedoch für Sie wichtig ist, diese Attribute zu erhalten, können Sie Ihren Befehl mit ändern

cp -pur /home/abc/* /mnt/windowsabc/

Mit -p bleiben Besitz, Zeitstempel und Modus der Datei erhalten. Dies kann ziemlich wichtig sein, je nachdem, was Sie sichern.

Der alternative Befehl mit rsync wäre

rsync -avh /home/abc/* /mnt/windowsabc

Mit rsync bezeichnet -a "Archiv", wodurch alle oben genannten Attribute erhalten bleiben. -v zeigt "verbose" an, in dem nur aufgelistet wird, was mit jeder Datei gemacht wird, während sie ausgeführt wird. -z ist hier nicht für lokale Kopien vorgesehen, sondern dient der Komprimierung. Dies ist hilfreich, wenn Sie über ein Netzwerk sichern. Schließlich gibt der Befehl -h an, dass rsync die Größe in lesbaren Formaten wie MB, GB usw. angeben soll.

Aus Neugier habe ich eine Kopie ausgeführt, um das System zu starten und den ersten Lauf zu vermeiden. Dann habe ich die Zeit für einen Testlauf von 1 GB an Dateien von einem internen SSD-Laufwerk auf eine USB-Festplatte festgelegt. Diese werden einfach in leere Zielverzeichnisse kopiert.

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

Beide Befehle scheinen ungefähr gleich zu sein, obwohl das Zippen und das Entpacken das System offensichtlich belasten, wo Bandbreite kein Engpass ist.

12
mightypile

Für eine lokale Kopie besteht der einzige Vorteil von rsync darin, dass das Kopieren vermieden wird, wenn die Datei bereits im Zielverzeichnis vorhanden ist. Die Definition von "bereits existiert" ist (a) gleicher Dateiname (b) gleiche Größe (c) gleicher Zeitstempel. (Vielleicht derselbe Eigentümer/die gleiche Gruppe; ich bin mir nicht sicher ...)

Der "Rsync-Algorithmus" eignet sich hervorragend für inkrementelle Aktualisierungen einer Datei über eine langsame Netzwerkverbindung, aber Sie werden nicht viel für eine lokale Kopie kaufen, da sie die vorhandene (unvollständige) Datei lesen muss, um ihre "diff" Berechnung auszuführen.

Wenn Sie diese Art von Befehl häufig ausführen und der Satz der geänderten Dateien relativ zur Gesamtzahl der Dateien klein ist, sollten Sie feststellen, dass rsync schneller ist als cp. (Außerdem hat rsync eine --delete-Option, die Sie möglicherweise nützlich finden.)

3
Nemo

Insbesondere wenn Sie ein Copy-on-Write-Dateisystem wie BTRFS oder ZFS verwenden, ist rsync viel besser.

Ich benutze BTRFS und habe dies in meinem ~/.bashrc:

alias cp="rsync -ah --partial --inplace --info=progress2"

Das wichtige Kennzeichen für CoW-FSs wie BTRFS ist --inplace, da es nur den geänderten Teil der Dateien kopiert, keine neuen Änderungen für kleine Änderungen zwischen Dateien inodes usw. erstellt. Siehe this .

3
Geremia

Es geht nicht wirklich darum, was effizienter ist.

.__ Die Befehle 'rsync' und 'cp' sind nicht gleichwertig und erreichen unterschiedliche Ziele.

1- rsync kann den Zeitpunkt der Erstellung vorhandener Dateien beibehalten. (mit der Option -a)
2- rsync führt mehrere Prozesse aus und überträgt entweder lokale oder Netzwerk-Sockets. (d. h. sich in mehrere Prozesse verteilen)
3- Die Multiprozessierung und das Threading erhöhen Ihren Durchsatz beim Kopieren einer großen Anzahl kleiner Dateien und sogar bei mehreren größeren Dateien.

Die untere Zeile lautet also rsync für große Daten und cp für kleineres lokales Kopieren. (MB bis kleiner GB-Bereich). Wenn Sie anfangen, in mehrere GB oder in den Bereich TB zu gelangen, fahren Sie mit rsync fort. Und natürlich Netzwerkkopien, rsync den ganzen Weg.

2
Ellison

Beachten Sie, dass die Verwendung des Flags -z beim internen Übertragen von Dateien auf einem Computer, d. H. Nicht im Netzwerk, erhebliche Zeitunterschiede bei der Übertragung verursachen kann.

Transfer innerhalb der gleichen Maschine

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797
1

wenn Sie cp verwenden, werden vorhandene Dateien beim Kopieren von Ordnern mit demselben Namen nicht gespeichert. Nehmen wir an, Sie haben diese Ordner:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

Dann kopierst du eins über das andere:

cp /someOtherFolder/myFolder /myFolder

ergebnis:

/myFolder
  wellHelloThere.txt

Dies ist zumindest das, was auf MacOS passiert und ich wollte die Diff-Dateien beibehalten, also habe ich Rsync verwendet.

0
h3dkandi