nbd-client를 사용하여 네트워크 블록 장치를 마운트할 수 없습니다

nbd-client를 사용하여 네트워크 블록 장치를 마운트할 수 없습니다

저는 일반적으로 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. 파일 내용이 완전히 삭제되었습니다.

관련 정보