如何在多台计算机上分配大量下载内容?


38

我需要下载一个大文件(1GB)。我还可以访问多台运行Linux的计算机,但是根据管理策略,每台计算机的下载速度均限制为50kB / s。

如何在多个计算机上分散下载此文件并在合并所有段之后合并它们,以便可以更快地接收它?


7
在家下载它,然后通过usb thumbdrive将其潜入网络吗?
WernerCD

2
我记得我上大学时在旧的Sun B&W站里遇到过类似的事情。只要检查一下您是否有足够的空间来保存所有内容,就可以在封锁实验室的所有计算机(完整tmp)后驱逐了我的一位朋友。
Kartoch 2014年

如果没有下载限制,另一端可以多快发送文件?LAN上的计算机之间是否存在传输限制?
2014年

@SunWKim否。那里没有具体限制。
Meysam 2014年

Answers:


60

常见的协议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手册页以获取更多选项和解释。

您可以进一步利用ssh和tmux来简化运行并跟踪多台服务器上的下载。


15
注意:小心,在使用时cat distro* > ...检查文件的排序,因为*由shell扩展的文件可能会这样排序:distro1.iso distro10.iso distro11.iso ...并因此以错误的顺序连接。
塞巴斯蒂安

8
cat distro{1..10}.iso
@Sebastian

1
该解决方案是特定于外壳的,而不是可移植的。cat $(seq -fdist%g.iso 1 10)应该更可预测,但是在中失败了csh$(…)在大多数shell中,似乎都可以用backtics 代替。
Marco Marco

3
@Marco seq也不是可移植的命令。您可以使用distro001.isodistro002.iso...distroy010.iso
斯特凡Chazelas

是管理策略,每个传输连接50 kB / s,还是计算机上允许的总带宽。如果是前者,则答案可以在同一台计算机上使用,而不必登录到不同的工作站。
2014年

0

以每秒50 KB的速度加载1 GB的文件大约需要5.5个小时。

看来,协调多台计算机以获取零件的工作可能会节省一些时间。

您可以查看bittorrent并利用网络种子以及通过对等交换进行的传输。每个客户都可以在局域网(LAN)中接收作品并共享完成的作品。您最终在每台计算机上都使用相同的1gb文件,但是碎片合并将自动为您完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.