我正在使用 cronjob 将一些大文件 (1.5Gb) 传输到 Windows FTP 服务器。它通过 2Mbit ADSL 线路传输,上行速率为 512Kbit。因此需要很长时间,并且很容易掉线。
我使用 rsync 循环来实现这一点
while ! rsync -q -P --append source ftp_dest; do
sleep 60#give the line a chance to reset (which happens automatically)
done
这样就可以传输文件,即使有丢失的情况(我之后会检查 md5sums 以防万一)。问题出现在进程的最后,即 rsync 尝试设置目标文件的权限时,由于底层文件系统是 NTFS,因此失败了。
编辑:
我已按照以下建议添加了“--no-p --no-o --no-g --no-X --no-A”,但仍然出现以下错误
rsync: ftruncate failed on "/mnt/ftpremote/test.bin": Operation not permitted (1)
这不是问题,只是它导致我的循环永远持续下去。有没有办法告诉 rsync 不要尝试任何权限设置?我查看了手册页,没有找到任何东西(即使你告诉它不要设置权限,它也会设置默认权限)。我想使用错误代码,但失败的权限设置的错误代码是 23(根据手册页“由于错误而部分传输”),这看起来像是如果线路无论如何都会掉线时使用的代码。
答案1
如果使用的全部范围--no-p --no-A --no-X --no-o --no-g --no-D
不起作用,也许您可以改变循环并使用的结果作为md5sum
停止标准,即循环您的 rsync 直到文件相同。