对象版本、删除与属性语义
对象键相同,不代表对象行为相同
对象存储版本控制会让一个键对应多个版本。常规列举和复制通常只处理当前可见版本;源端的版本 ID、删除标记、保留期限和对象锁状态不会因为复制内容自动在目标端等价出现。
如果业务只要求当前版本,应明确记录:
- 历史版本和删除标记不在迁移范围;源 Bucket 在观察期保持只读。
- 目标端启用版本控制只用于保护迁移后的覆盖与删除,不代表已复制源历史。
- 回滚需要重新读取源端历史时,源端版本和密钥仍处于可用状态。
如果业务要求全部历史版本,至少建立 Bucket + Key + VersionId + IsDeleteMarker + LastModified + Size + StorageClass + Retention 清单,并在隔离 Bucket 验证按时间顺序写入后的读取结果。目标端通常会生成新的版本 ID,应用和审计系统不能继续依赖源版本 ID。
| 策略 | 行为 | 风险 |
|---|---|---|
不传播删除 | 只复制新增与覆盖,目标保留源端已删除对象 | 最安全,但目标会多出对象,需要后续清理 |
只生成差异 | 列出源端不存在、目标端存在的对象,人工批准 | 适合正式割接前审计 |
审核后传播 | 通过 sync 或等价任务删除目标多余对象 | 范围或方向错误会造成批量数据丢失 |
rclone 官方说明 copy 不删除目标对象,而 sync 会修改目标使其匹配源端。第一次全量应以 copy 为安全起点;删除传播必须先使用 --dry-run,保存完整清单并确认目标版本保护。rclone copy · rclone sync
| 属性 | 迁移问题 | 建议 |
|---|---|---|
Content-Type / Cache-Control | 影响浏览器展示和 CDN 缓存 | 逐类型抽样,并从业务域名访问验证 |
自定义元数据 | 不同后端读写能力不同 | 建立键名、编码和大小限制清单 |
ACL / Bucket Policy | IAM 模型不可直接等价 | 在目标端按最小权限重建,不复制源账号标识 |
标签与生命周期 | 迁移后可能立即归档或删除 | 正式全量前冻结目标规则,验收后再启用 |
存储类型 | 低频、归档名称和取回行为不同 | 用目标策略重新分类,不能只复制源枚举 |
服务端加密 | 需要源端解密与目标端重新加密权限 | 分开记录 KMS、角色、密钥轮换和撤权 |
对象锁与保留 | 涉及治理、合规和不可变期限 | 单独做产品、法律和恢复评审 |
阿里云在线迁移文档明确列出部分可迁移 Header,并说明 ACL、服务端加密和标签等属性并非都受支持。其他云和源目标组合也应以创建任务当天的属性表为准。阿里云迁移限制
ETag 可能是单段对象的 MD5,也可能由分片上传、加密或厂商实现生成。跨云后 ETag 不同不能直接证明内容错误,ETag 相同也不能替代全部业务校验。
rclone 只有在双方后端支持共同哈希时才能直接比较哈希;否则可能使用大小、修改时间或下载内容。正式验收应记录实际比较方式,并对关键对象和分层随机样本下载后计算统一的 SHA-256。rclone 后端能力对照
归档迁移不是“任务自动重试”就能解决:
- 按前缀和批次列出归档对象与容量。
- 计算解冻时间、取回费用和临时副本有效期。
- 先解冻,再让迁移和失败重试落在有效期内。
- 保存未解冻、解冻过期和不支持对象的处置清单。
- 在目标端按新的生命周期重新归档,不盲目继承源最后修改时间规则。
核验日期:2026-07-14。华为云 OMS 当前文档包含归档取回相关流程,但具体源云、存储类型和自动解冻能力必须在目标地域重新核对。华为云 OMS 用户指南