整體的流程
1,創建ipfs節點
- 通過
ipfs init
在本地計算機建立一個IPFS
節點 - 本文有些命令已經執行過了,就沒有重新初始化。部分圖片拷貝自先前文檔,具體信息應以實物為準
$ ipfs init
initializing IPFS node at /Users/CHY/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP
to get started, enter:ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme$ cd ~/.ipfs
$ ls
blocks datastore version config keystore
$ open ./
- 執行ipfs init初始化節點之后,會生成一個.ipfs的文件夾,用于存儲相關的信息,比如節點ID、環境配置信息、數據存儲等
- 如果使用的是MAC電腦,使用shift+command+. 可以查看隱藏文件
- 通過ipfs id查看創建的節點id的信息
2,啟動節點服務器?
- 使用命令ipfs daemon啟動節點服務器
- 一旦啟動當前界面會處于監聽狀態,需要新建標簽頁
3,簡單驗證
-
?使用如下命令,進行簡單測試
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
- 瀏覽器輸入下面的網址:http://localhost:5001/webui會看到一個漂亮的
UI
界面
?相關問題詳解
ipfs的存儲位置
- IPFS的數據存儲,個人用戶的數據存儲在自己個人的硬盤上,也就是本地硬盤存儲。存儲后,會在IPFS網絡廣播,“我存儲哈希為Qm...的數據了”,因為哈希的唯一性,如果數據的分割方法一定,那么同樣的數據在網絡存儲中只會有一份,也就是只在本地節點存儲。當有用戶檢索該數據時,檢索數據的hash值就是key,節點會首先在DHT表(key/value存儲)中查詢有無該key,如果沒有,到與key異或距離最近的K桶里查找,如果該K桶中的某個節點有key對應的value則返回,否則返回它認為存有value值的最可能節點,以此遞歸,最終找到key對應的value。然后請求節點與value(也就是節點ID)建立連接,并請求數據,同時將該key/value鍵值對存儲到自己的DHT表中。請求節點將接收到的數據存儲到ipfs緩存中,數據檢索成功。該請求節點在緩存數據有效期內,同樣可以為ipfs網絡,提供該數據,作為原始數據的備份。
ipfs的冗余備份措施
- IPFS采用了Erasure coding的冗余備份措施,集群中有n份原始數據和m份校驗數據,即共有n+m份備份數據。
修改節點默認存儲空間
ipfs
節點默認存儲空間為10個G
方式一:可打開終端執行下面的命令
export EDITOR=/usr/bin/vim
ipfs config edit
- 找到下圖使用紅色的框標定的內容,修改自己想要的大小
- PS:輸入
i
可以開始編輯,編譯完畢后按esc
鍵,再輸入:
,再次輸入wq
保存并且退出?
方式二 采用web界面進行修改
- 修改對應的信息,然后點擊保存
ipfs的節點掉線,對于整個組織的影響
- IPFS的容錯機制會保證數據被復制了足夠數量并存放在不同的地區,即使某一個地方的數據由于不可抗力的因素被完全銷毀,通過其他地區的備份也可以實現完整恢復數據,極大的保證了存儲在IPFS上的數據的安全性
- 采用MerkleDAG,因為它具有以下特點:1.內容可尋址:所有內容都是被多重hash校驗和來唯一識別的,包括links。2.無法篡改:所有的內容都用它的校驗和來驗證。如果數據被篡改或損壞,IPFS會檢測到。3.重復數據刪除:重復內容并只存儲一次。
在IPFS網絡中,數據的存儲可能是有重復的。重復的數量與用戶上傳的時候采用的IPFS進行分塊的方法有關。 - 之前提到過數據在IPFS存儲是以塊的形式存儲的。在ipfs提供的數據分割方式有很多種。在ipfs源碼種core/commands/add.go代碼中描述了切割的方法:
- 默認模式,塊的大小是256kb,也就是256 * 1024 bytes,對應的size=262144。命令不需要加參數,即ipfs add 文件。
- 指定塊大小模式。命令是ipfs add --chunker=size-1000。其中后邊的1000可以是任意小于262144的數。
- rabin可變塊大小切割模式。命令是ipfs add --chunker=rabin-[min]-[avg]-[max] 文件。其中min,avg,max的值分別值最小塊大小,平均塊大小,最大塊大小的意思,值在小于262144自行設定。
?
The chunker option, '-s', specifies the chunking strategy that dictates
how to break files into blocks. Blocks with same content can
be deduplicated. The default is a fixed block size of
256 * 1024 bytes, 'size-262144'. Alternatively, you can use the
rabin chunker for content defined chunking by specifying
rabin-[min]-[avg]-[max] (where min/avg/max refer to the resulting
chunk sizes). Using other chunking strategies will produce
different hashes for the same file.> ipfs add ipfs-logo.svg> ipfs add --chunker=size-2048 ipfs-logo.svg> ipfs add --chunker=rabin-512-1024-2048 ipfs-logo.svg
- 同一個文件存儲在ipfs中,因為存儲是選用的文件切割方法不同,返回的hash值卻不一樣。所以說IPFS的塊存儲沒有重復的,而IPFS塊文件拼湊的數據可能有重復的。也就是說同一個文件可以根據不同的文件切割方法在IPFS網絡中重復的存儲多次。
- 備份是如何實現的呢?假如一部非常火的電影,大家都習慣性的將該電影存儲到自己的電腦E盤或其它硬盤存儲中,全世界如果有1億的人存儲了這個電影,這不是對存儲的極大浪費嗎?在ipfs網絡中,該電影只被存儲在一個節點中,當有用戶需要讀取的時候,會產生新的備份。就是誰使用數據,這個數據就會復制到誰那里。當一個節點加入IPFS網絡時,這個節點會提供一部分硬盤空間(缺省為10G,可以配置)給整個網絡使用。那么通常情況下,在存儲文件的時候,您自己提供的這部分硬盤空間總是最快的,因為不需要跨網。當存儲完畢后,網絡上任意節點都可以訪問這個文件。當另一個節點訪問的時候,那個節點往往會復制一份您的數據到他的緩存空間。這樣整個網絡中就有兩份拷貝了。試想,當有很多人對這個文件感興趣,那么網絡中的拷貝數會越來越多。
- 需要提出的是:拷貝一般都是緩存,也就是說是臨時存儲的。時間一長就被自動刪除掉了。這種臨時緩存非常好地解決了分布式數據分發的問題,比如說一個社會熱點往往呈現出預熱期、火熱期和退潮期等階段,利用IPFS,數據的分布和拷貝數與這些時期是完全匹配的。訪問的人越多,拷貝數就越多,但熱度下來了,拷貝數就會降下來,從而自然地實現空間利用率和存取效率的平衡。如果想讓這個文件永久存儲,那么必須將其設為固定的樣式,即存儲在硬盤中。
ipfs的使用
上傳txt文件
?上傳其他格式的文件
- docx
- jpg
- mp4
- mp3
注意事項
- 對于下載的文件需要進行格式的準換,否則不可用。這個轉化的方式可以手工進行轉化,也可以使用命令的方式。
- 也可以指定下載的文件名稱,加上
-o 文件名
,也可以加上-a : 壓縮成.tar格式
,-C :壓縮成.gz格
pdf?
ipfs get QmZJBKrLFPvn8zEatZsxSJTtJkCFm4YeMwChDLRPPPerZ6 -o 1.pdf
- 使用命令open hh.pdf 打開pdf文件,此處open的用法是Linux自帶功能,和ipfs無關
docx
mp3?
?jpg
mp4
上傳整個文件夾
- 此處上傳的整個文件夾里面的文件和先前測試使用的是相同的文件,所以他們的哈希值是一致的,這個就是ipfs要求的避免相同的文件被用戶上傳多次。
查看上傳的文件中包含的子文件
查看被引用的hash
- 被引用的hash概念:一般指文件夾下面有多少個文件,這個文件夾的名稱就被引用多少次,hash就是應用該文件名的文件hash
如果上傳的是一個文件夾,那么將文件夾拉回到本地,里面的文件是正常的存儲格式,無需進行格式轉化?
?進入web可視化界面,將哈希序列輸入到搜索框,進行文件的查詢,如果文件不支持預覽,需要點擊downloading進行下載查看
發現的問題
- ?使用root用戶和普通用戶,使用ipfs id查看自己的節點信息,還不一樣。
?而且,這兩個節點之間還不能互相交換文件,不隸屬于同一個集群。
參考鏈接
- 使用ipfs完成一個圖片上傳的案例?
- IPFS:分布式文件存儲
- IPFS