无法使用 nbd-client 挂载网络块设备

无法使用 nbd-client 挂载网络块设备

一般来说,我对使用 nbd 很陌生。我用 Rust 编写了一个 nbdkit 插件,我一直将其用作 nbd 服务器来从后备存储中读取数据,并使用 guestfish(一种文件系统 shell)作为我的客户端。

#!/bin/bash -
 guestfish --ro --format=raw -a nbd://localhost <<-EOF
  run
  mount /dev/sda /
  mount-local ./data
  mount-local-run
EOF

这对于各种文件系统类型(xfs、ext2..4、FAT 等)都非常有效,除了 guestfish 的挂载命令相当慢之外。因此,我尝试将其作为依赖项删除,并使用本机 linuxnbd-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:安装成功,我可以进入目录、移动等,但是我在该卷中的所有文件都是空的。就像当我安装客鱼时,我可以执行

cat dir0/textFile0.txt
"This is text file 0!"

现在执行相同的cat命令,或者使用 vim 输入文本文件,显示文件完全是空的。

这个问题是由命令-o ro,noload中的参数引起的吗mount?如果是这样,在尝试正常安装时如何避免该错误?如果不是,是否有任何已知的原因导致这种行为?我知道我的 nbdkit 插件可以工作,因为它使用 guestfish 可以完全正常工作,但使用 nbd-client 1. 我无法在我的文件系统上安装除 ext4 之外的任何内容(例如,即使添加-t xfs标签时),并且 2. 文件内容完全完整删除了。

相关内容