IPFS 节点默认将其 存储的数据 当作一种缓存。这就意味着它其实并不保证数据的持久化。资源总是有限的,是需要维护的,在条件具备的情况下,它会进行垃圾回收。
但同时,有些数据我们是不希望按照 gc 规则回收的,这是就需要将这些数据 pin
在节点上。
1 垃圾回收
IPFS 节点中垃圾回收器的配置,是在 ipfs 配置文件 中的 Datastore 配置
中完成的。关于回收器,相关的重要参数包括:
StorageMax
: ipfs 数据仓库的存储上限。该值的默认 10GBStorageGCWatermark
:StorageMax
的百分比,一旦超过这个数值,如果 ipfs 守护进程运行且 gc 使能,将自动出发 gc 运行。该值的默认值是 90,即,超过StorageMax
的 90%,将触发。GCPeriod
: gc 运行的频率。前提是 gc 被允许运行。默认值为 1 小时。
你也可以手动出发 gc:
1 | ipfs repo gc |
为了使 gc 能够运行,需要开启 ipfs 守护进程以及 gc 使能:
1 | ipfs daemon --enable-gc |
2 Pin 在本地
垃圾回收按照一定规则是自动进行的,我们也可以通过几种方式,来保护数据,避免其被回收:
通常,我们可以将数据 pin 在本地。当你在命令行客户端使用
ipfs add
指令添加文件时,将自动完成这个pin
的动作,当然,你也可以手动去做,粒度更小(pin 一个 block;pin 一个 block 及其孩子;向上(父级)递归的 pin block)。当我们将文件放入本地的
MFS
,其实也可以达到在本地pin
一样的效果。但是,这种方式更加容易实现对文件的管理。
3 Pin 在远程
为了确保重要的数据能够被持续保留,你也可以使用 Pin 服务。这些服务运行在很多 IPFS 节点上,并允许用户将数据 pin 在他们的节点上,一些服务会提供一个的免费使用额度。在如下情况下,应当使用 pin 服务:
- 本地磁盘存储不足,但是你有需要数据的持久化存储。
- 你可能在使用手机/笔记本/平板,这些设备可能不是一直连接着网络,但是你希望能够随时访问到 IPFS 上的数据。
- 你希望备份,并确保数据是持久化存储的,在其他电脑上仍然可见,即使本地已经删除了这些数据。
可以提供 pin 服务的第三方包括:Axel / Eternum / Infura / Pinata / Temporal / Crust Network 等.
4 持久化存储
通过个人的 IPFS 节点存储数据是非常简单的,但这时,你需要自己管理好硬盘。
这个问题,导致了那些允许你在远程存储数据的节点的兴起(通过 pin 服务,付费)。虽然这很方便,但是,也可能也会担心随之而来的花费问题,如果你不持续付费,数据同样面临者被删除的风险。
IPFS 确保其网络的任何数据都是可以被发现/被访问的,但是它并不确保这些内容是持久化可用的。这时,Filecoin 应运而生。
4.1 Filecoin 的解决方案
Filecoin 是运行在 IPFS 上的激励层, 是一个去中心化的存储网络,它允许存储提供者向外出租他们的存储空间。
用户和存储提供者之间,就多少数据将被存储/存储多长时间/花费多少上,达成一致。这个约定被称为一个 deal
.一旦双方达成这个 deal
,用户可以将数据发送给存储提供者,也可以检查数据是否被正确的存储。当用户想取回数据时,向这些 provider 发起数据即可。
花费的,就是 Filecoin 这种 token。
和 IPFS 相比,Filecoin 自然没有 IPFS 数据取回过程快;Filecoin 接受的数据最小需要达到 GiB 级别;同时,对于用户而言,Filecoin 的操作过程要更加复杂。