IPFS操作教程9: Pinning-锁定文件永久保存

Online
个人专栏
热度: 42097

IPFS操作教程9: Pinning-锁定文件永久保存

IPFS操作教程9: Pinning-锁定文件永久保存

本节学习目标

  1. 学会使用pin命令锁定你喜欢的数据
  2. 明白你上传的数据具体存到哪了,是以什么方式存储的,如实际硬盘存储还是缓存存储。
  3. 手动清理ipfs缓存

学习步骤

第一步:查看本地上传和检索到的数据存哪了

我们本地上传到ipfs的数据,就是使用ipfs add命令添加到本地ipfs存储库了。ipfs的存储库有些人翻译成ipfs资源库,一个东西。这个存储库在我们ipfs init时,在本机用户名下创建的,不过是个隐藏文件夹,显示隐藏文件后,你会看见一个./ipfs的文件夹,这就是本机的ipfs存储库。打开./ipfs文件夹之后,你会看到:IPFS系统

我们添加的数据就存储在上图中blocks中了,不过是以块数据的类型存储的。 从ipfs网络下载的数据,即使用ipfs get得到的数据同样也存储到blocks中了。

第二步:使用pin锁定你喜欢的数据

存储在blocks中的数据,有两种方式,一个是硬盘存储(永久保存),另一个是缓存存储(系统定期清理)。用户使用ipfs add添加的数据都是硬盘存储的,而ipfs get到的数据都是以缓存存储的。这里将提到pin的作用。

实际上blocks中的数据存储方式是由pin决定的。pin的作用是锁定数据,保证数据永不被系统清理掉。上面说的两种存储方式,现在可以说成一个是数据被pin处理过的,另一个是没有被处理过的。

ipfs系统会默认将ipfs init后的数据以及ipfs add的数据进行pin处理后存储到blocks中的。我们可以通过ipfs pin ls查看pin过的数据,如下:

$ ipfs pin ls
QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V indirect
QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm indirect
QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv recursive
QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn recursive
QmWj7uThVH9a2HBiewA53U6g1uwzj1N4r4LNDSV7V3BgGi indirect
QmXgqKTbzdh83pQtKFb19SpMCpDDcKR2ujqk3pKph9aCNF indirect
QmaTbcssmxUTB7na2ggMDTBXaUbSJzJsT5xQEnj3KJx9VL recursive
QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7 indirect
QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T recursive
QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB indirect
QmREJwRsxCuENyEhH2cfHbA7Q3g43MBAkUFFaV36TZ3YwH recursive
QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y indirect
QmZmr5ECfGMJLJGM1yx8LNQznYraxCXqPzN6S6V3R7NxFP indirect
QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y indirect

你可以add一个小数据,查看pin列表中,有没有刚刚产生的hash值?

ipfs get获取到的数据,并没有被pin处理过,将属于缓存存储。但如果你对这份数据很感兴趣,想永久保存它,ok,没问题,我们可以手动pin处理该数据,将其转换为硬盘存储,命令很简单 ipfs pin add <hash> 在终端的操作如下:

localhost:ipfs-tutorial zhanghengxing$ ipfs pin add QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
pinned QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T recursively

现在你再打开pin列表,该hash将会出现在里面。

如果你对这个数据不感兴趣了,我们可以解除它的pin锁定,命令ipfs pin rm -r <foo hash>。 操作如下:

$ ipfs pin rm -r QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
unpinned QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T

这样这个数据就被解除pin了。pin列表中将不会存在这个hash值。

小提示:ipfs cat的数据都是在blocks中存储的数据,如果blocks中没有该数据,将会从ipfs网络中请求数据。

⚠️:接下来的操作需要关掉本地ipfs节点。

我获取下解除pin的数据还在不在?

$ ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
liyc1215

数据还存在。

缓存的有效期是多长时间呢?我不确定,

我们可以手动清理缓存,命令ipfs repo gc,操作如下:

$ ipfs repo gc
removed QmVvCAgjEgTVMpm9ng3Re9ByiCSZDaXiotmv3DnfywDq4t
removed QmXgnwQn6xZUYXtq8gtKejDffU2cnigqiHQ6CrKWK94PUj
removed Qmc7cgRoGHfvepuBEk1TY3coByY9bwH3AsXnoUvtnQjPSr
removed QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
removed QmbUNyTXGMXj1N4symorb9ZuN5vFWxw6M7NFFox8AeeuDk
removed QmPymDr8PPpyBXtFPDncrybF9V1G6XmGuamhc6r3BVFRXn
removed QmP4z1hBdsGsLEHGDCx15VBo8E7XqouUs3tZrhKWBfsYGx

被清理的就有QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T。 现在我们再cat这个数据,还能吗?

$ ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
Error: merkledag: not found

数据已经找不到了。

明白了pin的使用,赶快锁定你喜欢的数据吧。

作者:

区块链高级工程师、go语言工程师、IPFS早期研究者。网络著书有《IPFS一问一答》、《IPFS操作教程》、《区块链密码学》、《区块链共识算法》;跟踪并翻译报道《IPFS Weekly》,研究并翻译IPFS、Filecoin白皮书,业界知名专家学者——张默默老师!

声明:本文为入驻“火星财经 专栏”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
本内容旨在传递行业动态,不构成投资建议或承诺。