区块链研习社IPFS-星际文件传输系统IPFS 深度解析

ipfs pin 详解

2018-10-21  本文已影响4人  橙小肠

ipfs pin 简介

pin 在英文中是大头针、钉住的意思。在 ipfs 中, pin 表示将文件长期保存在本地,不被垃圾回收。

ipfs pin 原理

每个文件块都有自己的 pin 状态,由 pin 管理器 Pinner 进行管理。
ipfs 在做 GC 等操作时,会根据每个文件块在 pin 状态,对其做出相应的处理。

文件块 的 5 种 Pin 状态

Recursive 状态

文件块树被递归添加到 pin 中,根文件块的状态是 Recursive,非根文件块的状态是 Indirect

Direct 状态

只有目标文件块添加到 pin 中, 子孙块不做处理,目标文件块的状态就是 Direct

Indirect 状态

文件块树被递归添加到 pin 中,根文件块的状态是 Recursive,非根文件块的状态是 Indirect

Internal 状态

ipfs 使用文件块来保存 pinner 状态,这些文件块的状态就是 Internal

NotPinned 状态

文件块没有被 pin,在 GC 时会被删除

存储文件块 pin 状态的数据结构

查询文件块的 pin 状态

文件块的 pin 状态持久化

根据 cid 列表长度的不同,会有两种情况。

在图中,direct cid 列表属于情况1,recurse cid 列表属于情况2。internal ipld node A 的 links 包含所有状态为 direct 的 cid,internal ipld node B 的 links 包含的都是状态为 internal 的 cid,这些internal ipld node包含所有状态为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 为指定状态的块

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 在快速演进,所有使用方式和原理有可能会发生改变,在此标注该文章对应的 ipfs 版本号。

ipfs version 0.4.18-dev
上一篇下一篇

猜你喜欢

热点阅读