저는 일반적으로 nbd를 처음 사용했습니다. 나는 지원 저장소에서 데이터를 읽기 위해 nbd 서버로 사용하고 내 클라이언트로 guestfish(파일 시스템 쉘)를 사용하는 Rust에서 nbdkit 플러그인을 작성했습니다.
#!/bin/bash -
guestfish --ro --format=raw -a nbd://localhost <<-EOF
run
mount /dev/sda /
mount-local ./data
mount-local-run
EOF
이는 guestfish의 마운트 명령이 매우 느리다는 점을 제외하면 다양한 파일 시스템 유형(xfs, ext2..4, FAT 등)에 적합합니다. 그래서 종속성을 제거하고 기본 Linux를 nbd-client
클라이언트로 사용해 보았습니다.
> modprobe nbd
// no output
> sudo nbd-client localhost /dev/nbd0
//successfully connects
> sudo mkdir /mnt/nbd0
> sudo mount /dev/nbd0 /mnt/nbd0
mount: /mnt/nbd0: cannot mount /dev/nbd0 read-only.
이 설치 명령이 실패한 이유를 잘 모르겠습니다. 나는 nbdkit의 쓰기 콜백을 구현하지 않았으므로 파일을 읽기 전용으로 만들고 싶지만 이로 인해 설치가 실패하는 이유를 이해할 수 없습니다. 대신 달릴 수 있어
sudo mount -o ro,noload /dev/nbd0 /mnt/nbd0
다음에 일어나는 일은 볼륨의 파일 시스템에 따라 다릅니다. 참고로 내 파일 시스템은 ext4입니다.
볼륨의 파일 시스템 유형이 ext4가 아닌 경우:mount: /mnt/nbd0: wrong fs type, bad option, bad superblock on /dev/nbd0, missing codepage or helper program, or other error.
볼륨의 파일 시스템 유형이 ext4인 경우: 설치에 성공하고 디렉터리에 들어가고 이동하는 등의 작업을 수행할 수 있지만볼륨의 모든 파일이 비어 있습니다.. guestfish를 설치할 때처럼 실행할 수 있습니다.
cat dir0/textFile0.txt
"This is text file 0!"
이제 동일한 cat
명령을 실행하거나 vim을 사용하여 텍스트 파일을 입력하면 파일이 완전히 비어 있음이 표시됩니다.
이 문제는 명령 -o ro,noload
의 매개변수로 인해 발생 합니까 mount
? 그렇다면 정상적으로 설치하려고 할 때 이 오류를 방지하려면 어떻게 해야 합니까? 그렇지 않은 경우 이 동작에 대해 알려진 원인이 있습니까? 내 nbdkit 플러그인이 guestfish를 사용하면 완벽하게 작동하지만 nbd-client를 사용하기 때문에 작동한다는 것을 알고 있습니다. 1. 파일 시스템에 ext4 이외의 다른 것을 설치할 수 없습니다(예: -t xfs
태그를 추가하는 경우에도). 그리고 2. 파일 내용이 완전히 삭제되었습니다.