如何在多台计算机上分发大型下载?

B F*_*ley 39 download cluster parallelism

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

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

Mar*_*rco 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'
[…]
Run Code Online (Sandbox Code Playgroud)

最终,当您收集各个部分时,您将它们连接起来:

cat distro* > distro.iso
Run Code Online (Sandbox Code Playgroud)

您可以使用以下--head选项获取有关文件的更多信息,包括其大小:

curl --head 'http://files.cdn/distro.iso'
Run Code Online (Sandbox Code Playgroud)

您可以检索具有开放范围的最后一个块:

curl -r 604887601- -o distro9.iso 'http://files.cdn/distro.iso'
Run Code Online (Sandbox Code Playgroud)

阅读curl 手册页以获取更多选项和说明。

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

  • 注意:小心,当使用 `cat distro* > ...` 时检查文件的排序,因为你的 shell 展开的 `*` 可以这样排序:`distro1.iso distro10.iso distro11.iso ...`从而以错误的顺序连接。 (15认同)
  • @Sebastian 注释的修复是:`cat distro{1..10}.iso` (8认同)
  • @Marco,`seq` 也不是一个可移植的命令。你可以使用`distro001.iso`、`distro002.iso`...`distroy010.iso` (3认同)