Watch at Ease看见世界,读懂生活。

科技 · 实用指南

rsync 以代码 23 退出?改权限前先定位失败对象

代码 23 只说明至少一次传输出错,不等于权限诊断。把早先错误映射到对象、进程侧、操作和账号,再证明目标集合已交付。

原创示意图:区分 rsync 代码 23 背后的 sender、传输与 receiver/generator 操作。
原创示意图:修复前先分类早先操作。 Watch at Ease

最后的代码 23 行只是汇总。修改权限、排除项或 rsync 参数前,先保存完整输出并找到第一条具体失败。

为失败对象、sender 或 receiver/generator、文件系统操作、errno 与有效账号建立账本。只修复这个边界,再重跑真实命令并核对预期集合。

保存精确命令和完整日志

记录两端、完整命令、rsync 版本、远端用户、工作目录与退出码。从开头保存 stdout 和 stderr,或启用客户端日志;末尾代码 23 只是汇总。

不要从 sudo、chmod -R 777、宽泛排除或忽略规则开始。它们会在确认失败对象前改变身份或范围。

分类第一条具体失败

对每条早先错误记录精确路径、sender/receiver/generator 标签、open/stat/mkdir/write/rename/元数据等操作及 errno 文本。

把远程认证、协议错误和代码 24 作为独立分支。权限行与 failed verification 行需要不同的测试和修复。

用同一账号复现对象

源端证明每级父目录可遍历、对象可查找、链接目标有效并可读;目标端用一次性名称证明遍历、创建、写入、关闭、重命名及必要元数据操作。

使用与 rsync 相同的本地或远端账号、挂载、容器或服务上下文。仅按已记录操作检查空间、inode、配额、只读挂载、ACL 与身份映射。

只修复已证明的边界

修正能复现失败的最窄所有者、ACL、挂载、容量、缺失路径或参数不匹配。只有遗漏本来就是意图时才排除,并明确修改传输契约。

若受控复现证明版本相关校验缺陷,只比较受支持的修复版本或有限参数变化;不要把例外泛化成权限方案。

证明预期集合已交付

修复后执行不改变意图的真实传输并要求退出码 0,再用 dry-run 和 itemized changes 找出意外剩余工作;只有需要更强内容证明时才承担 checksum 的额外 I/O。

dry-run 不发送文件数据,也可能遇不到同样的系统调用失败,所以不能替代真实运行。真实传输成功且清单无无法解释的遗漏才算关闭。

原创表格:记录对象、进程侧、操作、errno、同账号测试与关闭结果。
原创示意图:验证预期交付集合。 Watch at Ease