大きなファイル(1GB)をダウンロードする必要があります。Linuxを実行している複数のコンピューターにもアクセスできますが、それぞれが管理ポリシーによって50kB / sのダウンロード速度に制限されています。
このファイルを複数のコンピューターにダウンロードして配布し、すべてのセグメントがダウンロードされた後にマージして、より速く受信できるようにするにはどうすればよいですか?
大きなファイル(1GB)をダウンロードする必要があります。Linuxを実行している複数のコンピューターにもアクセスできますが、それぞれが管理ポリシーによって50kB / sのダウンロード速度に制限されています。
このファイルを複数のコンピューターにダウンロードして配布し、すべてのセグメントがダウンロードされた後にマージして、より速く受信できるようにするにはどうすればよいですか?
回答:
HTTP、FTP、およびSFTPの一般的なプロトコルは範囲要求をサポートしているため、ファイルの一部を要求できます。これにはサーバーのサポートも必要であるため、実際には機能する場合と機能しない場合があります。
あなたは使用することができますcurl
し、-r
あるいは--range
オプションでは、範囲を指定し、最終的にはちょうどするcat
ファイルを一緒にティン。例:
curl -r 0-104857600 -o distro1.iso 'http://files.cdn/distro.iso'
curl -r 104857601-209715200 -o distro2.iso 'http://files.cdn/distro.iso'
[…]
そして最終的に、個々のパーツを集めたとき、それらを連結します:
cat distro* > distro.iso
--head
オプションを使用すると、ファイルのサイズなど、ファイルに関する詳細情報を取得できます。
curl --head 'http://files.cdn/distro.iso'
開いた範囲で最後のチャンクを取得できます:
curl -r 604887601- -o distro9.iso 'http://files.cdn/distro.iso'
その他のオプションと説明については、curlのmanページをご覧ください。
sshとtmuxをさらに活用して、複数のサーバーでのダウンロードの実行と追跡を容易にすることができます。
cat distro* > ...
するときは、ファイルの並べ替えをチェック*
してください。シェルによって展開されたファイルは次のように並べ替えられる可能性がありますdistro1.iso distro10.iso distro11.iso ...
。したがって、間違った順序で連結されます。
cat distro{1..10}.iso
cat $(seq -fdist%g.iso 1 10)
より予測可能なはずですが、で失敗しcsh
ます。$(…)
backticsで置き換えることは、ほとんどのシェルで機能するようです。
seq
も移植可能なコマンドではありません。あなたは使用することができdistro001.iso
、distro002.iso
...distroy010.iso