Ich finde mich oft dabei, Ordner mit 10K - 100K Dateien an einen entfernten Computer zu senden (innerhalb desselben Netzwerks auf dem Campus).
Ich habe mich nur gefragt, ob es Gründe gibt, das zu glauben,
tar + rsync + untar
Oder einfach
tar (from src to dest) + untar
könnte in der Praxis schneller sein als
rsync
beim erstmaligen Übertragen der Dateien .
Ich bin an einer Antwort interessiert, die das oben Genannte in zwei Szenarien anspricht: Komprimierung und Nichtverwendung.
Aktualisieren
Ich habe gerade einige Experimente durchgeführt, bei denen 10.000 kleine Dateien (Gesamtgröße = 50 MB) verschoben wurden, und tar+rsync+untar
war durchweg schneller als die rsync
direkte Ausführung (beide ohne Komprimierung).
tar cf - . | ssh remotehost 'cd /target/dir && tar xf -'
Antworten:
Wenn Sie den gleichen Satz von Dateien senden,
rsync
ist dies besser geeignet, da nur Unterschiede gesendet werden.tar
wird immer alles senden und dies ist eine Verschwendung von Ressourcen, wenn viele der Daten bereits vorhanden sind. Dastar + rsync + untar
verliert in diesem Fall diesen Vorteil sowie den Vorteil, die Ordner synchron zu haltenrsync --delete
.Wenn Sie die Dateien zum ersten Mal kopieren, erst packen, dann senden und dann entpacken (AFAIK
rsync
nimmt keine weitergeleiteten Eingaben entgegen), ist dies umständlich und immer schlimmer als nur das Synchronisieren, darsync
Sie keine Aufgabe mehr alstar
ohnehin erledigen müssen .Tipp: rsync Version 3 oder höher führt eine inkrementelle Rekursion durch. Dies bedeutet, dass der Kopiervorgang fast unmittelbar bevor alle Dateien gezählt werden, gestartet wird.
Tipp2: Wenn Sie
rsync
über verwendenssh
, können Sie auch eines von beiden verwendentar+ssh
oder nur
scp
Allgemeine Regel, halte es einfach.
AKTUALISIEREN:
Ich habe 59 Millionen Demo-Daten erstellt
und die Dateiübertragung auf einen Remote-Server (nicht im selben LAN) mit beiden Methoden mehrmals getestet
während Sie die Protokolle von den gesendeten SSH-Verkehrspaketen trennen
In diesem Fall kann ich keinen Vorteil bei weniger Netzwerkverkehr mit rsync + tar feststellen. Dies wird erwartet, wenn die Standard-MTU 1500 ist und die Dateien 10 KB groß sind. rsync + tar hatte mehr Verkehr generiert, war 2-3 Sekunden langsamer und hinterließ zwei Mülldateien, die bereinigt werden mussten.
Ich habe die gleichen Tests auf zwei Computern im selben LAN durchgeführt, und dort hat rsync + tar viel bessere Zeiten und viel weniger Netzwerkverkehr erzielt. Ich vermute wegen Jumbo Frames.
Vielleicht wäre rsync + tar besser als nur rsync für einen viel größeren Datensatz. Aber ehrlich gesagt denke ich nicht, dass es die Mühe wert ist, Sie brauchen auf jeder Seite doppelten Platz zum Packen und Auspacken, und es gibt ein paar andere Möglichkeiten, wie ich oben bereits erwähnt habe.
quelle
rsync
;)z
mit rsync verwenden, wird die Verbindung komprimiert. Mit der Menge an CPU-Leistung, die wir heutzutage haben, ist die Komprimierung im Vergleich zu der Menge an Bandbreite, die Sie sparen, trivial. Sie kann ~ 1/10 der unkomprimierten für Textdateien seinrsync
macht auch Komprimierung. Benutze die-z
Flagge. Wennssh
Sie überfahren, können Sie auch den Komprimierungsmodus von ssh verwenden. Ich habe das Gefühl, dass wiederholte Komprimierungsstufen nicht nützlich sind. Es werden nur Zyklen ohne signifikantes Ergebnis gebrannt. Ich würde empfehlen, mitrsync
Komprimierung zu experimentieren . Es scheint ziemlich effektiv zu sein. Und ich würde vorschlagen, die Verwendung vontar
oder jede andere Pre / Post-Komprimierung zu überspringen .Normalerweise benutze ich rsync als
rsync -abvz --partial...
.quelle
rsync
Komprimieren von Dateien mit bestimmten Suffixen, einschließlich.gz
und.tgz
und anderen, standardmäßig übersprungen wird . Durchsuchen Sie diersync
Manpage nach--skip-compress
für die vollständige Liste.Ich musste heute mein Home-Verzeichnis auf NAS sichern und bin auf diese Diskussion gestoßen, da ich dachte, ich würde meine Ergebnisse hinzufügen. Um es kurz zu machen: Das Tarieren über das Netzwerk auf das Zieldateisystem ist in meiner Umgebung viel schneller als das Synchronisieren auf dasselbe Ziel.
Umgebung: Quellcomputer i7-Desktop mit SSD-Festplatte. Zielcomputer Synology NAS DS413j mit einer Gigabit-LAN-Verbindung zum Quellcomputer.
Die genaue Spezifikation des betreffenden Kits wirkt sich natürlich auf die Leistung aus, und ich kenne die Details meines genauen Setups in Bezug auf die Qualität der Netzwerkhardware an jedem Ende nicht.
Die Quelldateien sind mein ~ / .cache-Ordner, der 1,2 GB großteils sehr kleiner Dateien enthält.
Ich habe 1a und 1b als völlig getrennte Schritte gehalten, um die Aufgabe zu veranschaulichen. Für praktische Anwendungen würde ich empfehlen, was Gilles oben gepostet hat, indem er die Teerausgabe über ssh an einen Vorgang zum Entgaren auf dem Empfänger weiterleitet.
Timings:
Es ist sehr klar, dass rsync im Vergleich zu einer tar-Operation erstaunlich schlecht lief, was vermutlich auf die oben erwähnte Netzwerkleistung zurückzuführen ist.
Ich würde jedem empfehlen, der große Mengen größtenteils kleiner Dateien sichern möchte, z. B. eine Sicherung des Basisverzeichnisses, den tar-Ansatz zu verwenden. rsync scheint eine sehr schlechte Wahl zu sein. Ich werde auf diesen Beitrag zurückkommen, wenn es scheint, dass ich in einem meiner Verfahren ungenau war.
Nick
quelle
-z
von rsync scheint dieser Test unvollständig zu sein.z
Argument, wie ich es verwendet habe, komprimiert keine Daten (siehe unix.stackexchange.com/questions/127169/… ), so weit ich sehen kann, ist die Verwendung von rsync ohne Komprimierung ein fairer Vergleich. Wenn ich die tar-Ausgabe durch eine Komprimierungsbibliothek wie bzip2 oder gzip leiten-z
würde , wäre das sinnvoll.Die Verwendung von rsync zum Senden eines Tar-Archivs nach Aufforderung wäre eine Verschwendung oder eine Verschwendung von Ressourcen, da Sie dem Prozess eine Überprüfungsebene hinzufügen würden. Rsync würde die tar-Datei auf ihre Richtigkeit überprüfen, wenn Sie lieber die einzelnen Dateien überprüfen möchten. (Es hilft nicht, zu wissen, dass die Tar-Datei, die auf der sendenden Seite möglicherweise defekt war, auf der empfangenden Seite bereits den gleichen Effekt zeigt). Wenn Sie ein Archiv senden, brauchen Sie nur ssh / scp.
Der eine Grund, warum Sie möglicherweise das Senden eines Archivs auswählen müssen, wäre, wenn der Teer Ihrer Wahl in der Lage wäre, mehr Dateisystem-Specials wie die Zugriffssteuerungsliste oder andere Metadaten, die häufig in Extended Attributes (Solaris) oder Ressource Forks (MacOS) gespeichert sind, beizubehalten ). Wenn Sie sich mit solchen Dingen befassen, ist es Ihr Hauptanliegen, welche Tools in der Lage sind, alle Informationen, die der Datei im Quellendateisystem zugeordnet sind, zu speichern, sofern das Zieldateisystem die Möglichkeit hat, diese ebenfalls zu verfolgen.
Wenn Geschwindigkeit Ihr Hauptanliegen ist, hängt dies stark von der Größe Ihrer Dateien ab. Im Allgemeinen wird eine Vielzahl winziger Dateien schlecht über rsync oder scp skaliert, da alle einzelne Netzwerkpakete verschwenden, wobei eine tar-Datei mehrere davon innerhalb der Datenlast eines einzelnen Netzwerkpakets enthalten würde. Noch besser, wenn die TAR-Datei komprimiert wäre, da die kleinen Dateien höchstwahrscheinlich insgesamt besser komprimiert würden als einzeln. Soweit ich weiß, können sowohl rsync als auch scp nicht optimiert werden, wenn einzelne Dateien wie bei einer Erstübertragung gesendet werden. Dabei belegt jede Datei einen gesamten Datenrahmen mit dem gesamten Protokoll-Overhead (und verschwendet mehr Zeit für das Hin- und Herchecken). Jedoch Janecekgibt an, dass dies nur für scp zutrifft und dass rsync den Netzwerkverkehr optimieren würde, jedoch auf Kosten des Aufbaus großer Datenstrukturen im Speicher. Siehe Artikel Efficient File Transfer, Janecek 2006 . Ihm zufolge ist es immer noch wahr, dass scp und rsync bei kleinen Dateien schlecht skalieren, aber aus ganz anderen Gründen. Ich schätze, ich muss dieses Wochenende nach Quellen suchen, um das herauszufinden.
Wenn Sie wissen, dass Sie größtenteils größere Dateien senden, gibt es aus praktischen Gründen keinen großen Geschwindigkeitsunterschied, und die Verwendung von rsync hat den zusätzlichen Vorteil, dass Sie in der Lage sind, zu übernehmen, wo es bei einer Unterbrechung aufgehört hat.
Postscriptum: In diesen Tagen scheint rdist in Vergessenheit zu geraten, aber vor den Tagen von rsync war es ein sehr leistungsfähiges und weit verbreitetes Werkzeug (sicher bei Verwendung über ssh, unsicher ansonsten). Ich würde allerdings nicht so gut wie rsync abschneiden, da es nicht optimiert wurde, nur geänderte Inhalte zu übertragen. Der Hauptunterschied zu rsync liegt in der Art und Weise, wie es konfiguriert ist und wie die Regeln für das Aktualisieren von Dateien formuliert sind.
quelle
Bei kleinen Verzeichnissen (klein wie der belegte Speicherplatz) hängt dies vom Aufwand ab, mit dem die Dateiinformationen für die zu synchronisierenden Dateien überprüft werden. Auf der einen Seite,
rsync
spart es Zeit beim Übertragen der unveränderten Dateien, andererseits müssen Informationen zu jeder Datei übertragen werden.Ich kenne die Interna von nicht genau
rsync
. Ob die Dateistatistiken Verzögerung verursachen, hängt davon ab, wiersync
Daten übertragen werden. Wenn die Dateistatistiken einzeln übertragen werden, kann die RTT tar + rsync + untar schneller machen.Aber wenn Sie 1 GB Daten haben, wird Rsync viel schneller sein, es sei denn, Ihre Verbindung ist wirklich schnell!
quelle
Ich musste genau einmal ein paar Terabyte Daten im ganzen Land verschieben. Als Experiment habe ich zwei der Übertragungen mit
rsync
und durchgeführt, umssh/tar
zu sehen, wie sie verglichen werden.Die Ergebnisse:
rsync
übertragen die Dateien mit einer durchschnittlichen Rate von 2,76 Megabyte pro Sekunde.ssh/tar
übertragen die Dateien mit einer durchschnittlichen Rate von 4,18 Megabyte pro Sekunde.Die Details: Meine Daten bestehen aus Millionen von .gz-komprimierten Dateien, deren durchschnittliche Größe 10 Megabyte beträgt, einige jedoch mehr als ein Gigabyte. Es gibt eine Verzeichnisstruktur, die jedoch durch die Größe der Daten in den Dateien in den Schatten gestellt wird. Wenn ich fast noch etwas zu tun hätte, hätte ich nur verwendet,
rsync
aber in diesem Fall ist dasssh/tar
eine funktionale Lösung.Mein Job bei
rsync
besteht aus:Dabei ist fileList.txt eine lange Liste der relativen Pfadnamen der Dateien auf der anderen Seite. (Mir ist aufgefallen, dass das
--compress
für komprimierte Dateien nach dem Start nicht produktiv ist, ich aber keinen Neustart durchführen wollte.)Ich habe eine andere mit ssh und tar gestartet, die folgendes hat:
Sie werden feststellen, dass dies alles kopiert, sorry, dies ist kein 100% iger Vergleich zwischen Äpfeln.
Ich sollte hinzufügen, dass ich, während ich das interne Firmennetzwerk benutze, einen Vermittler zu Rate ziehen muss, um an den Datenquellencomputer zu gelangen. Die Ping-Zeit von meinem Zielcomputer zum Intermediär beträgt 21 ms und vom Intermediär zur Datenquelle 26 ms. Dies war für beide Transfers gleich.
Die SSL-Verbindung über den Vermittler erfolgt über den
~/.ssh/config
Eintrag:quelle
Zeit dies:
quelle