ChatGPT解决这个技术问题 Extra ChatGPT

rsync 错误:未能在“/foo/bar”上设置时间:不允许操作

我从 rsync 得到一个令人困惑的错误,而我从网络搜索中找到的最初的东西(以及所有常见的 chmod'ing)都没有解决它:

rsync: failed to set times on "/foo/bar": Operation not permitted (1)
rsync error: some files could not be transferred (code 23) 
  at /SourceCache/rsync/rsync-35.2/rsync/main.c(992) [sender=2.6.9]

尽管有这个错误,它似乎还在工作,但摆脱它会很好。

不,据我所知,只是一个普通目录。
刚刚遇到了类似的问题,虽然我的错误代码是 22: rsync: failed to set times on ... Invalid argument (22)。经过一番检查,我发现我的文件的最后一次修改日期是 1956 年!解决方法:触摸所有文件,问题解决。 :) “查找 .-print0 | xargs -0 触摸”
我发现如果您还设置了到同一目的地的 cron 作业,则会出现此错误。更改 cron 作业(crontab)的时间将有助于解决它。就我而言,如果我还设置了 cron 作业,则只有在执行手动 rysnc 时才会出现此错误。

M
Mathias Bynens

如果 /foo/bar 在 NFS(或者可能是某个 FUSE 文件系统)上,则可能是问题所在。

无论哪种方式,将 -O / --omit-dir-times 添加到您的命令行将避免它尝试在目录上设置修改时间。


有趣的是我正在将 ext3 同步到 ext3 两个操作系统都是 linux。我以前从来没有用过这个开关。 -O 成功了,但我希望我不必使用它。
谢谢!事实证明,一些 VPS 主机(例如 xlshosting.nl)在内部使用它,这会给 rsync 带来问题。
我从 Linux ext4 rsync 到 Linux ext4 时遇到了同样的问题:symlinks 的“无法设置时间:不允许操作”,而不是目录。 -O 显然没有帮助。当我的备份分区是 ext3 而不是 ext4 时,这种情况不会发生。
我正在使用 rsync -avc,添加 -O 并没有帮助。然后我读到-a 是-rlptgoD 的等价物,它包括-t,我猜它覆盖了-O。所以对我来说,解决方法是使用 -rlpgoDvc
@dlink 您可以添加 --no-t 以删除隐含选项。
A
Alexis Wilke

该问题可能是由于远程 darwin (OS X) 系统上的写入进程不拥有 /foo/bar。该问题的解决方案是在远程站点上设置足够的所有者。

由于这个答案已经过投票,因此希望对某人有用,我正在扩展它以使其更清晰。

发生这种情况的原因是 rsync 在复制文件时可能试图设置任意修改时间(mtime)。

为了做到这一点,darwin 的系统 utime() 功能要求写入过程的有效 uid 与文件 uid 或超级用户的相同,参见 opengroup utime's page。检查 rsync 邮件列表上的 this discussion 作为参考。


在 Linux 上也是如此(在我的情况下是 Debian Squeeze)...如果我不是目标目录的所有者,rsync 会给出“未能设置时间”错误消息。 (对目录有写权限是不够的。)
我陷入了同样的问题。直到使用 uid=user 挂载 NTFS。
当我使用 rsync 命令将我试图影响的目录的所有者(在远程服务器上)更改为与尝试通过本地 Bash 脚本上的 rsync 登录的用户相同的用户时,这个错误就消失了。换句话说:我试图使用以下命令写入远程服务器上的 /remote/path/to/foo/barrsync -avzP --exclude '.DS_Store' /local/path/to/foo/bar/ user1@1.2.3.4:/remote/path/to/foo/bar ,并得到了相同的错误消息,当我将 user1 设为 /remoe/path/to/foo/bar 的所有者时,这些错误消息消失了,如下所示:{5 }
如果您与组中的其他用户共享您的文件,例如您使用粘性位,那么更改所有者并不是真正的解决方案。我们不使用 -t 并添加 -O 来防止此警告。
您能否扩展答案以详细说明用户是否属于拥有文件/目录的组的一部分,如果这应该或不应该工作?
L
Lud Akell

