Wie? Oder TL; DR
Die schnellste Methode , die ich gefunden habe , ist eine Kombination aus tar
, mbuffer
und ssh
.
Z.B:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Auf diese Weise habe ich dauerhafte lokale Netzwerkübertragungen über 950 Mbit / s auf 1-Gbit-Verbindungen erreicht. Ersetzen Sie die Pfade in jedem tar-Befehl so, dass sie für die Übertragung geeignet sind.
Warum? mbuffer!
Der größte Engpass bei der Übertragung großer Dateien über ein Netzwerk ist bei weitem die Festplatten-E / A. Die Antwort darauf lautet mbuffer
oder buffer
. Sie sind weitgehend ähnlich, haben aber mbuffer
einige Vorteile. Die Standardpuffergröße beträgt 2 MB für mbuffer
und 1 MB für buffer
. Größere Puffer sind mit größerer Wahrscheinlichkeit niemals leer. Wenn Sie eine Blockgröße auswählen, die das niedrigste gemeinsame Vielfache der nativen Blockgröße sowohl im Ziel- als auch im Zieldateisystem ist, erzielen Sie die beste Leistung.
Buffering ist die Sache , die macht alle den Unterschied! Verwenden Sie es, wenn Sie es haben! Wenn Sie es nicht haben, holen Sie es sich! Mit (m}?buffer
Plus alles ist besser als alles , was von selbst aus . Es ist fast buchstäblich ein Allheilmittel für langsame Netzwerk-Dateiübertragungen.
Wenn Sie mehrere Dateien übertragen, verwenden Sie diese, tar
um sie zu einem einzigen Datenstrom zusammenzufassen. Wenn es sich um eine einzelne Datei handelt, können Sie eine cat
E / A-Umleitung verwenden. Der Overhead von tar
vs. cat
ist statistisch unbedeutend, daher verwende ich immer tar
(oder zfs -send
wo ich kann), es sei denn, es ist bereits ein Tarball . Keines von diesen liefert garantiert Metadaten (und wird dies insbesondere cat
nicht tun). Wenn Sie Metadaten möchten, lasse ich das als Übung für Sie.
Schließlich ist die Verwendung ssh
für einen Transportmechanismus sowohl sicher als auch mit sehr geringem Aufwand verbunden. Auch hier ist der Overhead von ssh
vs. nc
statistisch nicht signifikant.