Existe-t-il un outil existant, qui peut être utilisé pour télécharger de gros fichiers via une mauvaise connexion?
Je dois télécharger régulièrement un fichier relativement petit: 300 Mo, mais la connexion TCP lente (80-120 Ko / sec) se brise de manière aléatoire après 10-120 secondes. (C'est un réseau de grande entreprise. Nous avons contacté leurs administrateurs (travaillant depuis l'Inde) plusieurs fois, mais ils ne peuvent ou ne veulent rien faire.) Le problème pourrait être avec leurs proxys inverses / équilibreurs de charge.
Jusqu'à présent, j'utilisais une version modifiée de pcurl: https://github.com/brunoborges/pcurl
J'ai changé cette ligne:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
pour ça:
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} &
J'ai dû ajouter --speed-limit 2048 --speed-time 10
car la connexion se bloque généralement pendant des minutes lorsqu'elle échoue.
Mais récemment, même ce script ne peut pas se terminer.
Un problème est qu'il semble ignorer la -C -
partie, donc il ne "continue" pas le segment après une nouvelle tentative. Il semble tronquer le fichier temporaire correspondant et recommencer depuis le début après chaque échec. (Je pense --range
que les -C
options et ne peuvent pas être utilisées ensemble.)
L'autre problème est que ce script télécharge tous les segments en même temps. Il ne peut pas avoir 300 segments, dont seulement 10 sont téléchargés à la fois.
Je pensais écrire un outil de téléchargement en C # dans ce but spécifique, mais s'il existe un outil existant, ou si la commande curl pouvait fonctionner correctement avec différents paramètres, alors je pourrais gagner du temps.
MISE À JOUR 1: Informations supplémentaires: La fonctionnalité de téléchargement parallèle ne doit pas être supprimée, car ils ont une limite de bande passante (80-120 Ko / s, principalement 80) par connexion, donc 10 connexions peuvent entraîner une accélération de 10 fois. Je dois terminer le téléchargement du fichier en 1 heure, car le fichier est généré toutes les heures.
rsync
(qui vous permettra de redémarrer les transferts)?lftp
permet également de redémarrer automatiquement les transmissions.Réponses:
lftp
( Wikipedia ) est bon pour ça. Il prend en charge un certain nombre de protocoles, peut télécharger des fichiers à l'aide de plusieurs connexions parallèles simultanées (utile lorsque la perte de paquets n'est pas causée par la congestion) et peut reprendre automatiquement les téléchargements. Il est également scriptable.Ici, y compris le réglage fin que vous avez trouvé (crédits à vous):
la source
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
cadre. Merci! J'ajouterai ma solution à la question.Content-MD5
-Digest
têtes et (bien que je ne sais pas si leslftp
prend en charge ou s'ils seraient utilisés dans le cas de l'OP). Dans tous les cas, il ne semble pas que torrent soit une option pour l'OP.Je ne peux pas tester cela pour vous dans votre situation, mais vous ne devriez pas l'utiliser
--range
avec-C -
. Voici ce que la page de manuel a à dire sur le sujet:Essayez plutôt ceci:
Je vous recommande également fortement de toujours citer deux fois vos variables pour que le shell n'essaye pas de les analyser. (Considérez une URL
https://example.net/param1=one¶m2=two
, où le shell diviserait la valeur en&
.)Soit dit en passant, 120 Ko / s est d'environ 1,2 Mo / s, ce qui est une vitesse de téléchargement xDSL typique dans de nombreuses régions du monde. 10 secondes par Mo, donc un peu moins d'une heure pour tout le fichier. Pas si lent, bien que j'apprécie que vous vous souciez plus de la fiabilité que de la vitesse.
la source
Vous avez peut-être plus de chance avec
wget --continue
:Voir également https://www.cyberciti.biz/tips/wget-resume-broken-download.html
la source
En dehors de la boîte: mettez un cache-œil et utilisez bittorrent. Réduisez la taille du bloc lorsque vous créez le torrent. Évidemment, cryptez le fichier pour que quiconque trouve le torrent n'ait rien d'utile.
la source
J'ai eu le même problème dans mon travail précédent (sauf avec 300 Go + sauvegardes de base de données hors site sur une connexion instable (depuis le bureau)). Les utilisateurs ont eu de graves problèmes pour télécharger des fichiers plus gros qu'environ. 1 Go avant que la connexion ne s'éteigne. Puisqu'ils ont utilisé le fichier standard copier / coller de Windows sur une connexion RDP, pas étonnant.
Une chose que j'ai découvert, c'est que nos paramètres VPN étaient complètement incompatibles avec la configuration du réseau (principalement la longueur MTU). La deuxième chose est que le copieur de fichiers de Windows n'est PAS fait pour copier des trucs sur Internet.
Ma première solution était un simple serveur FTP, cependant, cela n'a pas résolu le problème du temps de transmission (souvent 3-4 heures sur notre connexion).
Ma deuxième solution consistait à utiliser Syncthing pour envoyer les fichiers directement à un NAS interne. Chaque nuit, une fois les sauvegardes terminées, Syncthing a envoyé tout ce dont nous avions besoin à un NAS du bureau. Non seulement le problème de plus de 3 heures de transmission a été résolu, mais j'ai été épargné les 1-2 heures pour envoyer les données par courrier en cas de crise. À 8 h tous les matins, les fichiers étaient mis à jour sur le NAS et nous avions nos sauvegardes prêtes. Même avec des fichiers énormes (à un moment donné, une base de données de près de 700 Go), je n'ai pas encore rencontré de corruption de fichier ou d'autres problèmes ...
Syncthing est très facile à configurer et à gérer et est disponible pour toutes les plates-formes (même les téléphones), et a une très bonne gestion des mauvaises connexions .. si la connexion échoue, Syncthing attend simplement quelques minutes et réessaye.
Vous avez besoin d'un dossier local pour synchroniser les choses, mais vos fichiers seront disponibles presque dès qu'ils seront mis à jour.
Une autre bonne chose à propos de la synchronisation, c'est qu'elle peut être configurée pour synchroniser uniquement les modifications dans le fichier (comme dans une sauvegarde différentielle) ... en résolvant éventuellement une partie de votre problème de bande passante.
la source
Vous pourriez envisager une solution à l'ancienne pour déplacer des fichiers sur une connexion moche - zmodem .
Cela a été développé à l'époque où les modems à 2400 bauds avec des gens prenant les téléphones et bombardant la connexion étaient la norme. Ça pourrait valoir la peine d'essayer.
la source
Vous pouvez essayer d'utiliser Kermit :
la source