Wie verteile ich einen großen Download auf mehrere Computer?

38

Ich muss eine große Datei (1 GB) herunterladen. Ich habe auch Zugriff auf mehrere Computer, auf denen Linux ausgeführt wird, aber jeder Computer ist durch eine Administratorrichtlinie auf eine Download-Geschwindigkeit von 50 KB / s beschränkt.

Wie verteile ich das Herunterladen dieser Datei auf mehrere Computer und füge sie zusammen, nachdem alle Segmente heruntergeladen wurden, damit ich sie schneller empfangen kann?

Meysam
quelle
7
Laden Sie es zu Hause herunter und schleichen Sie es über USB-Stick ein?
WernerCD
2
Ich erinnere mich an solche Sachen mit alter Sonnenstation, als ich an der Universität war. Überprüfe einfach, ob du genug Platz hast, um den gesamten Inhalt zu speichern. Einer meiner Freunde wurde ausgeschlossen, nachdem alle Computer des Labors gesperrt wurden (full tmp).
Kartoch
Wenn es keine Downloadbeschränkung gibt, wie schnell kann das andere Ende die Datei senden? Gibt es Übertragungsbeschränkungen zwischen Computern im LAN?
So,
@SunWKim Nein. Es gibt dort keine spezielle Einschränkung.
Meysam

Antworten:

60

Die gängigen Protokolle HTTP, FTP und SFTP unterstützen Bereichsanforderungen , sodass Sie einen Teil einer Datei anfordern können. Beachten Sie, dass dies auch Serverunterstützung erfordert, sodass dies in der Praxis möglicherweise nicht funktioniert.

Sie können curlund die Option -roder verwenden --range, um den Bereich anzugeben und schließlich nur catdie Dateien zusammenzufassen. Beispiel:

curl -r 0-104857600         -o distro1.iso 'http://files.cdn/distro.iso'
curl -r 104857601-209715200 -o distro2.iso 'http://files.cdn/distro.iso'
[…]

Und schließlich, wenn Sie die einzelnen Teile gesammelt haben, verknüpfen Sie sie:

cat distro* > distro.iso

Sie können weitere Informationen über die Datei erhalten, einschließlich ihrer Größe mit der --headOption:

curl --head 'http://files.cdn/distro.iso'

Sie können den letzten Block mit einem offenen Bereich abrufen:

curl -r 604887601- -o distro9.iso 'http://files.cdn/distro.iso'

Weitere Optionen und Erklärungen finden Sie auf der Curl-Manpage .

Sie können ssh und tmux weiter nutzen, um das Ausführen und Verfolgen der Downloads auf mehreren Servern zu vereinfachen.

Marco
quelle
15
Hinweis: Vorsicht, bei Verwendung von cat distro* > ...check könnte die Sortierung der Dateien, wie *von Ihrer Shell erweitert, so aussehen: distro1.iso distro10.iso distro11.iso ...und somit in der falschen Reihenfolge verketten.
Sebastian
8
Ein Fix für @ Sebastians Notiz wäre:cat distro{1..10}.iso
nonchip
1
Diese Lösung ist Shell-spezifisch und nicht portabel. cat $(seq -fdist%g.iso 1 10)sollte vorhersehbarer sein, scheitert cshaber. Das Ersetzen $(…)durch Backtics scheint in den meisten Shells zu funktionieren.
Marco
3
@Marco seqist auch kein portierbarer Befehl. You can use distro001.iso, distro002.iso...distroy010.iso
Stéphane Chazelas
Entspricht der Administratorrichtlinie, 50 kB / s pro Übertragungsverbindung oder der auf dem Computer zulässigen Gesamtbandbreite. In diesem Fall kann die Antwort auf demselben Computer verwendet werden, anstatt sich an verschiedenen Arbeitsstationen anmelden zu müssen.
So,
0

Das Laden einer 1-Gigabyte-Datei mit 50 Kilobyte pro Sekunde würde ungefähr 5,5 Stunden dauern.

Es scheint, dass der Aufwand, mehrere Computer zu koordinieren, um Teilergebnisse zu erhalten, einige Zeit sparen kann.

Sie können sich Bittorrent ansehen und Web-Seeding zusammen mit Übertragungen über Peer Exchange nutzen. Jeder Client kann Teile empfangen und fertige Teile mit im lokalen Netzwerk (LAN) teilen. Sie haben auf jedem Computer dieselbe 1-GB-Datei, aber das Zusammenführen von Teilen ist für Sie automatisiert.

Sonne
quelle