~/.ipfs 폴더를 외장 드라이브에 마운트할 수 있나요?

~/.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다음 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가 외부 드라이브에 실제로 존재하는 생성된 파일에 액세스할 수 있게 됩니다 .

관련 정보