Gibt es ein vorhandenes Tool, mit dem große Dateien über eine schlechte Verbindung heruntergeladen werden können?
Ich muss regelmäßig eine relativ kleine Datei herunterladen: 300 MB, aber die langsame (80-120 KByte / s) TCP-Verbindung wird nach 10-120 Sekunden zufällig unterbrochen. (Es handelt sich um ein Netzwerk eines großen Unternehmens. Wir haben mehrere Male mit den (aus Indien stammenden) Administratoren Kontakt aufgenommen, aber sie können oder wollen nichts tun.) Möglicherweise liegt das Problem bei ihren Reverse-Proxies / Load-Balancern.
Bisher habe ich eine modifizierte Version von pcurl verwendet: https://github.com/brunoborges/pcurl
Ich habe diese Zeile geändert:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
dazu:
curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
--retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
Ich musste hinzufügen, --speed-limit 2048 --speed-time 10
weil die Verbindung meist nur für Minuten hängt, wenn es fehlschlägt.
Aber in letzter Zeit kann auch dieses Skript nicht abgeschlossen werden.
Ein Problem ist, dass es das -C -
Teil zu ignorieren scheint , so dass es das Segment nach einem erneuten Versuch nicht "fortsetzt". Es scheint die zugehörige temporäre Datei abzuschneiden und nach jedem Fehler von vorne zu beginnen. (Ich denke , das --range
und die -C
Optionen können nicht zusammen verwendet werden.)
Das andere Problem ist, dass dieses Skript alle Segmente gleichzeitig herunterlädt. Es kann nicht über 300 Segmente verfügen, von denen jeweils nur 10 heruntergeladen werden.
Ich dachte daran, ein Download-Tool in C # für diesen speziellen Zweck zu schreiben, aber wenn es ein vorhandenes Tool gibt oder der Befehl curl mit verschiedenen Parametern ordnungsgemäß funktionieren könnte, könnte ich etwas Zeit sparen.
UPDATE 1: Zusätzliche Informationen: Die Funktion zum parallelen Herunterladen sollte nicht entfernt werden, da für jede Verbindung eine Bandbreitenbeschränkung (80-120 KB / s, meistens 80) gilt, sodass 10 Verbindungen eine 10-fache Geschwindigkeit verursachen können. Ich muss den Dateidownload in 1 Stunde abschließen, da die Datei stündlich generiert wird.
rsync
(wodurch Sie Übertragungen neu starten können)?lftp
Ermöglicht auch den automatischen Neustart von Übertragungen.Antworten:
lftp
( Wikipedia ) ist dafür gut. Es unterstützt eine Reihe von Protokollen, kann Dateien über mehrere parallele Verbindungen herunterladen (nützlich, wenn ein großer Paketverlust nicht durch Überlastung verursacht wird) und das Herunterladen automatisch fortsetzen. Es ist auch skriptfähig.Hier einschließlich der Feinabstimmung, die Sie vorgenommen haben (Dank an Sie):
quelle
lftp -e 'set net:timeout 15; set net:max-retries 0; set net:reconnect-interval-base 3; set net:reconnect-interval-max 3; pget -n 10 -c "https://host/file.tar.gz"; exit'
net:idle
Einstellung. Vielen Dank! Ich werde meine Lösung der Frage hinzufügen.Content-MD5
undDigest
(obwohl ich nicht weiß, ob dieselftp
unterstützt werden oder ob sie im Fall des OP verwendet werden würden). Auf jeden Fall sieht es nicht so aus, als wäre Torrent eine Option für das OP.Ich kann dies in Ihrer Situation nicht für Sie testen, aber Sie sollten es nicht
--range
mit verwenden-C -
. Hier ist, was die Manpage zu diesem Thema zu sagen hat:Versuchen Sie dies stattdessen:
Ich würde auch dringend empfehlen, dass Sie Ihre Variablen immer in doppelte Anführungszeichen setzen, damit die Shell nicht versucht, sie zu analysieren. (Betrachten Sie eine URL
https://example.net/param1=one¶m2=two
, unter der die Shell den Wert aufteilen würde&
.)Übrigens sind 120 KB / s ungefähr 1,2 MB / s, was in vielen Teilen der Welt eine typische xDSL-Upload-Geschwindigkeit ist. 10 Sekunden pro MB, also etwas weniger als eine Stunde für die gesamte Datei. Nicht so langsam, obwohl ich es zu schätzen weiß, dass es Ihnen mehr um Zuverlässigkeit als um Geschwindigkeit geht.
quelle
Vielleicht hast du mehr Glück mit
wget --continue
:Siehe auch https://www.cyberciti.biz/tips/wget-resume-broken-download.html
quelle
Außerhalb der Box: Setzen Sie eine Augenklappe auf und verwenden Sie Bittorrent. Machen Sie die Blockgröße klein, wenn Sie den Torrent erstellen. Verschlüsseln Sie die Datei natürlich, damit jeder andere, der den Torrent findet, nichts Nützliches bekommt.
quelle
Ich hatte das gleiche Problem in meinem vorherigen Job (außer bei externen Datenbank-Backups mit mehr als 300 GB auf einer (vom Büro aus) instabilen Verbindung). Benutzer hatten schwerwiegende Probleme beim Herunterladen von Dateien, die größer als ca. 1 GB, bevor die Verbindung unterbrochen wurde. Kein Wunder, da sie die Standard-Windows-Datei zum Kopieren und Einfügen über eine RDP-Verbindung verwendeten.
Eine Sache, die ich herausfand, war, dass unsere VPN-Einstellungen vollständig nicht mit dem Netzwerk-Setup übereinstimmten (hauptsächlich die MTU-Länge). Die zweite Sache ist, dass der Windows-Dateikopierer NICHT zum Kopieren von Dingen über das Internet gedacht ist.
Meine erste Lösung war ein einfacher FTP-Server, der jedoch das Problem der Übertragungszeit nicht löste (häufig 3-4 Stunden bei unserer Verbindung).
Meine zweite Lösung bestand darin, mit Syncthing die Dateien direkt an ein internes NAS zu senden. Jede Nacht nach Abschluss der Backups schickte Syncthing alles, was wir brauchten, zurück zu einem NAS im Büro. Das Problem der mehr als 3-stündigen Übertragungszeit wurde nicht nur gelöst, es wurden mir auch 1 bis 2 Stunden Zeit gespart, um die Daten im Falle einer Krise zu übermitteln. Jeden Morgen um 8:00 Uhr wurden die Dateien auf dem NAS aktualisiert, und wir hatten unsere Backups fertig. Selbst bei großen Dateien (an einer Stelle eine Datenbank mit fast 700 GB) habe ich noch keine Dateibeschädigung oder andere Probleme ...
Syncthing ist sehr einfach einzurichten und zu verwalten, für alle Plattformen (auch für Telefone) verfügbar und kann sehr gut mit schlechten Verbindungen umgehen. Wenn die Verbindung fehlschlägt, wartet Syncthing einfach ein paar Minuten und versucht es erneut.
Sie benötigen einen lokalen Ordner, mit dem Sie die Daten synchronisieren können, aber Ihre Dateien sind fast verfügbar, sobald sie aktualisiert werden.
Eine weitere gute Sache bei der Synchronisierung ist, dass sie so eingestellt werden kann, dass nur die Änderungen in der Datei synchronisiert werden (wie bei einer differenziellen Sicherung). Dies kann möglicherweise einen Teil Ihres Bandbreitenproblems lösen.
quelle
Sie könnten eine alte Lösung für das Verschieben von Dateien über eine miese Verbindung in Betracht ziehen - zmodem .
Dies wurde entwickelt, als 2400-Baud-Modems, bei denen die Telefonhörer abgenommen und die Verbindung abgebombt wurde, die Norm waren. Könnte einen Versuch wert sein.
quelle
Sie könnten versuchen, Kermit zu verwenden :
quelle