Befehl kopieren oder rsync


83

Der folgende Befehl funktioniert wie erwartet ...

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

Hat rsync einen Vorteil gegenüber? Gibt es eine bessere Möglichkeit, den Sicherungsordner alle 24 Stunden synchron zu halten?


Wie genau funktioniert es nicht wie erwartet?
Lunixbochs

12
-u zeigt "Update" an: Nur über fehlende oder ältere Dateien kopieren. -r gibt "rekursiv" an: Drilldown durch die Verzeichnisstruktur. Ich musste nachschlagen und anderen Noobs helfen. :-)
mächtiger

Für Informationen zu bestimmten Flags in Hilfeabschnitten von Befehlen folge ich normalerweise so etwas wie <cp --help | grep -e -u> oder wenn Sie Informationen zum Flag 'r' suchen möchten, verwenden Sie <cp --help | grep -e -r>. Es werden nur die Teile der Hilfe angezeigt, deren Inhalt Sie nach "-e" geschrieben haben.
Paramvir

Antworten:


58

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 .


59

rsync ist aufgrund der detaillierteren Bestandsaufnahme der durchgeführten Dateien und Blöcke nicht unbedingt effizienter. Der Algorithmus ist fantastisch in seiner Funktionsweise, aber Sie müssen Ihr Problem verstehen, um zu wissen, ob es wirklich die beste Wahl ist.

In einem sehr großen Dateisystem (z. B. viele tausend oder Millionen von Dateien), in dem Dateien normalerweise hinzugefügt, aber nicht aktualisiert werden, ist "cp -u" wahrscheinlich effizienter. cp trifft die Entscheidung, ausschließlich auf Metadaten zu kopieren, und kann einfach zum Kopieren übergehen.

Beachten Sie, dass Sie möglicherweise eine Pufferung wünschen, z. B. durch Verwendung von tar anstelle von Straight CP, abhängig von der Größe der Dateien, der Netzwerkleistung, anderen Festplattenaktivitäten usw. Ich finde die folgende Idee sehr nützlich:

tar cf - . | tar xCf directory -

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

rsync scheint häufig das bevorzugte Tool zu sein (und im Allgemeinen sind Anwendungen meine übliche Standardeinstellung), aber es gibt wahrscheinlich viele Leute, die rsync blind verwenden, ohne darüber nachzudenken.


18

Der geschriebene Befehl erstellt neue Verzeichnisse und Dateien mit dem aktuellen Datums- und Zeitstempel und Sie selbst als Eigentümer. Wenn Sie der einzige Benutzer auf Ihrem System sind und dies täglich tun, spielt dies möglicherweise keine Rolle. Wenn es Ihnen jedoch wichtig ist, diese Attribute beizubehalten, 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 sehr wichtig sein, je nachdem, was Sie sichern.

Der alternative Befehl mit rsync wäre

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

Bei rsync gibt -a "Archiv" an, bei dem alle oben genannten Attribute erhalten bleiben. -v gibt "ausführlich" an und listet nur auf, was mit jeder Datei während der Ausführung gemacht wird. -z wird hier für lokale Kopien weggelassen, dient jedoch der Komprimierung. Dies ist hilfreich, wenn Sie über ein Netzwerk sichern. Schließlich weist das -h rsync an, Größen in für Menschen lesbaren Formaten wie MB, GB usw. Zu melden.

Aus Neugier habe ich eine Kopie ausgeführt, um das System vorzubereiten und eine Verzerrung gegenüber dem ersten Durchlauf zu vermeiden. Anschließend habe ich bei einem Testlauf von 1 GB Dateien von einem internen SSD-Laufwerk auf eine über USB angeschlossene Festplatte Folgendes zeitlich 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 Entpacken offensichtlich das System belastet, bei dem die Bandbreite kein Engpass ist.


6

Besonders wenn Sie ein Copy-on-Write-Dateisystem wie BTRFS oder ZFS verwenden, rsyncist dies viel besser.

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

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

Das wichtige Flag für CoW-FSs wie BTRFS ist, --inplacedass es nur den geänderten Teil der Dateien kopiert, keine neuen für kleine Änderungen zwischen Datei-Inodes usw. erstellt. Siehe dies .


1
Nach --inplaceMöglichkeit Handbuch : The option implies --partial. Also ich denke, --partialist nicht erforderlich, zumindest in der aktuellen Version.
Dcortez

4

Beachten Sie, dass die Verwendung des Flags -z bei der internen Übertragung von Dateien auf einem Computer, dh nicht bei der Netzwerkübertragung, einen großen Unterschied in der für die Übertragung benötigten Zeit bedeuten kann.

Übertragung innerhalb derselben 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

3

Bei einer lokalen Kopie besteht der einzige Vorteil von rsync darin, dass das Kopieren vermieden wird, wenn die Datei bereits im Zielverzeichnis vorhanden ist. Die Definition von "existiert bereits" lautet (a) gleicher Dateiname (b) gleiche Größe (c) gleicher Zeitstempel. (Vielleicht der gleiche Besitzer / die gleiche Gruppe; ich bin mir nicht sicher ...)

Der "rsync-Algorithmus" eignet sich hervorragend für inkrementelle Aktualisierungen einer Datei über eine langsame Netzwerkverbindung, kostet jedoch nicht viel für eine lokale Kopie, da die vorhandene (teilweise) Datei gelesen werden muss, um die "diff" -Berechnung auszuführen.

Wenn Sie diese Art von Befehl häufig ausführen und die Anzahl der geänderten Dateien im Verhältnis zur Gesamtzahl der Dateien gering ist, sollten Sie feststellen, dass rsync schneller als cp ist. (Auch rsync hat eine --deleteOption, die Sie vielleicht nützlich finden.)


3

Es geht nicht wirklich darum, was effizienter ist.

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

1-rsync kann die Zeit für die Erstellung vorhandener Dateien beibehalten. (mit der Option -a)
2- rsync führt Multiprozess aus und überträgt entweder über lokale Sockets oder über Netzwerk-Sockets. (dh sich in mehrere Prozesse
aufteilen ) 3- Die Mehrfachverarbeitung und das Threading erhöhen Ihren Durchsatz beim Kopieren einer großen Anzahl kleiner Dateien und sogar bei mehreren größeren Dateien.

Unterm Strich ist rsync für große Datenmengen und cp für kleinere lokale Kopien. (MB bis kleiner GB-Bereich). Wenn Sie anfangen, in mehrere GB oder in den TB-Bereich zu gelangen, wählen Sie rsync. Und natürlich Netzwerkkopien, rsync den ganzen Weg.


"rsync kann die Zeit für die Erstellung vorhandener Dateien beibehalten. (mit der Option -a)" - "cp -a" kann dasselbe tun und es sogar noch besser als "rsync -a". "Besser" bedeutet, so viele Originaldaten und Metadaten wie möglich beizubehalten. Lesen Sie unix.stackexchange.com/questions/443911/… . Rsync und cp sind in Bezug auf -a fast gleichwertig.
Rublacava

Vielen Dank @Rublacava Ich habe das Web gecrawlt und speziell nach einem -aVergleich gesucht .
Francois

1

Wenn Sie cp verwenden, werden beim Kopieren von gleichnamigen Ordnern keine vorhandenen Dateien gespeichert. Nehmen wir an, Sie haben folgende Ordner:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

Dann kopieren Sie übereinander:

cp /someOtherFolder/myFolder /myFolder

Ergebnis:

/myFolder
  wellHelloThere.txt

Dies ist zumindest das, was unter macOS passiert, und ich wollte die Diff-Dateien beibehalten, also habe ich rsync verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.