我该如何通过非常不稳定的互联网连接复制文件?
有时,连接会丢失,有时一台机器或另一台机器的 IP 会更改,有时两者都会更改,但动态 DNS 会捕获它。
您建议使用哪种工具或命令?
我听说rsync
仅复制差异非常漂亮,但这意味着需要大量工作,要么一次又一次地重新启动它,要么将其放入 while 或 cronjob 中。
我希望有一些更简单且万无一失的事情。
附录:
它涉及时不时地将几个包含一些大于 5GB 的非常大文件的目录从一个站点复制到另一个站点。复制后,两者都被本地移动到不同的位置。
我无法在网络层面做任何事情,我也不具备这样做的知识。
我不想为了使用 wget 而设置 Web 服务器。这并不安全,而且看起来像是一条迂回的路线。
我已经建立了 SSH 连接,现在可以进行 rsync,因为两台机器上都已经安装了 rsync(我无法启动并运行 rsync 守护进程)。
关于我如何制作的任何提示通过 ssh 的智能 rsync这样当线路暂时被切断时它会尝试继续?但当 ssh 连接中断时,rsync 不会成为问题。所以像这样的东西(https://serverfault.com/questions/98745/)可能不会工作:
while ! rsync -a .... ; do sleep 5 ; done
有任何想法吗?
多谢!
加里
答案1
好的,我已经在我的案例中找到了解决方案。我确实正在使用建议的while 循环。现在看起来像这样:
while ! \
rsync -aiizP --append --stats . -e ssh [email protected]:./path/rfiles ; \
do now=$(date +"%T") ; echo · Error at $now · ; sleep 5 ; done
如果没有 while 循环,我将不得不再次手动启动 rsync。现在,它就像一个魅力一样发挥作用。
有趣的是:我在连接丢失后十分钟以及连接重新启动并再次运行后大约 9 分钟时收到错误!与此同时,终端窗口中没有任何反应。我想知道这个10分钟的超时是从哪里来的。
非常感谢您的帮助。
加里
仅供参考:这是我收到的超时错误(10 分钟后):
...
thedirectory/afile.ext
Read from remote host myhost.com: Operation timed out
rsync: writefd_unbuffered failed to write 16385 bytes [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (394 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-40/rsync/io.c(452) [sender=2.6.9]
答案2
我绝对会建议rsync
。rsync
每当我认为连接有可能中断时,我就会复制文件。如果复制失败,我知道我可以简单地重新启动它。
while
如果您需要它自动重新启动直到成功,则很容易将其放入循环中。
答案3
rsync 的主要问题是它无法继续单个文件。如果您要复制复杂的目录结构,这是可以的,但如果您想复制例如单个 DVD 图像,则它不会很可靠。
对于这种情况,我使用 wget。更确切地说,
wget -c -t 0 -T 10 http://....
特别有趣的是 20 秒超时,它解决了我们的工具由于单个数据包丢失而有效挂起/冻结的常见问题。
当然,它需要在源端有一个http服务器。如果不切实际,有一个工具名为
split
它可以将大文件分割成小文件,然后使用 rsync。分割的文件稍后可以用一只简单的猫重新统一。
当然,您甚至可以循环运行 rsync 直到成功:
while ! rsync ...; do echo next try; done
评论后扩展
rsync
能继续文件,带有-partial
标志。谢谢@GregHewgill! :-)