我需要下载一个大文件(1GB)。我还可以访问多台运行 Linux 的计算机,但管理策略将每台计算机的下载速度限制为 50kB/s。
如何将该文件分散下载到多台计算机上,并在所有片段下载完毕后合并它们,以便我可以更快地接收它?
答案1
支持常见协议 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'
阅读卷曲手册页以获得更多选项和解释。
您可以进一步利用 ssh 和 tmux 来轻松运行和跟踪多个服务器上的下载。
答案2
以每秒 50 KB 的速度加载 1 GB 的文件大约需要 5.5 小时。
协调多台计算机来获取部分内容似乎可以节省一些时间。
您可以查看 BitTorrent 并利用网络播种以及通过对等交换进行传输。每个客户端都可以接收碎片并在局域网(LAN)中共享已完成的碎片。您最终会在每台计算机上获得相同的 1GB 文件,但各个部分的合并是自动完成的。