Ipfs

是否可以將 ~/.ipfs 文件夾掛載到外部驅動器?

  • December 13, 2016

請注意,這個問題與 IPFS ( https://ipfs.io ) 有關。

是否可以將~/.ipfs文件夾掛載到外部設備(例如:硬碟、網路驅動器、WD My book 等)?這將有助於~/.ipfs在不同節點之間共享文件夾。我不確定 IPFS 是否設計為在節點之間共享該文件系統(同時?)。

請注意,我正在安裝到我的 WD My book 外置硬碟驅動器(https://www.wdc.com/products/wd-recertified/my-book.html,文件系統 NTFS)。請參閱我的安裝程式碼行:

   $ mkdir /mnt/cifs
   $ sudo mount -t cifs //server-name/share-name /mnt/cifs -o \
                                   username=admin,password=my_password,uid=1000    
   $ mount | grep 'cifs’
   //server-name/share-name on /mnt/cifs type cifs (rw)

安裝~/.ipfs文件夾後,當我嘗試執行ipfs initor時ipfs add <filename>,遇到以下錯誤:

Error: fsync: invalid argument

When:ipfs add <filename>執行時,它會在創建的文件夾中創建塊文件,如下所示: ~/.ipfs/blocks/<created_folder_name>.

~/.ipfs/blocks$ ls
CIQA2  CIQBE  CIQCP  CIQDV  CIQF7  CIQGF  CIQHL  CIQIY  CIQK5  CIQLB  CIQMG  CIQNM  CIQOR
CIQA3  CIQBF  CIQCQ  CIQDW  CIQFA  CIQGG  CIQHM  CIQIZ  CIQK6  CIQLC  CIQMH  CIQNN  CIQOS
CIQA4  CIQBG  CIQCR  CIQDX  CIQFB  CIQGH  CIQHN  CIQJ2  CIQK7  CIQLD  CIQMI  CIQNO  CIQOU

例如:ipfs init執行後,每個創建的文件夾下只創建一個文件。

$ ~/.ipfs/blocks$ ls */
/home/.ipfs/blocks/CIQMJ:
CIQMJCAMEI4UXBQ35CUDVVJOGU3DNWNHI7O7JCWHWNMUWPGKPOTLFYY.data //coming from mounted device.

/home/.ipfs/blocks/CIQMK:
CIQMKGZXBKZV262ZN6ABE4SUO5BNGKVSPTGAQXSOC35UUK7FUPIIAIY.data //coming from mounted device.

此外,執行後ipfs add <filename>會創建一個新文件夾,其中包含一個文件。我已將該文件夾安裝到我的外部設備上,它修復了我所面臨的錯誤。

在此處輸入圖像描述

但是,如果ipfs add <filename>將新的塊文件添加到 ~/.ipfs/blocks => 下已創建的文件夾中,則會給出相同的錯誤:Error: fsync: invalid argument.

/home/.ipfs/blocks/CIQMI:
CIQMI5TLEXEWEYC3G3WELU6ONMKNLAF6CZUXU5BTWEU453LHPTUNNEI.data //coming from mounted device.
CIQMIRQGFPT23SZ6XYFFU45GLZENEWRYI7PR3YJ7EP7ZC6I4ME7GPFQ.data //newly added file

我要測試的腳本:

僅執行ipfs init一次後,將執行以下腳本。

$ sudo mount -t cifs //server-name/share-name /mnt/cifs -o username=admin,password=my_password,uid=1000
$ ipfs init
$ cd ~/.ipfs/blocks/
for d in */ ; do
  if [ ! -d /mnt/cifs/$d ]; then
       mkdir /mnt/cifs/$d
       cp $d/* /mnt/cifs/$d/
  fi
done

在執行之前從外部設備恢復文件: ipfs add <filename>: 現在 ~/.ipfs/blocks/ 中的所有文件夾實際上都安裝到我的外部設備上。

sudo mount -t cifs //<ip_address>/mybloc/ ~/.ipfs/blocks/ -o username=admin,password=my_password,uid=1000

感謝您的寶貴幫助和時間。

我想我能夠解決我面臨的問題。執行後ipfs init,將創建 15 個新文件,每個文件都在唯一的文件夾名稱內。這些文件不應該被刪除(我假設這些文件確實包含 Merkle 樹的根)。我使用以下sudo chattr +i */*行使它們不可變。

~/.ipfs/blocks$ ls
CIQBE  CIQCC  CIQDT  CIQFF  CIQGC  CIQJ2  CIQJB  CIQJX  CIQKZ  CIQOA  CIQOL
CIQBG  CIQD4  CIQF2  CIQFT  CIQIF  CIQJA  CIQJF  CIQKK  CIQO2  CIQOH
~/.ipfs/blocks$ ls *
CIQBE:
CIQBED3K6YA5I3QQWLJOCHWXDRK5EXZQILBCKAPEDUJENZ5B5HJ5R3A.data

CIQBG:
CIQBGFIS77LXFM54VZKTDSZ3VKRE6ITTNAQEFHMC2H3ESKBPC3BVCYA.data
...

進一步在執行之前ipfs add <file_name>sudo umount ~/.ipfs/blocks/應該執行。這將使ipfs人們相信僅存在ipfs init執行後立即創建的文件和文件夾。(在我的 ~/.ipfs/blocks 文件夾內應該只包含執行後立即創建的文件夾和文件ipfs init。)

我必須仔細檢查,但我相信每個*.data文件名與其包含的資訊相關是唯一的,因此<file>.data不會生成每個文件名的相同文件名。所以覆蓋到同一個.dat文件中不會有問題。

稍後新生成的文件和文件夾ipfs add <filename>應通過複製到外部驅動器中並應從~/.ipfs文件夾中刪除。

在做任何事情之前,ipfs cat <hash-id>我們應該做:

sudo mount -t cifs //<ip_address>/mybloc/ ~/.ipfs/blocks/ -o username=admin,password=my_password,uid=1000

這將導致 ipfs 可以訪問.data外部驅動器中實​​際存在的已創建文件。

引用自:https://ethereum.stackexchange.com/questions/10642