私は通常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.ファイルの内容が完全に削除されました。