【问题标题】:rsync error: failed to set times on "/foo/bar": Operation not permittedrsync 错误:未能在“/foo/bar”上设置时间:不允许操作
【发布时间】:2010-10-14 15:46:07
【问题描述】:

我从 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 touch"
  • 我发现如果您还设置了一个到同一目的地的 cron 作业,则会出现此错误。更改 cron 作业(crontab)的时间将有助于解决它。就我而言,如果我还设置了 cron 作业,则只有在执行手动 rysnc 时才会出现此错误。

标签: rsync file-transfer


【解决方案1】:

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

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

【讨论】:

  • 我在 Mac 上,正在同步到 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 ...追加、ACL、xattrs、iconv、symtimes、文件标志 ...(ACL 和 xattrs 是重要的)
  • Macintosh 上的 rsync 确实设置了所有文件属性,并且已经这样做了很长一段时间,请注意引用“可能发生的坏事”的 URL 是 2006 年的!
  • 答案确实不应该包含问题。这将更适合作为评论。
【解决方案2】:

如果/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 以删除隐含选项。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    由于此答案已被投票,因此希望对某人有用,我将对其进行扩展以使其更清晰。

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

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

    【讨论】:

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

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

    【讨论】:

      【解决方案6】:

      这发生在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 并且进程对该文件有写权限。”
      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          @racl101 已对答案发表评论,此问题可能与 文件夹所有者 有关。 rsync 命令应由与文件夹所有者相同的用户执行。如果不一样,你可以改变它。

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

          【讨论】:

            【解决方案10】:

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

            例子:

            这将尝试在html上设置时间

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

            这不会

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-12-05
              • 2021-11-04
              • 1970-01-01
              • 1970-01-01
              • 2016-09-21
              • 2015-08-20
              • 2012-03-10
              • 2022-01-23
              相关资源
              最近更新 更多