Pinning
IPFS-缓存
参考URL: https://www.jianshu.com/p/8d95467bef6c
存储在blocks中的数据,有两种方式,一个是硬盘存储(永久保存),另一个是缓存存储(系统定期清理)。用户使用ipfs add添加的数据都是硬盘存储的,而ipfs get到的数据都是以缓存存储的。
Pinning 在IPFS里是一个很重要的概念,当我们每次请求一个网络上的内容的时候,IPFS总是会把内容先同步的本地提供服务,而为了防止 IPFS 存储空间不停增长,实际上使用cache 机制来处理文件, 如果文件在一段时间内没有被使用,文件会被”回收“。 Pinning 的作用就是把文件”钉“住,确保文件在本地不被”回收“。 如果是重要的文件,就可以使用 Pinning 防止文件被删除。
当我们使用ipfs add 添加文件时,默认会进行Pinning(使用其他命令获取的文件不会进行pinning)
我们可以通过ipfs pin ls查看pin过的数据
ipfs pin ls
查询下某一个hash 是否被pin:
[root@VM_0_14_centos ~]# ipfs pin ls QmVa54cW1WR7jRKDtGc7awUNYGccQixPjesraSguTK2tPX
QmVa54cW1WR7jRKDtGc7awUNYGccQixPjesraSguTK2tPX indirect through QmfUxRD5UYesb4fMWhkZXwZNqfGyfd6mgfpm1MYA1xG3kC
ipfs get获取到的数据,并没有被pin处理过,将属于缓存存储。但如果你对这份数据很感兴趣,想永久保存它,我们可以手动pin处理该数据。
ipfs pin add QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
pinned QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T recursively
如果你对这个数据不感兴趣了,我们可以解除它的pin锁定,命令ipfs pin rm -r 。 操作如下:
ipfs pin rm -r QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
unpinned QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
这样这个数据就被解除pin了。pin列表中将不会存在这个hash值。
pin rm 的参数 -r 表示递归的删除pin 状态,对于没有pin住的文件, 如果执行GC操作 ipfs repo gc 文件会被删除。
另:ipfs cat的数据都是在blocks中存储的数据,如果blocks中没有该数据,将会从ipfs网络中请求数据。
Pin 是将文件长期保留在本地,不被垃圾回收。执行 ipfs pin ls 可以查看哪些文件在本地是持久化的,通过 add 添加的文件默认就是 pin 过的。
总结:IPFS节点保存本机文件:通过add命令都会pin、永久保存。 但不是所有文件都会永久保存,执行命令 ipfs repo gc 可以回收没有pin住的文件,释放空间。ipfs pin ls 当前节点pin的所有数据。