是否有现成的工具,可用于通过不良连接下载大文件?
我必须定期下载一个相对较小的文件:300 MB,但慢速(80-120 KB/秒)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
,因为连接失败时通常会挂起几分钟。
但是最近连这个脚本都无法完成。
一个问题是它似乎忽略了该-C -
部分,因此重试后它不会“继续”该段。它似乎截断了相关的临时文件,并在每次失败后从头开始。(我认为--range
和-C
选项不能一起使用。)
另一个问题是该脚本同时下载所有段。它不能有 300 个片段,其中一次只能下载 10 个片段。
我正在考虑用 C# 为这个特定目的编写一个下载工具,但是如果有一个现有的工具,或者 curl 命令可以使用不同的参数正常工作,那么我可以抽出一些时间。
更新 1:附加信息:不应删除并行下载功能,因为它们有每个连接的带宽限制(80-120 Kbytes / sec,主要是 80),因此 10 个连接可以导致 10 倍的加速。我必须在 1 小时内完成文件下载,因为该文件每小时生成一次。
lftp
(维基百科)对此有好处。它支持多种协议,可以使用多个并发并行连接下载文件(在有很多不是由拥塞引起的数据包丢失的情况下很有用),并且可以自动恢复下载。它也是可编写脚本的。这里包括您提出的微调(感谢您):
在你的情况下,我无法为你测试这个,但你不应该使用
--range
with-C -
。以下是手册页关于该主题的内容:试试这个:
我还强烈建议您始终双引号引用您的变量,以便 shell 不会尝试解析它们。(考虑一个 URL
https://example.net/param1=one¶m2=two
,shell 将在其中拆分值&
。)顺便说一句,120 KB/s 大约是 1.2 Mb/s,这是世界许多地方典型的 xDSL 上传速度。每 MB 10 秒,因此整个文件不到一小时。没那么慢,虽然我很欣赏你更关心可靠性而不是速度。
也许你有更多的运气
wget --continue
:另请参阅https://www.cyberciti.biz/tips/wget-resume-broken-download.html
开箱即用:戴上眼罩并使用 bittorrent。创建 torrent 时使块大小变小。显然,加密文件,这样任何找到种子的人都得不到任何有用的东西。
我在以前的工作中遇到了同样的问题(除了(来自办公室)不稳定连接上的 300GB+ 异地数据库备份)。用户在下载文件时遇到了严重的问题。连接中断前 1 GB。因为他们通过 RDP 连接使用标准的 Windows 复制/粘贴文件,所以难怪。
我发现的一件事是,我们的 VPN 设置与网络设置(主要是 MTU 长度)完全不匹配。第二件事是 Windows 的文件复制器不是为通过 Internet 复制内容而设计的。
我的第一个解决方案是一个简单的 FTP 服务器,但是它并没有解决传输时间的问题(我们的连接通常需要 3-4 小时)。
我的第二个解决方案是使用Syncthing将文件直接发送到内部 NAS。备份完成后的每个晚上,Syncthing 都会将我们需要的所有内容发送回办公室的 NAS。不仅解决了3个多小时的传输时间问题,而且如果出现危机,我可以节省1-2个小时的时间来快递数据。每天早上 8 点,文件将在 NAS 上更新,我们已准备好备份。即使有巨大的文件(曾经有近 700GB 的数据库),我还没有遇到任何文件损坏或其他问题......
Syncthing 非常易于设置和管理,适用于所有平台(甚至是手机),并且可以很好地处理不良连接。如果连接失败,Syncthing 只需等待几分钟并重试。
您确实需要一个本地文件夹来同步内容,但您的文件几乎会在更新后立即可用。
syncthing 的另一个好处是,它可以设置为仅同步文件中的更改(例如在差异备份中)......可能解决您的部分带宽问题。
您可能会考虑通过糟糕的连接移动文件的老式解决方案 - zmodem。
这是在人们拿起电话并炸毁连接成为常态的 2400 波特调制解调器时开发的。可能值得一试。
您可以尝试使用Kermit: