科技 · 实用指南
cp 提示“preserving times … Operation not permitted”?先证明元数据契约
文件内容可能已复制,但某项元数据更新失败。先保存实际程序、目标对象和首个被拒属性,再决定时间戳、所有权、模式、ACL 或 xattr 是否真的必须保留。

文件内容可能已复制,但某项元数据更新失败。先保存实际程序、目标对象和首个被拒属性,再决定时间戳、所有权、模式、ACL 或 xattr 是否真的必须保留。
数据写入成功不等于时间戳、所有权、模式、ACL、安全标签或扩展属性都已保留。
1. 固定复制与目标证据
保存完整命令、cp 路径与版本、有效用户、源和目标、退出码及首条未过滤诊断。记录目标是否预先存在及其所有者。
不要立刻 sudo、覆盖唯一目标或丢弃 stderr;这些动作会掩盖失败的是时间、所有者、模式、上下文还是 xattr。
2. 分别比较字节和属性
对一个非敏感样本做哈希或字节比较,再以机器可读方式记录两端类型、大小、所有者、组、模式、atime 和 mtime,并注明时区与精度。只有用途需要时才查 ACL、xattr 和安全标签。
建立“要求、支持、观察值”矩阵。内容哈希正确但 mtime 更新,对普通传输或许可接受,却可能不适合增量备份、可复现构建或法律归档。
3. 区分权限与存储能力
确认实际 cp 实现,因为 BusyBox 与 GNU 选项不同。解析目标文件系统和挂载选项,并用调用者拥有的临时文件复测。
若新文件能保留时间而既有目标不能,查所有权或不可变标志;若都失败,再查目标能力、只读状态、ID 映射或安全策略。sudo 成功只是权限线索,不是自动授权。
4. 选择最窄且声明清楚的修复
若时间戳必需且目标支持,就写入调用者拥有的新对象,或按审查后的权限安排处理。若某属性无关且目标不支持,只省略该属性并记录损失。多项元数据必须保留时,改用归档或文件系统原生工具。
不要为一条未解释诊断做大范围 chmod/chown、全局安全策略修改或递归 sudo。名字和字节到达并不证明 FAT 类存储保存了 Unix 所有权。
5. 按真实用途验收副本
在代表性样本上重复真实流程。关闭并重新打开目标后,核对内容与每项必需属性;比较中包含时区和时间精度。
只有必需矩阵通过、退出策略能区分允许的属性损失与新错误且回滚清楚时才验收。若目标无法满足契约,就更换容器或目标。
