Ich habe eine große Datenmenge von einem Computer zu einem anderen gesendet. Wenn ich mit rsync (oder einer anderen Methode) sende, wird die Geschwindigkeit konstant 320 kb / s betragen. Wenn ich zwei oder drei Übertragungen gleichzeitig initiiere, wird jede bei 320 ausgeführt, und wenn ich vier Übertragungen gleichzeitig durchführe, wird die Verbindung maximal.
Ich muss in der Lage sein, Daten so schnell wie möglich zu senden, daher benötige ich ein Tool, das inverses Multiplexing mit Dateiübertragungen durchführen kann. Ich brauche eine allgemeine Lösung, daher ist es nicht praktikabel, Split auf dem Quellcomputer auszuführen und sie am anderen Ende zusammen zu catten. Ich brauche das, um automatisiert arbeiten zu können.
Gibt es ein Tool, das dies tut, oder muss ich mein eigenes erstellen? Der Absender ist CentOS, der Empfänger ist FreeBSD.
quelle
lftp
ist großartig, aber ich bin nicht in der Lage, es beim UPloading mehrteilig zu machen. Ich benutzemirror --use-pget-n=20 -R
- aber es scheint, dass--use-pget-n
nur beim Herunterladen funktioniert.-P20
funktioniert, um mehrere Dateien hochzuladen, aber ich kann nicht jede Datei mehrteilig.pget -n
.mirror
ist bidirektional; Daspget
Argument gilt nur für heruntergeladene Dateien.Es gibt ein paar Tools, die funktionieren könnten.
LFTP - unterstützt FTP, HTTP und SFTP. Unterstützt das Herunterladen einer einzelnen Datei über mehrere Verbindungen. Angenommen, Sie möchten eine Datei von remoteServer auf localServer übertragen, installieren LFTP auf localServer und führen Folgendes aus:
lftp -e 'pget -n 4 sftp://[email protected]/some/dir/file.ext'
Das '-n 4' gibt an, wie viele Verbindungen parallel verwendet werden sollen.
Hinzu kommen die zahlreichen Tools für den Download-Beschleuniger, die jedoch in der Regel nur HTTP oder FTP unterstützen, die Sie möglicherweise nicht auf dem Remote-Server einrichten müssen. Einige Beispiele sind Axel , aria2 und ProZilla
quelle
Wenn Sie nur wenige und große Dateien verwenden
lftp -e 'mirror --parallel=2 --use-pget-n=10 <remote_dir> <local_dir>' <ftp_server>
: Sie werden 2 Dateien herunterladen, wobei jede Datei in 10 Segmente mit insgesamt 20 FTP-Verbindungen aufgeteilt ist<ftp_server>
.Wenn Sie eine große Anzahl kleiner Dateien haben, verwenden
lftp -e 'mirror --parallel=100 <remote_dir> <local_dir>' <ftp_server>
Sie: Dann laden Sie 100 Dateien ohne Segmentierung parallel herunter. Insgesamt sind 100 Verbindungen offen. Dies kann dazu führen, dass die verfügbaren Clients auf dem Server nicht mehr verfügbar sind oder dass Sie auf einigen Servern gesperrt werden.Sie können verwenden
--continue
, um den Job fortzusetzen :) und die-R
Option zum Hochladen statt Herunterladen (und dann die Argumentreihenfolge zu wechseln<local_dir> <remote_dir>
).quelle
Möglicherweise können Sie Ihre TCP-Einstellungen optimieren, um dieses Problem zu vermeiden. Dies hängt davon ab, was die Beschränkung von 320 KB / s pro Verbindung verursacht. Ich vermute, dass es keine explizite Beschränkung der Verbindungsrate durch den ISP gibt. Es gibt zwei mögliche Gründe für die Drosselung:
Im ersten Fall würde jede TCP-Verbindung bei der Standard-TCP-Überlastungskontrolle gleichermaßen konkurrieren. Sie können dies auch verbessern, indem Sie die Algorithmen für die Überlastung der Steuerung ändern oder das Backoff reduzieren.
Im zweiten Fall sind Sie nicht durch Paketverlust eingeschränkt. Das Hinzufügen zusätzlicher Verbindungen ist eine grobe Methode zum Erweitern der Gesamtfenstergröße. Wenn Sie die Fenstergröße manuell erhöhen können, wird das Problem behoben. (Dies erfordert möglicherweise eine TCP-Fensterskalierung, wenn die Verbindungslatenz ausreichend hoch ist.)
Sie können ungefähr feststellen, wie groß das Fenster sein muss, indem Sie die Ping-Zeit für die Hin- und Rückfahrt mit der Gesamtgeschwindigkeit der Verbindung multiplizieren. 1280 KB / s benötigen 1280 (1311 für 1024 = 1 KB) Bytes pro Millisekunde Roundtrip. Ein 64K-Puffer wird bei einer Latenz von ca. 50 ms maximal ausgelastet, was ziemlich typisch ist. Ein 16K-Puffer würde dann um 320KB / s sättigen.
quelle
Wie sind Ihre Daten strukturiert? Ein paar große Dateien? Ein paar große Verzeichnisse? Sie könnten mehrere Instanzen von rsync in bestimmten Zweigen Ihres Verzeichnisbaums erzeugen.
Es hängt alles davon ab, wie Ihre Quelldaten strukturiert sind. Es gibt Tonnen von Unix-Werkzeugen zum Schneiden, Würfeln und Zusammensetzen von Dateien.
quelle
Wenn Sie ein passwortloses SSH-Login einrichten können, werden 4 gleichzeitige SCP-Verbindungen (-n) geöffnet, wobei jede Verbindung 4 Dateien (-L) verarbeitet:
Datei /tmp/scp.sh:
quelle
Versuchen Sie, alle Dateien nach Inode zu sortieren (find / mydir -type f -print | xargs ls -i | sort -n) und übertragen Sie sie beispielsweise mit cpio über ssh. Dadurch wird Ihre Festplatte voll und das Netzwerk wird zum Engpass. Schneller als das ist es schwer, über das Netzwerk zu gehen.
quelle
Ich kenne ein Tool, das Dateien in Stücken übertragen kann. Das Tool heißt 'rtorrent' Paket / Port, das auf beiden Hosts verfügbar ist;) BitTorrent-Clients reservieren häufig Speicherplatz vor der Übertragung, und Chunks werden direkt von Sockets auf die Festplatte geschrieben. Außerdem können Sie ALLE Übertragungszustände in einem netten Bildschirm überprüfen.
Sie können einfache Bash-Skripte erstellen, um die Erstellung von "* .torrent" -Dateien zu automatisieren, und einen Befehl an den Remote-Computer senden, damit dieser ihn herunterlädt. Das sieht ein bisschen hässlich aus, aber ich glaube nicht, dass Sie eine einfache Lösung finden werden, ohne sie zu entwickeln :)
quelle
FTP verwendet mehrere Verbindungen zum Herunterladen. Wenn Sie einen sicheren Kanal für FTP über ein VPN oder FTP über SSH einrichten können , sollten Sie in der Lage sein, Ihre Netzwerkverbindung maximal zu nutzen. (Beachten Sie, dass für FTP über SSH besondere Überlegungen erforderlich sind - siehe Link.)
FTPS (FTP über SSL) kann auch das tun, was Sie benötigen.
Sie können auch einen SFTP-Client verwenden, der mehrere Verbindungen unterstützt. Ich bin mir jedoch nicht sicher, ob SFTP mehrere Verbindungen für eine einzelne Datei unterstützt. Dies sollte die meiste Zeit das tun, was Sie brauchen, kann jedoch nicht den maximalen Durchsatz liefern, wenn Sie nur eine große Datei übertragen müssen.
quelle
Lösung 1: Ich bin mir nicht sicher, ob dies in Ihrem Fall sinnvoll ist, aber Sie können ein übergreifendes Archiv erstellen (z. B. eine in Blöcke aufgeteilte Tarfile oder ein übergreifendes 7zip-Archiv) und dann mehrere Instanzen von rsync verwenden, um sie zu senden das Netzwerk und montieren / extrahieren sie auf der anderen Seite. Sie können ein Allzweck-Skript schreiben, dessen Argumente das zu übertragende Verzeichnis und die Anzahl der zu verwendenden Verbindungen sind. Der offensichtliche Nachteil ist, dass Sie auf beiden Seiten doppelt so viel freien Speicherplatz benötigen und den zusätzlichen Aufwand für das Archivieren / Extrahieren der Dateien auf beiden Seiten haben.
Lösung 2: Eine bessere Lösung wäre, ein Skript oder Programm zu schreiben, das den großen Verzeichnisbaum anhand der Größe in Teilbäume aufteilt und diese Teilbäume dann parallel kopiert. Es kann die Sache vereinfachen, wenn Sie zuerst die gesamte Verzeichnisstruktur (ohne die Dateien) kopieren.
quelle
Laufen Sie zwei Computer in einer vertrauenswürdigen Umgebung? Sie könnten Netcat versuchen . Auf der Serverseite:
und auf dem Client:
Sie können die Client-Verbindung einen SSH-Tunnel verwenden lassen:
Sogar eine ganze Partition kann so verschoben werden:
und auf dem Client:
.
Hinweis
Netcat ist nicht das sicherste Übertragungswerkzeug, aber in der richtigen Umgebung kann es schnell sein, weil es einen so geringen Overhead hat.
HowtoForge hat eine gute Beispielseite .
quelle