![由于连接断开,rsync 无法完成上传](https://linux22.com/image/1580914/%E7%94%B1%E4%BA%8E%E8%BF%9E%E6%8E%A5%E6%96%AD%E5%BC%80%EF%BC%8Crsync%20%E6%97%A0%E6%B3%95%E5%AE%8C%E6%88%90%E4%B8%8A%E4%BC%A0.png)
我正在尝试将约 300 万个 jpeg 文件(约 90GB)上传到远程服务器。起初我以为 rsync 非常适合这项工作,但一开始它确实完全占用了我的上传链接。
但是我的互联网连接有点不稳定,每隔几个小时就会断线一次。当目标目录中已经有一些文件时,rsyncs 启动阶段似乎需要更长的时间才能完成,显然是在检查所有文件是否有更改。现在,这个过程需要几个小时才能开始上传任何新文件。我的连接无法保持那么长时间,因此需要重新启动该过程。
因此我实际上根本没有取得任何进展,因为启动时间太长,而且在完成之前就被取消了。我需要 rsync 或者类似 rsync 的东西,它可以感知连接断开,并且可以重新连接而不会丢失所有进度。
rsync 是否有这样的工具或选项?
答案1
一些想法 -
rsync 是否对文件进行校验?如果是,请将行为更改为日期/时间和文件大小,并确保这些属性得到保留。
在客户端和服务器之间设置 OpenVPN,并在其间进行 rsync。由于端点的 IP 地址不变,并且没有 NAT 来中断连接,因此当 OpenVPN 恢复时,rsync 将从中断处继续。
答案2
如果您的文件与初始 rsync 相比没有变化,您可以尝试使用 rsync 选项--ignore-existing
忽略接收远程服务器上的现有文件,而只处理不存在的文件。
答案3
向未来的 Google 员工总结一下我的经验:
尝试通过复制 a*、b* 等将文件拆分成多个批次是一个好主意,并且有助于完成上传
实际问题是我错误地选择了要上传到的云服务器上的 HDD 卷。HDD 根本无法处理包含 300 万个文件的目录,甚至像 cp 这样的工具也无法将数据从 HDD 移到其他地方,只能在 100% 的磁盘等待时间内进行准备,而实际上并没有执行任何文件复制。改用 SSD 后,rsync 的启动过程要快得多,并且不会再出现问题。