CAR可以把IPLD数据块和根CID装进一个可移动文件,但“文件能打开”并不等于备份完整。合格验收要回答三件事:每个块是否与自己的CID匹配、从根CID遍历需要的块是否齐全、在隔离环境导入后能否恢复出目标文件。三项分别对应完整性、闭包和可恢复性。
CAR文件里到底有什么
CAR v1由头部和一系列CID加原始块组成,头部声明版本与一个或多个root。CAR v2在外层增加可选索引,便于随机访问,但内部仍可承载CAR v1数据。根CID是遍历起点,不是一份传统压缩包目录,也不保证所有收录块都一定从根可达。
同一个CAR可以包含根不引用的额外块;反过来,使用本地优先或不完整导出时,也可能只有根和部分子树。备份清单应额外记录预期根CID、源数据名称、导出工具版本、文件字节数和SHA-256,不能只保存文件名。
第一道验收:逐块验证CID
CID把内容编解码信息与多哈希结合起来。校验器读取每一项后,应按CID指定的哈希算法重新计算块摘要并比较。任何块不匹配都表示文件损坏、传输截断或内容被替换,不能用重新打包产生的新CID来掩盖。
文件级SHA-256适合发现整个CAR字节是否改变,但它不能替代逐块CID验证:合法重排、索引变化或重新封装可能改变文件哈希,却仍包含相同内容;逐块验证也不能替代文件哈希,因为运营上仍需确认拿到的是计划中的那一份备份。
第二道验收:从根遍历闭包
从CAR头部的每个root开始,按节点中的CID链接递归遍历。每遇到一个链接,都要确认对应块存在且可解码,直到叶子。最终得到的reachable集合与CAR全部块集合可以不同:缺少reachable块意味着备份不完整;存在unreachable块则要判断是跨文件DAG需要、历史残留还是可清理冗余。
Kubo的ipfs dag import会在全部CAR处理完后尝试pin roots。如果组合块不能形成完整DAG,单个root的pin会失败。这个行为可以作为闭包验收的一部分,但生产流程仍应保留遍历报告,不能只依赖一行导入退出码。
隔离恢复演练比原机导入更可信
导出可以使用ipfs dag export <root> > backup.car,但--local-only允许跳过本地缺失块,生成的CAR可能是partial。验收环境应使用空的临时repo、禁用网络补块后导入,避免节点从网络悄悄补齐缺失内容,让坏备份误通过。
ipfs dag import --pin-roots backup.car
ipfs dag stat <root-cid>
ipfs cat <root-cid> > restored.bin
恢复后比较目标文件哈希、目录树、文件数量和业务元数据。若原对象经过UnixFS分块,根CID相同通常能承诺相同DAG,但最终业务验收仍要确认解码后的文件可用。
完整、持久和可恢复是三张表
CID正确只说明现有块没有被篡改;CAR存放在单块硬盘上仍可能同时丢失;拥有完整CAR也不代表加密密钥、解密软件或元数据还在。建议至少维护一份主备份、一份不同故障域副本和一份定期恢复报告。
| 目标 | 证据 | 不能证明什么 |
|---|---|---|
| 内容完整 | 逐块CID与文件哈希 | 介质明天仍可读 |
| DAG完整 | 根遍历无缺块 | 业务文件能解密 |
| 可恢复 | 隔离导入和文件比对 | 其他副本存在 |
| 持久性 | 多副本与巡检 | 内容来源真实 |
根CID还需要从可信清单获得。攻击者若同时替换CAR和清单中的CID,内容寻址本身无法证明来源真实性。
IPFS CAR备份与完整性核验的资料版本与边界
- IPFS Glossary: CAR:CAR、CAR v1、根CID与内容寻址定义。
- IPFS Kubo CLI:机制、字段、操作路径与风险边界交叉验证。
资料访问日期为2026年7月23日。本文按当前规范解释机制和核验方法,不构成投资、法律或资金安全承诺。节点版本、链配置与接口字段可能变化,实际操作前应重新打开一级来源,并以目标环境返回为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。