ipfs gc 简介
GC 是garbage collection
的缩写,也就是垃圾回收的意思,ipfs GC 时会移除不需要永久保存在磁盘中的数据。
ipfs gc 原理
GC 时的操作
首先,创建一个 marked
列表,标记 GC 时不能删除的块, 这些块包括
- 所有 recurse pinned 块, 以及其子孙块
- mfs root 块,以及其子孙块
- 所有的 direct pinned 块
- 为维护 pinner 状态,用到的所有 internal pinned 块
接下来,通过块存储组件,遍历本地所有块的 Cid,如果 Cid 不在 marked
列表中,则删除该 Cid 对应的块文件。
会发生 GC 的两种情况
定时检查是否 GC
"Datastore": {
"StorageMax": "10GB", // 最大存储空间, 实际上, 存储量超过该值仍可以继续存储
"StorageGCWatermark": 90, // 存储空间警戒线, 只有 已使用存储空间/最大存储空间 超过该值, 定时自动 GC 才会生效, 否则不会 GC
"GCPeriod": "1h", // 每过 1h, 检查是否需要 GC
...
},
如配置所示,StorageMax
表明 ipfs 的最大存储空间,StorageGCWatermark
表明存储空间警戒线,GCPeriod
为检查是否 GC 的间隔时间。
当到达检查时间时,如果已用存储空间 > StorageMax * StorageGCWatermark
,则会发生 GC。
注意: 定时 GC 默认不开启,需要额外参数开启,开启方式下面会介绍。
执行 GC 命令
当主动使用 ipfs GC 命令时,不管当前 ipfs 的存储情况是怎样,会立即发生 GC。
ipfs gc 使用
启动定时 GC
使用 ipfs daemon
启动 ipfs,并不会自动启动 ipfs 的定时GC功能。
需要开启相应的参数, 即 ipfs daemon --enable-gc
, 才会启动 ipfs 的定时GC功能。
立即执行 GC
ipfs 立即执行垃圾回收,不管已用存储空间是否到达存储空间警戒线
ipfs repo gc