目标上的 rsync 和写入权限

目标上的 rsync 和写入权限

我一直想知道为什么rsync要尝试将文件传输到它所在的远程位置读取/执行目标目录的权限,但没有创建实际目标文件的权限。当尝试以普通用户身份将文件复制到/rsync将传输整个文件(对于大文件也需要相当长的时间)并最终失败

rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)

因此,当尝试创建临时文件(-文件)在传输过程中。为什么它没有注意到这一点并提前中止,而不是尝试在没有任何写入权限的情况下复制整个文件?

如果无法创建临时文件,它会将文件复制到哪里?我看不到 rsync 进程的任何内存增加,也没有相应的文件/tmp。看起来像是直接丢弃了目的地的数据,但仍然继续传输。

答案1

如果需要复制到没有写权限的目录中,请添加--inplace到命令选项。有时,这样做更便宜,因为它不创建临时副本,但在更新过程中文件处于不一致状态。

关于为什么它不事先检查自己的权限的问题:它可能会错过一些额外的细节,如扩展访问 ACL,因此 rsync 不相信标准的 3*3+3 方案。 OTOH 这个有意的政策不会对结果产生任何真正的影响 - 无论如何文件都没有更新。

答案2

这似乎是当前 rsync 协议的一个缺点,如错误跟踪器。 rsync 协议无法事先确定它是否具有目标的写入权限。相反,它只是发送并随后检查成功或失败。

答案3

Rsync 在目标文件的同一文件夹中创建临时文件,因此在这种情况下,您必须将一些文件复制到/,因为您没有以 root 身份启动它,并且通常/只能由 root 写入,所以它会失败。

要找出正在复制哪些文件,请传入参数-v

相关内容