이 질문은 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
다음 ipfs add <filename>
오류가 발생합니다.
Error: fsync: invalid argument
:을 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
귀중한 도움과 시간을 내주셔서 감사합니다.
답변1
나는 내가 직면한 문제를 해결할 수 있다고 생각한다. 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
.data
이렇게 하면 ipfs가 외부 드라이브에 실제로 존재하는 생성된 파일에 액세스할 수 있게 됩니다 .