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

253

我从rsync获得了一个令人困惑的错误信息,网上搜索到的初始结果(以及所有通常的chmod更改)都没有解决它:

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]

尽管出现了错误,但似乎它仍然在工作,不过去掉错误会更好。


不,据我所知,它只是一个普通的目录。 - dreeves
刚遇到了一个类似的问题,尽管我的错误代码是22:rsync: failed to set times on ... Invalid argument (22)。经过一些检查发现,我的文件的最后修改日期是在1956年!解决方案是:触碰所有文件,问题得以解决。:) "find . -print0 | xargs -0 touch" - KIAaze
我发现如果你也设置了一个cron job到同一个目的地,就会出现这个错误。更改cron job(crontab)的时间将有助于解决它。在我的情况下,只有当我手动执行rsync并且同时设置了cron job时才会出现此错误。 - NelsonGon
12个回答

340

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

无论如何,在您的命令行中添加-O/--omit-dir-times将避免尝试设置目录修改时间。


9
有趣的是我正在将ext3与ext3同步,两个操作系统都是 Linux。我以前从未使用过这个开关。-O解决了问题,但我希望不必使用它。 - d-_-b
4
谢谢!事实证明一些VPS主机(例如xlshosting.nl)内部使用了这个功能,这可能会导致rsync出现问题。 - Frederik
2
我遇到了同样的问题,从Linux ext4同步到Linux ext4时出现“无法设置时间:操作不被允许”错误,但仅对于符号链接,而非目录。使用“-O”选项也没有帮助,显然这种情况在我的备份分区由ext3变为ext4之前并未发生。 - Marius Gedminas
27
我使用rsync -avc命令,并添加-O参数没有帮助。我后来读到,-a等同于-rlptgoD,其中包括-t选项,这可能会覆盖-O选项。所以对我来说,解决方法是使用-rlpgoDvc选项。 - dlink
15
@dlink,你可以添加--no-t选项来移除隐含的选项。 - Noam Nelke
显示剩余5条评论

102
这个问题可能是由于远程的darwin (OS X)系统上/foo/bar没有被写入进程拥有所致。 解决此问题的方法是在远程站点上设置足够的所有者。 由于这个答案已经得到了投票,并且希望对某些人有用,我正在扩展它以使其更清晰。
这种情况发生的原因是rsync可能在复制文件时尝试设置任意修改时间(mtime)。
为了做到这一点,darwin系统的utime()函数要求写入进程有效的uid与文件uid或超级用户的uid相同,请参见opengroup utime's page。 请参考this discussion rsync邮件列表。

11
在Linux上也是一样的(以我的情况为例,使用Debian Squeeze)......如果我不是目标目录的所有者,rsync会显示“无法设置时间”的错误信息。(仅拥有目录的写权限是不够的。) - ddekany
1
我陷入了同样的问题,直到使用uid=user挂载NTFS。 - gavenkoa
3
当我使用rsync命令尝试影响远程服务器上的目录时,我将该目录的所有者更改为与我的本地Bash脚本中尝试通过rsync登录的用户相同的用户后,错误就消失了。换句话说,我尝试使用以下命令写入远程服务器上的/remote/path/to/foo/bar目录:rsync -avzP --exclude '.DS_Store' /local/path/to/foo/bar/ user1@1.2.3.4:/remote/path/to/foo/bar,但是收到了相同的错误信息,当我像这样将user1作为/remote/path/to/foo/bar的所有者时,错误消息消失了:$ chown -R user1 /remote/path/to/foo/bar - racl101
3
如果您在一个组中与其他用户分享文件,例如您使用粘性位,则更改所有者并不是解决方案。我们不使用-t选项,并添加-O选项以防止此警告。 - R. van Twisk
1
你能否扩展回答,阐述一下如果用户是文件/目录所有组的一部分,那么这是否应该或不应该起作用? - Elijah Lynn
显示剩余4条评论

11

正如@racl101在一个回答中所评论的那样,这个问题可能与文件夹所有者有关。rsync命令应该由与文件夹所有者相同的用户执行。如果不是同一个用户,你可以进行更改。

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

6

我曾经遇到过同样的问题。对我来说,解决方法是删除远程文件,然后让 rsync 重新创建。


3
在我的情况下,问题是“接收器挂载点”被错误地挂载了。由于某些奇怪的原因,它处于只读模式。 看起来像是rsync正在复制文件,但实际上并没有复制。 我检查了我的fstab文件并将挂载选项更改为默认值,重新挂载文件系统,然后再次执行rsync。这样就没问题了。

2

我在向不能(正确地)处理时间的文件系统写入时遇到了这个问题——我想是SMB共享或FAT之类的。

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


我正在使用Mac电脑,通过rsync同步到Linux(一个Slicehost服务器)。 - dreeves
啊,奇怪... 既然你在Mac上使用rsync,我应该警告你:它不能正确地保留所有OS X文件属性,所以可能会发生糟糕的事情。请参考:http://blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful/ - David Wolever
你可以使用最新版本的MacPorts (sudo port install rsync),这样它就会更加稳定。要检查它:rsync --version: rsync version 3.0.5 协议版本 30 ... append, ACLs, xattrs, iconv, symtimes, file-flags ... (ACL和xattrs是重要的部分) - David Wolever
苹果提供的rsync(至少在10.5和10.6上)具有“--extended-attributes”选项,可复制文件属性。 - mjs
1
在Macintosh上,rsync确实设置了所有文件属性,并且已经这样做了相当长的时间,请注意参考“坏事可能发生”的URL日期为2006年! - tgunr
2
答案不应该包含问题。这更适合作为评论发表。 - Engineer2021

1
我也遇到了这个问题,我的问题是根文件夹权限问题,该文件夹包含我要传输的文件。我不在乎rsync中是否包含该根文件夹,我只关心其中的内容。错误来自于我的命令,我需要在末尾指定一个额外的/。如果没有这个斜杠rsync将会尝试设置文件夹的时间戳。
例如:
这将尝试在html上设置时间戳。
rsync /var/www/html/ ubuntu@xxx.xxx.xxx.xxx:html

这将不会

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

1
这件事发生在一个类型为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不同,则它们不允许您将时间更改为除“现在”之外的任何其他时间。 - Alexis Wilke
你能链接到这样的手册页吗?我的手册页中都没有提到 utime() - Sam Brightman
2
当进程具有适当特权或有效用户ID等于文件的用户ID,或者times为NULL且进程对文件具有写许可权限时,允许更改时间戳。 - Alexis Wilke

0

如果您在源或目标上运行rsync进程时,处理的文件最近未被修改,则可能会出现此错误...因为它无法为最近修改的文件设置时间。


0

我在尝试修复新的MacOS Monterey上的时间戳时遇到了这个错误,迁移助手决定将所有时间戳设置为复制操作发生的时间,而不是原始文件的时间。

anddam's answer 对我没有帮助,因为rsync命令中使用的远程用户与目录和文件所有者匹配。

经过进一步研究,我意识到我无法通过SSH访问Mac的文档目录(错误代码ls:Documents:Operation not permitted)。

我成功解决了这个问题,方法是打开Mac上的系统偏好设置,然后选择安全性与隐私,转到隐私选项卡,选择完全磁盘访问并选中sshd-keygen-wrapper旁边的框。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接