改变的权限是否会触发 rsync 再次下载?

改变的权限是否会触发 rsync 再次下载?

我正在运行一个大型 rsync 作业,它已经运行了几个小时,并且还要运行几个小时。

我需要更改下载文件的权限才能从我的网络应用程序访问它们,但我担心它会破坏复制工作?

我是否需要担心或者权限与同步本身没有任何关系?

我正在复制rsync -rchavzP

答案1

这取决于...如果更改权限导致 rsync 无法在您的网络服务器上读取和/或写入,则该作业将会失败。

通常情况下,权限的更改是智能处理的,并且 rsync 只会在文件未更改的情况下更改权限,而不会传输文件本身。该选项--no-perms应确保目标位置的权限差异不会被“纠正”。

在早期版本的 rsync 中,会首先生成用于确定要复制内容的完整文件列表,IIRC 稍后会在初始扫描后对本地/或远程文件列表进行更改,但这些更改不会被发现,允许您更改权限等,但

-r, --recursive... 从 rsync 3.0.0 开始,使用的递归算法现在是一种增量扫描,它使用的内存比以前少得多,并且在完成前几个目录的扫描后开始传输。 ...
某些选项需要 rsync 知道完整的文件列表,因此这些选项会禁用增量递归模式。 这些包括:--delete-before, --delete-after, --prune-empty-dirs,--delay-updates

因此,如果本地和远程 rsync 版本均高于 3.0.0,则您需要在应用更改的权限之前知道 rsync 是否已经完全完成某个目录。

当然,最好完全避免这个问题,首先使用 rsync 设置正确的权限,例如rsync --no-p --chmod=ugo=rwX

--chmod 此选项告诉 rsync 应用一个或多个以逗号分隔的 chmod 结果值将被视为发送方为文件提供的权限...

请查看手册以了解更多相关信息。

对于长时间的 rsync 作业,您可能会受益于延迟更新选项:

--delay-updates 此选项将每个更新文件的临时文件放入保存目录中,直到传输结束,此时所有文件将快速连续地重命名到位。这试图使文件更新更加原子化。

相关内容