是否可以將 ~/.ipfs 文件夾掛載到外部驅動器?
請注意,這個問題與 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 init
or時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
外部驅動器中實際存在的已創建文件。