接続が悪いときに大容量ファイルをダウンロードするための既存のツールはありますか?
比較的小さいファイル(300MB)を定期的にダウンロードする必要がありますが、遅い(80〜120KB /秒)TCP接続は10〜120秒後にランダムに切断されます。 (これは大規模な会社のネットワークです。インドで働いている管理者に何度も連絡しましたが、彼らは何もできないか何もしたくありませんでした。)問題はリバースプロキシ/ロードバランサーにある可能性があります。
これまで私はpcurlの修正版を使用しています。https://github.com/brunoborges/pcurl
私は次の行を変更しました。
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
これに関して:
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} &
--speed-limit 2048 --speed-time 10
接続が失敗した場合は、ほとんど数分間停止するため、追加する必要があります。
ところが最近はこの台本も終わることができません。
1つの問題は、そのセクションを無視しているようで、-C -
再試行後もそのセグメントを「続行」しないことです。関連する一時ファイルを切り捨て、失敗するたびに最初から始めるようです。 (--range
と-C
オプションを一緒に使用することはできないようです。)
別の問題は、スクリプトがすべてのセグメントを同時にダウンロードすることです。 300個のセグメントを持つことはできず、一度に10個しかダウンロードできません。
この特定の目的のためにC#でダウンロードツールを作成するつもりですが、既存のツールがある場合、またはカールコマンドが他のパラメータで正しく機能する場合は、時間を節約できます。
アップデート1:追加情報:パラレルダウンロード機能には、接続あたりの帯域幅制限(80〜120 KB /秒、ほとんど80)があるため、削除しないでください。したがって、10個の接続が速度を10倍向上させることができます。 1時間ごとにファイルが作成されるため、1時間以内にファイルのダウンロードを完了する必要があります。
答え1
lftp
(ウィキペディア)この点が良いです。複数のプロトコルをサポートし、複数の並列接続を使用してファイルをダウンロードすることができます(非混雑によって大きなパケット損失が発生する場合に便利です)、自動的にダウンロードを再開できます。また、スクリプト可能です。
これには、あなたが提案した調整が含まれています(ありがとうございます):
lftp -c 'set net:idle 10
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"'
答え2
--range
あなたの状況ではこれをテストすることはできませんが-C -
。そのトピックに関するマニュアルページの内容は次のとおりです。
-C -
Tellを使用すると、curl
転送を再開する場所/方法を自動的に把握できます。次に、指定された出力/入力ファイルを使用して問題を解決します。
この試み:
curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
--retry-max-time 0 -C - -o "${FILENAME}.part${i}" "${URL}" &
また、シェルが変数を解析しないように、常に二重引用符を使用して変数を引用することを強くお勧めします。 (https://example.net/param1=one¶m2=two
シェルが値を分割するURLを考えてください&
。)
ちなみに、120 KB / sは約1.2 Mb / sで、これは世界のさまざまな地域の一般的なxDSLアップロード速度です。 MBあたり10秒かかるため、ファイル全体を作成するのに1時間もかかりません。それほど遅くはありませんが、速度よりも安定性に関心をお寄せいただきありがとうございます。
答え3
たぶんあなたにもっと幸運があるかもしれませんwget --continue
。
wget --continue ${URL}
また、見ることができますhttps://www.cyberciti.biz/tips/wget-resume-broken-download.html
答え4
以前の職場でも同じ問題がありました(接続が不安定な状態で300 GB以上のオフサイトデータベースバックアップを実行する場合(オフィス)を除く)。薬より大きいファイルをダウンロードしている間、ユーザーは深刻な問題に直面しています。接続が中断される前の1GB。 RDP接続を介して標準のWindowsファイルのコピー/貼り付けを使用するため、これは驚くべきことではありません。
私が見つけたことの1つは、VPN設定がネットワーク設定(主にMTUの長さ)とまったく一致しないことです。 2つ目は、Windowsのファイルコピー機がインターネットを介してコンテンツをコピーするのに適していないことです。
私の最初のソリューションは単純なFTPサーバーでしたが、転送時間の問題は解決されませんでした(接続には通常3〜4時間かかりました)。
私の2番目の解決策は物事を同期ファイルを内部NASに直接送信します。バックアップが完了した後、毎晩Syncthingは必要なすべてを事務所NASに送り返します。 3時間を超える転送時間問題を解決しただけでなく、危機状況発生時にデータ転送にかかる時間も1~2時間節約された。毎朝8時にNASのファイルが更新され、バックアップが準備されます。大容量ファイル(ある時点では700 GBデータベースにアクセス)でもファイルの破損やその他の問題は発生しませんでした。
Syncthingは設定と管理が非常に簡単で、すべてのプラットフォーム(モバイルを含む)で動作し、間違った接続を非常にうまく処理します。接続が失敗した場合、Syncthing は数分待ってから再試行します。
コンテンツを同期するにはローカルフォルダが必要ですが、更新するとすぐにファイルを使用できます。
同期のもう一つの利点は、次のように設定できることです。変更のみ同期ファイル(差分バックアップなど)で帯域幅の問題のいくつかを解決できます。