正如@racl101 对答案的评论,这个问题可能与文件夹所有者有关。 rsync 命令应由与文件夹所有者相同的用户执行。如果不一样,您可以更改它。

chown -R userCorrect /remote/path/to/foo/bar

r
ripah

我的问题是“接收器安装点”安装不正确。它处于只读模式(出于某种额外的原因)。看起来 rsync 正在复制文件,但事实并非如此。我检查了我的 fstab 文件并将挂载选项更改为默认值,重新挂载文件系统并再次执行 rsync。那一切都好。


s
shintaroid

我有同样的问题。对我来说,解决方案是删除远程文件并让 rsync 再次创建。


D
David Wolever

当我写入一个不能(正确)处理时间的文件系统时,我已经看到了这个问题——我认为 SMB 共享或 FAT 之类的。

你的目标文件系统是什么?


我在 Mac 上,正在 rsync'ing 到 linux(一个 slicehost 机器)。
啊,奇怪...不过,由于您在 Mac 上使用 rsync,我应该警告您:它不能正确保留所有 OS X 文件属性,因此可能会发生坏事。参见,例如:blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful
但是,您可以使用来自 MacPorts (sudo port install rsync) 的最新版本,并且它会更少损坏。要检查它:rsync --version:rsync 版本 3.0.5 协议版本 30 ... append、ACL、xattrs、iconv、symtimes、file-flags ...(ACL 和 xattrs 是重要的)
Macintosh 上的 rsync 确实设置了所有文件属性,并且已经设置了相当长的一段时间,请注意引用“可能发生坏事”的 URL 日期为 2006 年!
答案真的不应该包括问题。这将更适合作为评论。
S
Sam Brightman

这发生在我的 xfs (rw,relatime,seclabel,attr2,inode64,noquota) 类型的分区上,其中目录由我们都是成员的组中的另一个用户拥有。组成员在登录之前已经建立,整个目录结构是组可写的。我已手动运行 sudo chown -R otheruser.group directorysudo chmod -R g+rw directory 来确认这一点。

我仍然不知道为什么它最初不起作用,但通过 sudo chown -R myuser.group directory 获得所有权修复了它。也许与 SELinux 相关?


手册页显示了应用程序的 UID。必须匹配文件的 UID 才能使 utime() 工作。您也可以以 root 身份运行并执行此操作。但如果文件的 UID 不同,它们不会让您将时间更改为“现在”以外的任何时间。
你能链接到这样的手册页吗?我都没有提到utime()
linux.die.net/man/2/utime 相关段落:"在以下情况下允许更改时间戳:进程具有适当的权限,或有效用户 ID 等于文件的用户 ID,或时间为 NULL 并且进程具有文件的写权限。”
G
Gurdeep Singh

如果您对源或目标中最近未修改的文件运行 rsync 进程,也可能会弹出此错误...因为它无法为最近修改的文件设置时间。


C
Cesar Bielich

我也遇到了这个问题,我遇到的问题是包含我试图发送的文件的根文件夹的权限问题。我不关心包含在 rsync 中的根文件夹,我只关心其中的内容。错误来自我的命令,我需要在最后指定一个额外的 /。如果您没有尾部斜杠 rsync 将尝试设置文件夹的次数。

例子:

这将尝试在 html 设置时间

rsync /var/www/html/ ubuntu@xxx.xxx.xxx.xxx:html

这不会

rsync /var/www/html/ ubuntu@xxx.xxx.xxx.xxx:html/

c
captain

可能是您对某些文件没有权限。从管理员帐户,尝试“sudo rsync -av” 或者,启用 root 帐户并以 root 身份登录。这应该可以让你完全控制你的系统并暴力破解你的 rsync! ;-) 我不确定上面提到的 --extended-attributes 是否有帮助,但我也把它扔进去了,只是为了更好的衡量。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