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

10

Ich versuche, ungefähr 100.000 Dateien mit einer Gesamtgröße von 90 GB zu übertragen. Im Moment verwende ich den rsync-Daemon, aber er ist langsam mit 3,4 MB / s und ich muss dies einige Male tun. Ich frage mich, welche Optionen ich habe, um eine 100-MBit-Verbindung über das Internet zu maximieren und sehr zuverlässig zu sein.

inkognito2
quelle
2
Sie erhalten fast ein Drittel Ihrer Verbindung - das ist respektabel, aber nicht großartig. Wie weit vom Elektron entfernt fliegen die Dateien?
Shane Madden
50 ms Latenz zwischen den beiden Servern.
inkognito2
5
Ich habe eine Menge Dateien einmal gesehen hyperboleandahalf.blogspot.com/2010/04/…
Smudge
Wenn Sie den rsync-Daemon verwenden, ist kein ssh beteiligt, oder? Dann ist die Erklärung wahrscheinlich die Infrastruktur zwischen den Hosts. Sie können netperf oder iperf oder flowgrind ausprobieren, um die Geschwindigkeit zwischen den Hosts zu testen. Wenn dieser Test zu einer höheren Übertragungsrate führt, sollten Sie sich ansehen, wie rsync die Dinge verlangsamt: E / A auf dem Server langsam lesen, E / A auf dem Client schreiben, viele kleine Dateien, Dateisystem usw.
AndreasM

Antworten:

11

Hast du über Sneakernet nachgedacht ? Bei großen Datenmengen ist der Versand über Nacht oft schneller und billiger als die Übertragung über das Internet.

ceejayoz
quelle
10
"Unterschätzen Sie niemals die Bandbreite eines Kombis voller Bänder, die die Autobahn entlang rasen." - AST
voretaq7
1
Angesichts der Erschwinglichkeit von Gigabit-LAN-Hardware ist die Zeit, die für das Schreiben über eSATA auf eine einzelne Spindel aufgewendet wird, bei einer LAN-Übertragung nicht allzu attraktiv.
memnoch_proxy
10

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 -"

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 mbufferoder buffer. Sie sind weitgehend ähnlich, haben aber mbuffereinige Vorteile. Die Standardpuffergröße beträgt 2 MB für mbufferund 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}?bufferPlus 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, tarum sie zu einem einzigen Datenstrom zusammenzufassen. Wenn es sich um eine einzelne Datei handelt, können Sie eine catE / A-Umleitung verwenden. Der Overhead von tarvs. catist statistisch unbedeutend, daher verwende ich immer tar(oder zfs -sendwo ich kann), es sei denn, es ist bereits ein Tarball . Keines von diesen liefert garantiert Metadaten (und wird dies insbesondere catnicht tun). Wenn Sie Metadaten möchten, lasse ich das als Übung für Sie.

Schließlich ist die Verwendung sshfür einen Transportmechanismus sowohl sicher als auch mit sehr geringem Aufwand verbunden. Auch hier ist der Overhead von sshvs. ncstatistisch nicht signifikant.

Bahamat
quelle
Die Verwendung von SSH als Transportmittel ist manchmal mit einem Verschlüsselungsaufwand verbunden. Siehe: Kopieren von Dateien zwischen Linux-Computern mit starker Authentifizierung ohne Verschlüsselung
ewwhite
2
Bei Bedarf können Sie schnellere Verschlüsselungsmechanismen verwenden. Aber Sie müssen dies nicht unbedingt durch ssh leiten. Ich bevorzuge es, die Ports -O und -I auf mbuffer auf beiden Seiten zu setzen. Obwohl dies jetzt zwei Befehle sind, überspringen Sie die Verschlüsselung und maximieren die Netzwerkbandbreite, indem Sie beide Enden puffern. Ich sende einen Tar-Stream mit 720 + Mbit / s in meinem lokalen LAN mit dem Äquivalent vontar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
memnoch_proxy
2
@memnoch_proxy: Das ist ein guter Vorschlag (den ich gewählt habe), aber in der heutigen Zeit, in der die NSA sogar private Datenleitungen zwischen Rechenzentren (z. B. Google und Yahoo) mithilfe von Verschlüsselung abtastet, ist IMO immer eine gute Angewohnheit . Verwenden sshmacht das einfach. Mit stunnel, socatoder opensslfunktioniert auch, aber sie sind komplexer für einfachen Transfer einzurichten.
Bahamat
1
@ Bahamat, danke, dass ich mir die Frage noch einmal angesehen habe. Mein Vorschlag erscheint nur dann angebracht, wenn die Übertragung dann über ein VPN erfolgen kann. Für eine Internetübertragung würde ich sicherlich auch ssh verwenden.
memnoch_proxy
8

Sie erwähnen "rsync", also gehe ich davon aus, dass Sie Linux verwenden:

Warum erstellen Sie keine tar- oder tar.gz-Datei? Die Netzwerkübertragungszeit einer großen Datei ist schneller als bei vielen kleinen. Sie können es sogar komprimieren, wenn Sie möchten ...

Teer ohne Kompression:

Auf dem Quellserver:

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

Dann auf der Empfangsseite:

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

Teer mit Kompression:

Auf dem Quellserver:

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

Dann auf der Empfangsseite:

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

Sie würden einfach rsync verwenden, um die eigentliche Übertragung der (tar | tar.gz) -Dateien durchzuführen.

Soviero
quelle
Nur wenn Platz für die Aufbewahrung des Archivs vorhanden war.
Tebe
5

Sie könnten versuchen , die tarund sshTrick beschrieben hier :

tar cvzf - /wwwdata | ssh [email protected] "dd of=/backup/wwwdata.tar.gz"

Dies sollte wie folgt umschreibbar sein :

tar cvzf - /wwwdata | ssh [email protected] "tar xvf -"

Sie würden jedoch die --partialFunktionen von dabei verlieren rsync. Wenn sich die Dateien nicht sehr häufig ändern, kann rsynces sich sehr lohnen , mit einer langsamen Initiale zu leben, da dies in Zukunft viel schneller gehen wird.

Labyrinth
quelle
2

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

Das Komprimierungsverhältnis 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.

Sachin Divekar
quelle
-6

Ich bin ein großer Fan von SFTP. Ich verwende SFTP, um Medien von meinem Hauptcomputer auf meinen Server zu übertragen. Ich bekomme gute Geschwindigkeiten über LAN.

SFTP ist zuverlässig, ich würde es versuchen, da es einfach einzurichten ist und in einigen Fällen schneller sein kann.

Tillman32
quelle
5
FTP muss sterben. Es ist unverschlüsselt, es kann nicht gut mit Unterbrechungen umgehen, und es gibt mindestens ein halbes Dutzend praktikable Alternativen dafür, die nicht vollständig saugen.
MDMarra
1
Schon mal was von SFTP gehört?
Tillman32
8
Ja, hast du Es hat nichts mit dem FTP-Protokoll zu tun, außer mit dem Namen und der Tatsache, dass Dateien verschoben werden.
MDMarra
5
FTP ist auch beim Durchlaufen von Firewalls notorisch unzuverlässig (es stammt aus einer Zeit vor Firewalls, als Ihr Client einen zufälligen Port zum Akzeptieren von Rückverbindungen geöffnet hat, und der Hacker von Passive & Extended Passive FTP, um diese Einschränkung zu umgehen, ist genau das: Hackery)
voretaq7