ipfs gc 簡(jiǎn)介
GC 是garbage collection
的縮寫队秩,也就是垃圾回收的意思,ipfs GC 時(shí)會(huì)移除不需要永久保存在磁盤中的數(shù)據(jù)昼浦。
ipfs gc 原理
GC 時(shí)的操作
首先馍资,創(chuàng)建一個(gè) marked
列表,標(biāo)記 GC 時(shí)不能刪除的塊, 這些塊包括
- 所有 recurse pinned 塊, 以及其子孫塊
- mfs root 塊关噪,以及其子孫塊
- 所有的 direct pinned 塊
- 為維護(hù) pinner 狀態(tài)鸟蟹,用到的所有 internal pinned 塊
接下來(lái),通過(guò)塊存儲(chǔ)組件使兔,遍歷本地所有塊的 Cid戏锹,如果 Cid 不在 marked
列表中,則刪除該 Cid 對(duì)應(yīng)的塊文件火诸。
會(huì)發(fā)生 GC 的兩種情況
定時(shí)檢查是否 GC
"Datastore": {
"StorageMax": "10GB", // 最大存儲(chǔ)空間, 實(shí)際上, 存儲(chǔ)量超過(guò)該值仍可以繼續(xù)存儲(chǔ)
"StorageGCWatermark": 90, // 存儲(chǔ)空間警戒線, 只有 已使用存儲(chǔ)空間/最大存儲(chǔ)空間 超過(guò)該值, 定時(shí)自動(dòng) GC 才會(huì)生效, 否則不會(huì) GC
"GCPeriod": "1h", // 每過(guò) 1h, 檢查是否需要 GC
...
},
如配置所示锦针,StorageMax
表明 ipfs 的最大存儲(chǔ)空間,StorageGCWatermark
表明存儲(chǔ)空間警戒線置蜀,GCPeriod
為檢查是否 GC 的間隔時(shí)間奈搜。
當(dāng)?shù)竭_(dá)檢查時(shí)間時(shí),如果已用存儲(chǔ)空間 > StorageMax * StorageGCWatermark
盯荤,則會(huì)發(fā)生 GC馋吗。
注意: 定時(shí) GC 默認(rèn)不開(kāi)啟,需要額外參數(shù)開(kāi)啟秋秤,開(kāi)啟方式下面會(huì)介紹宏粤。
執(zhí)行 GC 命令
當(dāng)主動(dòng)使用 ipfs GC 命令時(shí)脚翘,不管當(dāng)前 ipfs 的存儲(chǔ)情況是怎樣,會(huì)立即發(fā)生 GC绍哎。
ipfs gc 使用
啟動(dòng)定時(shí) GC
使用 ipfs daemon
啟動(dòng) ipfs来农,并不會(huì)自動(dòng)啟動(dòng) ipfs 的定時(shí)GC功能。
需要開(kāi)啟相應(yīng)的參數(shù), 即 ipfs daemon --enable-gc
, 才會(huì)啟動(dòng) ipfs 的定時(shí)GC功能崇堰。
立即執(zhí)行 GC
ipfs 立即執(zhí)行垃圾回收沃于,不管已用存儲(chǔ)空間是否到達(dá)存儲(chǔ)空間警戒線
ipfs repo gc