MFS目录显示的Size很小,而CumulativeSize很大,通常不是统计错误。前者聚焦当前节点本身的编码大小,后者把从该节点可达的DAG数据累计进去;对于文件和目录,两者的业务含义并不相同。若直接把多个路径的CumulativeSize求和,还会因为共享区块被重复计算而高估实际仓库占用。
先确认查询的是MFS路径
ipfs files stat接受MFS路径并展示该节点的哈希、Size、CumulativeSize、ChildBlocks与Type等状态。
files stat接受的是MFS路径,例如根目录或其下文件。MFS有会随写入和移动而更新的根CID,查询结果是某一时刻的视图。采集前记录路径、根哈希和时间;批量遍历期间若目录仍被修改,不同子路径结果可能来自不同快照。
Hash用于定位当前MFS节点,Type区分文件与目录,ChildBlocks描述直接子块数量。Size和CumulativeSize需要结合节点类型阅读,不能只以一个数字判断文件逻辑长度、网络传输量和磁盘占用。
Size与CumulativeSize分属两层
| 场景 | Size更接近 | CumulativeSize更接近 |
|---|---|---|
| 目录 | 目录节点自身编码 | 目录下可达DAG累计 |
| 分块文件 | 当前根或节点编码 | 文件DAG全部块累计 |
| 共享子树 | 当前节点自身 | 包含共享块的路径累计 |
| 空目录 | 小型目录节点 | 通常仍含节点本身 |
CumulativeSize包含DAG结构开销,并不一定等于用户看到的原始文件字节数。不同分块器、codec和目录结构可让相同内容产生不同DAG统计;做容量趋势时应固定导入参数和客户端版本。
—size输出的就是累计值
—size只输出cumulsize,而不是仅输出对象自身的size。
这个快捷选项只输出cumulsize,而不是对象自身的size。脚本如果把返回的单个数字命名为file_size,就会在后续报表里混淆逻辑文件长度与DAG累计规模。变量名应明确写成cumulative_dag_size,并在指标说明中保留命令版本。
对单个文件的业务字节长度,应由文件元数据或实际读取结果核验;对传输与备份规划,可参考累计DAG规模;对磁盘容量则应转向仓库级统计。一个数字不能同时承担三种口径。
—with-local回答本地拥有多少
—with-local会计算DAG在本地拥有的数量,并在可能时给出总大小。
当DAG并非全部在本地时,with-local尝试计算本地拥有的部分,并在可能时给出总量。这适合识别MFS引用存在但相关区块未全部落地的情况。结果仍应与实际读取、pin verify或dag遍历交叉验证,不能把“已有部分块”写成文件已离线可用。
若本地数量下降,先排查垃圾回收、Pin变更和仓库损坏。可参考repo verify损坏排查确认是否存在不可读区块,再判断是数据缺失还是统计阶段无法完成。
为什么不能把目录结果相加
MFS有动态更新的根CID且独立于Pin列表;全仓库实际占用应使用repo stat而不是累加MFS节点值。
MFS独立于Pin列表,两个路径可以引用相同CID;同一子树也可能同时被MFS和递归Pin保护。对路径累计值求和会重复计算共享块,而blockstore还可能包含不属于MFS的其它对象。全仓库真实占用应使用repo stat空间压力等仓库级口径。
需要比较两个目录时,先明确是比较逻辑内容、可达DAG还是新增唯一块。共享大小问题可参考dag stat共享大小,必要时使用块集合差集,而不是靠算术相减累计值。
一张可复用的采集记录
记录MFS根、路径、Hash、Type、Size、CumulativeSize、ChildBlocks、本地量、采集时间和Kubo版本。趋势告警区分“路径内容增长”“本地可用率下降”和“仓库磁盘增长”,分别指向业务写入、缺块或存储运维。本文只解释数据口径,不保证任何内容在公网长期可用,也不构成投资建议。
MFS容量资料
- Kubo files stat:字段、格式令牌和with-local。
- Kubo files:MFS根与Pin独立性。
- Kubo repo stat:仓库实际占用与对象数。
资料访问时间为2026-08-15。仍需保留的边界:共享子树、重复块和惰性加载会使路径累计值无法直接相加为磁盘占用。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。