Was ist der schnellste und zuverlässigste Weg, viele Dateien zu übertragen?

Was ist der schnellste und zuverlässigste Weg, viele Dateien zu übertragen?

Ich versuche, etwa 100.000 Dateien mit einer Gesamtgröße von 90 GB zu übertragen. Momentan verwende ich den Rsync-Daemon, aber der ist langsam (3,4 MBit/s) und ich muss das mehrmals machen. Ich frage mich, welche Möglichkeiten ich habe, um eine 100-MBit-Verbindung über das Internet maximal auszunutzen und sehr zuverlässig zu sein.

Antwort1

Haben Sie darüber nachgedachtSneakernet– Bei großen Datensätzen ist der Versand über Nacht oft schneller und günstiger als die Übertragung über das Internet.

Antwort2

Wie? Oder TL;DR

Die schnellste Methode, die ich gefunden habe, ist eine Kombination aus tar, mbufferund ssh.

Z.B:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

Damit habe ich dauerhafte lokale Netzwerkübertragungen mit über 950 Mbit/s auf 1-GB-Verbindungen erreicht. Ersetzen Sie die Pfade in jedem Tar-Befehl so, dass sie für das, was Sie übertragen, geeignet sind.

Warum? mbuffer!

Der mit Abstand größte Engpass bei der Übertragung großer Dateien über ein Netzwerk ist die Festplatten-E/A. Die Antwort darauf ist mbufferoder buffer. Sie sind sich weitgehend ähnlich, mbufferhaben aber einige Vorteile. Die Standardpuffergröße beträgt 2 MB für mbufferund 1 MB für buffer. Größere Puffer sind wahrscheinlich nie leer. Die beste Leistung erzielen Sie, wenn Sie eine Blockgröße wählen, die das kleinste gemeinsame Vielfache der nativen Blockgröße sowohl auf dem Ziel- als auch auf dem Zieldateisystem ist.

Pufferung ist das, was machtalleder Unterschied!Benutzen Sie es, wenn Sie es haben! Wenn Sie es nicht haben, holen Sie es sich! Die Verwendung von (m}?bufferallem zusammen ist besser als alles allein. Es ist fast buchstäblich ein Allheilmittel für langsame Netzwerkdateiübertragungen.

Wenn Sie mehrere Dateien übertragen, verwenden Sie , tarum sie in einem einzigen Datenstrom zusammenzufassen. Wenn es sich um eine einzelne Datei handelt, können Sie catoder die E/A-Umleitung verwenden. Der Aufwand von tarvs. catist statistisch unbedeutend, daher verwende ich immer tar(oder zfs -sendwo ich kann), es sei denn, es ist bereits einTarball. Keiner von beiden gibt Ihnen garantiert Metadaten (und catwird es insbesondere nicht). Wenn Sie Metadaten wollen, überlasse ich Ihnen das als Übung.

Schließlich sshist die Verwendung als Transportmechanismus sicher und verursacht nur sehr wenig Mehraufwand. Auch hier ist der Mehraufwand von sshvs. ncstatistisch unbedeutend.

Antwort3

Sie erwähnen „rsync“, also nehme ich an, dass Sie Linux verwenden:

Warum erstellen Sie keine Tar- oder Tar.gz-Datei? Die Netzwerkübertragungszeit einer großen Datei ist kürzer als die vieler kleiner Dateien. Sie können die Datei sogar komprimieren, wenn Sie möchten ...

Tar ohne Komprimierung:

Auf dem Quellserver:

tar -cf file.tar /path/to/files/

Dann auf der Empfängerseite:

cd /path/to/files/
tar -xf /path/to/file.tar

Tar mit Komprimierung:

Auf dem Quellserver:

tar -czf file.tar.gz /path/to/files/

Dann auf der Empfängerseite:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

Für die eigentliche Übertragung der (tar|tar.gz)-Dateien verwenden Sie einfach rsync.

Antwort4

Sie können verschiedene Komprimierungsoptionen von rsync verwenden.

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

Die Komprimierungsrate für Binärdateien ist sehr niedrig, daher können Sie diese Dateien mit „--skip-compress“ überspringen, z. B. ISO, bereits archivierte und komprimierte Tarballs usw.

verwandte Informationen