我rsync
在 Windows (Cygwin) 上使用,将文件从共享文件夹(从另一个 Windows 实例)移动到 NFS 存储。我已将共享文件夹映射到一个驱动器,并将 NFS 文件夹安装到另一个驱动器。
我rsync
这样开始命令:
C:\cygwin64\bin\rsync.exe -vrH --perms --partial --delete --stats --log-file=/home/Administrator/rsynclogs/backup.log /cygdrive/z/ /cygdrive/w/
运行 30 分钟后,如果因错误而失败,则传输约 17,000 个文件:
rsync: write failed on "/cygdrive/w/domainName/Uploads/index_635244981053162421.html": Permission denied (13)
我看不出权限被拒绝错误的任何原因。例如,如果我手动复制文件,它会成功复制。
我知道这是该rsync
协议的一个缺点。协议rsync
无法事先确定它是否具有目标的写入权限。相反,它只是发送并随后检查成功或失败。
我无权ssh
访问 NFS 服务器 - 它是一个存储实例。源 Windows 客户端具有 Cygwin,但无权访问 NFS 存储。
我们正在从 2008 年的旧服务器迁移到新服务器。其中一项更改是将所有存储移动到共享 nfs 存储。我知道这个配置并不完美,但它是暂时的。我需要它正常工作一个月左右。不幸的是,NFS 服务无法安装在 2008 服务器上,否则就不需要 rsync。
即使出现错误,如何使我的副本继续运行?
我想使用这些选项:
--partial-dir=DIR
--delay-updates
--inplace
--ignore-errors
但看起来它并不能真正解决我的问题。有什么建议么?
答案1
我建议您修改命令rsync
以维护文件时间,以便它可以识别文件是否需要重新复制。为此,请使用--times
标志 ( )。-t
您已经说过您的权限错误是暂时的,所以我建议您将进程放入循环中。将其放入文件中并运行它bash
#!/bin/bash
while :
do
rsync -rptv --partial --delete --stats --log-file=/home/Administrator/rsynclogs/backup.log /cygdrive/z/ /cygdrive/w/ && break
sleep 30
done
-rpt
作为可能的改进,您可能需要考虑用-a
( )替换标志--archive
,这也可以维护文件所有权。