ipfs pin 詳解

ipfs pin 簡介

pin 在英文中是大頭針、釘住的意思。在 ipfs 中, pin 表示將文件長期保存在本地,不被垃圾回收。

ipfs pin 原理

每個文件塊都有自己的 pin 狀態(tài),由 pin 管理器 Pinner 進行管理。
ipfs 在做 GC 等操作時,會根據(jù)每個文件塊在 pin 狀態(tài),對其做出相應的處理。

文件塊 的 5 種 Pin 狀態(tài)

Recursive 狀態(tài)

文件塊樹被遞歸添加到 pin 中,根文件塊的狀態(tài)是 Recursive,非根文件塊的狀態(tài)是 Indirect

Direct 狀態(tài)

只有目標文件塊添加到 pin 中, 子孫塊不做處理,目標文件塊的狀態(tài)就是 Direct

Indirect 狀態(tài)

文件塊樹被遞歸添加到 pin 中,根文件塊的狀態(tài)是 Recursive,非根文件塊的狀態(tài)是 Indirect

Internal 狀態(tài)

ipfs 使用文件塊來保存 pinner 狀態(tài),這些文件塊的狀態(tài)就是 Internal

NotPinned 狀態(tài)

文件塊沒有被 pin,在 GC 時會被刪除

存儲文件塊 pin 狀態(tài)的數(shù)據(jù)結構

查詢文件塊的 pin 狀態(tài)

文件塊的 pin 狀態(tài)持久化

根據(jù) cid 列表長度的不同,會有兩種情況。

  • 情況1,如果 cid 列表的長度小等于 8192,僅會生成一個internal ipld node,該 node 的 links 記錄 cid 列表的所有 cid。
  • 情況2,如果 cid 列表的長度大于 8192,會對每個 cid 做 hash 后取模,放到 256 個桶中。遍歷每個桶,如果桶不為空,則生成一個internal ipld node,并且該 node 的 links 記錄桶內所有 cid。然后,會生成一個internal ipld node, 該 node 的 links 記錄所有非空桶對應的internal ipld node。

在圖中,direct cid 列表屬于情況1,recurse cid 列表屬于情況2。internal ipld node A 的 links 包含所有狀態(tài)為 direct 的 cid,internal ipld node B 的 links 包含的都是狀態(tài)為 internal 的 cid,這些internal ipld node包含所有狀態(tài)為recurse的cid。root internal ipld node 的 links 包含internal ipld node Ainternal ipld node B

root internal ipld node的 cid 會被存儲到 leveldb 中。

ipfs pin 使用

展示

列出所有被 pin 的塊

ipfs pin ls

列出 pin 為指定狀態(tài)的塊

ipfs pin ls -t direct
ipfs pin ls -t indirect
ipfs pin ls -t recursive

增加

遞歸 pin

ipfs pin add QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca

直接 pin(只 pin 指定 hash 的文件塊)

ipfs pin add --recursive=false QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca

移除

遞歸從 pin 中移除

ipfs pin rm QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca

直接從 pin 中移除

ipfs pin rm --recursive=false QmZ98HahPRKRcfoYoJchZNKzFxSHFWw6WxvQc1hpFEoFca

參考版本

ipfs 在快速演進,所有使用方式和原理有可能會發(fā)生改變,在此標注該文章對應的 ipfs 版本號。

ipfs version 0.4.18-dev
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容