LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 如何在IPFS中Pin一个文件?

如何在IPFS中Pin一个文件?

2020-07-12 FIL社区 来源:区块链网络

对IPFS中,有这样一个误解----认为存储在其中的文件是永久保存的。实际上并不是这样,存储在IPFS中的文件只在某种特殊状态下才会被一直保存,这个特殊状态就是“Pin”。

“Pin”是IPFS中一个非常重要的概念。IPFS试图让用户认为系统中的每个文件都像是在本地一样-----“要获得这个文件得从远处的服务器下载”这样的感觉是要尽量避免的。

在IPFS中常用的“ipfs cat”或“ipfsget”命令执行起来是不分文件存放的位置的。尽管这已经很好了,但有时用户还希望能把某些文件或数据放在离自己更“近”的地方。

“Pin”就是这样一种机制,它让用户告诉IPFS系统总是把文件在本地保留一个备份。

IPFS的缓存机制是比较激进的,在这种机制的作用下,通常当用户对某个文件执行了某种操作后,系统会将该文件在本地保留,但只在本地保留很短的一段时间,因为它会被IPFS的垃圾清理机制所清理掉。

IPFS的这种垃圾清理机制每隔一段时间会清理一些被视为“垃圾”的文件。

为了防止保存在本地的文件被垃圾清理机制清理掉,用户就要用到“pin”的功能了。在默认状况下通过“ipfs add”的文件会被循环地“pin”住,以保证它们不被清理。

具体的命令如下:

将文件“foo”添加到IPFS中:

echo "ipfs rocks" > foo

ipfs add foo

注意,这里将“foo”文件添加到IPFS后,会产生一个该文件的哈希值。这个哈希值后面会用到。

列举所有被pin的文件:

ipfs pin ls --type=all

将“foo”文件从被“pin”文件中移走:

ipfs pin rm <foo hash>

ipfs pin rm -r <foo hash>

注意,这里“foo hash”的意思是“foo”文件的哈希值。

检查“foo”文件是否还在被“pin”文件列表中:

ipfs pin ls --type=all

pin的状态有三种:

在上面的命令中,可能你已经注意到了“ipfs pin rm”是不能执行的,运行这个命令后,系统会提示用户,foo文件的哈希值被“循环pin”住了。

这是什么意思呢?在IPFS中有三种“pin”的状态。

-直接pin(Direct Pin),这种pin只会pin一个数据块,其它与这个数据块相关的数据块都不会被pin。

-循环pin(Recursive Pin),这种pin会pin一个数据块以及这个数据块所有的子块。

-简介pin(Indirect Pin),这种pin会pin这个数据块的父块。

当一个文件或数据被pin后,垃圾清理器是不能清理它的,不信可以试试下列命令:

首先添加foo文件(默认该文件会被pin):

ipfs add foo

运行垃圾清理器清理垃圾:

ipfs repo gc

检查该文件是否还存在:

ipfs cat <foo hash>

但是如果文件“foo”不再是pin的状态了(变成了unpinned)。

将foo文件从被pin文件中拿掉,使其状态变为unpinned

ipfs pin rm -r <foo hash>

运行垃圾清理器:

ipfs repo gc

查看该文件是否还存在于IPFS中:

ipfs cat <foo hash>

这时我们会发现不是pin状态的foo文件被垃圾清理器删掉了。

我是IPFS/Filecoin社区发起人晓熙(加入社区,联系v号: liandaoxixi),IPFS/Filecoin是全球共识最大的去中心化存储项目,我会定期在社区分享专业的资讯,为IPFS/Filecoin爱好者建设一个共赢的学习社区。

参考链接:https://docs.ipfs.io/how-to/pin-files/#three-kinds-of-pins

—-

编译者/作者:FIL社区

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...