ipfs GC 详解

ipfs gc 简介

GC 是garbage collection的缩写,也就是垃圾回收的意思,ipfs GC 时会移除不需要永久保存在磁盘中的数据。

ipfs gc 原理

GC 时的操作

首先,创建一个 marked 列表,标记 GC 时不能删除的块, 这些块包括

  1. 所有 recurse pinned 块, 以及其子孙块
  2. mfs root 块,以及其子孙块
  3. 所有的 direct pinned 块
  4. 为维护 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

你可能感兴趣的:(ipfs GC 详解)