refs local能代表可恢复数据吗? 图 1
refs local能代表可恢复数据吗? · 图 1

refs local回答的是“当前仓库里有哪些本地区块”,而恢复问题问的是“从指定根出发,业务需要的整个对象是否完整、可读并受到持久化保护”。两者只在块集合这一层相交。把输出保存下来很有价值,但它更像仓库库存快照,不是可以独立签字的恢复证明。

清单列出所有本地对象

ipfs refs local列出所有本地对象的哈希。

该命令把所有本地对象视为raw block,并返回CIDv1 Raw CID。

命令遍历本地对象并输出哈希,统一把它们视作raw block,返回CIDv1 Raw CID。这个表示有利于对块集合去重和比较,却不保留每个块在上层DAG中的原始codec语义。看到CID形式变化时,不应立即判断内容被重新编码;先比较multihash所代表的内容摘要。

大型仓库的输出可能很长,应流式写入带时间戳的文件,记录Kubo版本、仓库路径和退出码。排序去重后再计算清单哈希,便于比较两个快照。不要让终端截断、日志采集上限或失败的下游管道把“部分清单”伪装成完整结果。

出现某块只证明此刻存在

列表中出现某个块不代表它属于递归Pin,也不证明从目标根可达的全部子块都存在。

观察可以下结论不能下结论
根块在列表本地有该根块后代块完整
子块在列表本地有这个块它仍从目标根可达
全部块数量稳定总体库存未明显变关键业务DAG未变化
两仓清单相同块集合相同Pin和MFS元数据相同

未被Pin或MFS保护的块此刻可能存在,但下一次GC后消失。反过来,根被递归Pin也可能因为磁盘损坏而出现坏链。因此“存在”与“受保护”“可从根遍历”是三种不同状态,灾备记录必须分别验证。

从根开始做集合核对

为每个关键业务对象保存根CID和预期用途。恢复时先确认根块在本地,再遍历根下DAG得到所需块集合,与refs local库存求差集。差集为空说明所需块均在本地,但还应进行解码和实际读取;差集非空则输出缺失CID及其路径,便于从备份补回。

DAG的块数与累计结构可用dag stat结构统计辅助比较。共享子树会让多个根使用同一块,因此多个业务对象的块数不能直接相加当作仓库库存。

Pin验证负责持久化边界

恢复验收应继续用pin verify检查递归Pin,并用dag stat或实际读取验证目标DAG。

对计划长期保留的根执行递归Pin检查,并用pin verify坏Pin排查定位断链。若清单里存在业务块但根没有Pin,先确认它是否由MFS或其它递归根间接保护;没有明确保护关系的对象应被视为可回收。

执行repo gc清理边界前后分别保存清单与根级读取结果,能揭示哪些临时块被清理。生产仓库不应把GC当作验证工具;先在副本演练,并为原始备份保留独立副本。

两类快照都要备份

块清单用于证明blockstore集合,Pin和MFS清单用于证明保留意图。只复制前者,恢复后不知道哪些根应被固定;只复制Pin元数据,若实际块不完整也无法恢复内容。将根清单、CAR、Pin配置、MFS根和版本信息放入同一恢复批次,才能解释数据来源。

最终验收选择代表性文件做真实读取和业务哈希比对,并在隔离环境执行一次完整恢复。本文讲的是本地区块审计,不承诺网络提供者或远端Pin服务可用,也不构成数字资产投资建议。

区块库存资料

  1. Kubo refs local:本地区块清单与CID输出。
  2. Kubo pin verify:递归Pin完整性。
  3. Kubo dag stat:DAG遍历和可达性统计。

资料访问时间为2026-08-15。仍需保留的边界:大型仓库输出规模和执行时间依赖本地区块数量,文章不提供统一性能阈值。