使用rsync -a同步到NFS、对象网关挂载目录或受限账户时,日志可能出现failed to set times ... Operation not permitted。文件内容可能已经传过去,但元数据并未完全按源端保留。
先确认失败对象和业务是否依赖时间戳,不要把这条错误直接当作无害提示。

这条错误说明了什么
rsync官方手册说明,--times或-t会把目标文件和目录的修改时间设置为源端值;-a会隐含启用该行为。报错表示接收端在执行设定时间的系统调用时被拒绝,或目标文件系统无法完成该操作。
内容复制成功与元数据完整保留是两项不同的验收结果。
先定位是文件还是目录失败
保留完整标准错误与退出码,并使用--itemize-changes观察失败路径。用stat对比源端与目标端的类型、所有者、权限和修改时间;再用findmnt -T 目标路径确认目标实际落在哪种文件系统和挂载选项上。
不要用chmod -R 777试错。它不能补充缺失的文件系统能力,还可能破坏原有访问控制。
检查接收端身份与文件系统能力
确认rsync接收进程以哪个用户运行、是否拥有目标对象,以及目标是否为NFS、FUSE、SMB或只允许受限元数据操作的挂载。非特权账户不能随意修改不属于自己的对象;符号链接、目录和普通文件对时间戳支持也可能不同。
修复应针对具体失败对象,不能仅凭目标目录可写就认定所有元数据操作都可用。
什么时候可以使用omit-dir-times
官方手册提供--omit-dir-times或-O,用于在保留文件时间的同时跳过目录时间,NFS接收端尤其常见。若仅符号链接时间失败,可评估--omit-link-times。若业务根本不要求保留时间,可移除-t,但这会影响rsync利用时间和大小判断未变化文件的效率。
不要为了消除报错而盲目去掉整个-a。它还影响权限、递归和其他元数据语义。
怎样验收同步结果
以相同参数重新执行,确认退出码符合预期,再用--dry-run --itemize-changes检查是否仍反复报告时间变化。可在萤光云或LightNode的隔离VPS复现同类挂载。验收标准是关键文件内容一致、必须保留的时间戳一致、脚本正确处理非零退出码且后续增量同步不反复重传。
FAQ
问:文件能打开就可以忽略吗?答:不能直接忽略。构建系统、备份轮转和增量同步可能依赖修改时间,应先确认业务语义。
问:使用sudo运行rsync一定能解决吗?答:不一定。远端身份、root squash和文件系统能力仍可能阻止设定时间。
温馨提示
温馨提示:把内容一致性和元数据一致性分别写进同步验收清单。对NFS与网关文件系统,先在小目录验证支持范围,再决定长期参数。


