ipfs 文件持久化操作

        IPFS作为区块链分布式存储板块的开创项目已经经历了6年不断地改进与完善,早就具备了成熟的数据存储机制。其实在很多人眼里,IPFS分布式存储网络是能够永久保证人类数据安全的,当然也有人说文件一旦被存储在ipfs中就不会丢失这一说法是错误的,因为ipfs节点也有可能因为各种原因导致数据丢失。

        如果一个数据对象在ipfs网络中被多个节点访问,则会在访问节点产生多份备份,备份的数据对象不会被永久保存,当节点执行GC操作时,备份数据会被清除。要让一份数据能够被节点永久保存,则需要执行pin操作。下面就来对ipfs数据对象持久化进行操作讲解。

服务器准备

        准备两台服务器node1和node2,分别在两台服务器上安装ipfs,启动ipfs守护进程(ipfs daemon),这里不再对安装启动做讲解。

数据准备

node1准备一份数据
 

[root@node1 ~]# echo "node-1" | ipfs add
added QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi

node2 准备数据

[root@node2 ~]# echo "node-2" | ipfs add
added QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD

不做持久化的观察

        node1上通过ipfs pin ls能看到新增的数据对象,看不到node2上新增的数据对象。反之在node2上也是如此

[root@node1 ~]# ipfs pin ls
QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi recursive

[root@node2 ~]# ipfs pin ls
QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD recursive

        在node1上访问node2的数据对象,能够读到文件内容,但访问持久化区时,pin出来是没有node2数据对象的hash值的

[root@node1 ~]# ipfs cat QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
node-2
[root@node1 ~]# ipfs pin ls
QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi recursive

        这时候停掉node2的daemon守护进程,再访问node2的数据对象,仍然能够读到内容,这是因为节点没有执行GC操作,执行GC操作后,node2数据不能再访问到。

[root@node1 ~]# ipfs cat QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
node-2
[root@node1 ~]# ipfs repo gc
removed bafkreibhk7az6hwkh6qbluusf35olnm4shzr7loyasbgbnmrkvi2hsfv5a
[root@node1 ~]# ipfs cat QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
.............................(获取不到,持久等待)

持久化操作

        重启node2的daemon守护进程,在node1上重新拉取node2的数据对象,并将其加入持久化,可在持久化列表中看到node2数据对象的hash值。

[root@node1 ~]# ipfs cat QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
node-2
[root@node1 ~]# ipfs pin add QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
pinned QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD recursively
[root@node1 ~]# ipfs pin ls
QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi
QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD

        停掉node2的daemon守护进程,执行GC操作后,再访问node2的数据对象,可看到仍能访问到数据内容,及node2的数据已经加入到node1的数据持久化存储中。​​​​​​​

[root@node1 ~]# ipfs repo gc
removed bafkreibhk7az6hwkh6qbluusf35olnm4shzr7loyasbgbnmrkvi2hsfv5a
[root@node1 ~]# ipfs cat QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
node-2

删除持久化

        ipfs持久化的存储是可以删除掉的,pin rm操作删除后,需要执行GC操作才能完全删除,删除的数据不能再被访问​​​​​​​

[root@node1 ~]# ipfs pin rm QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
unpinned QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
[root@node1 ~]# ipfs pin ls
QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi recursive
[root@node1 ~]# ipfs repo gc
removed bafkreibhk7az6hwkh6qbluusf35olnm4shzr7loyasbgbnmrkvi2hsfv5a
[root@node1 ~]# ipfs cat QmQzEDpiVMsMePtGZYUR2ee8Ve5rTsF771RHyuewmYx9bD
.............................(获取不到,持久等待)

        同样,本地数据对象也能进行持久化删除​​​​​​​

[root@node1 ~]# ipfs pin rm QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi
unpinned QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi
[root@node1 ~]# ipfs pin ls
[root@node1 ~]# ipfs repo gc
removed bafkreifwwxnupxybxrlpxchyty5llinjqqolyvatf4rwspytgvjagzketu
[root@node1 ~]# ipfs cat QmadskBmtG5Fwux8mnBPacme9Ebwep6zEfVsaW3T2QEKsi
.............................(获取不到,持久等待)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值