virtfs / 9pをルートファイルシステムとして使用できますか?

virtfs / 9pをルートファイルシステムとして使用できますか?

ホストでゲストとして共有されるフォルダを使用できますか?virtfs/9p経由ゲスト内のルートファイルシステムで?

前の質問と緩く関連しています。virtfs / 9pを使用して複数のゲストと同じホストフォルダを共有できますか?

答え1

はい、ホストのFSを使用してVMを起動する方法を参照してください。

9pモジュールをホストに追加しますinitramfs(必須モジュールを含むinitrdがあるため、最も簡単な方法ではありませんが、最も簡単な方法です)。

printf '%s\n' 9p 9pnet 9pnet_virtio | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u

qemu -kernel "/boot/vmlinuz-$(uname -r)" \
  -initrd "/boot/initrd.img-$(uname -r)" \
  -fsdev local,id=r,path=/,security_model=none \
  -device virtio-9p-pci,fsdev=r,mount_tag=r \
  -nographic \
  -append 'root=r ro rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/bin/sh'

通常のユーザーとして実行すると、一部のファイルにアクセスできなくなりますが、シェルプロンプトが表示され、破損は発生しません。

[    0.000000] Linux version 3.10-3-amd64 ([email protected]) (gcc version 4.7.3 (Debian 4.7.3-7) ) #1 SMP Debian 3.10.11-1 (2013-09-10)
[    0.000000] Command line: root=r rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/bin/sh
[...]
Loading, please wait...
[    0.564122] systemd-udevd[52]: starting version 204
[...]
Begin: Loading essential drivers ... [    1.007951] FS-Cache: Loaded
[    1.009958] 9p: Installing v9fs 9p2000 file system support
[    1.012880] FS-Cache: Netfs '9p' registered for caching
done.
Begin: Running /scripts/init-premount ... done.
[...]
sh-4.2# ls /
bin   home            lib32       media    opt   safe  tmp      vmlinuz.old
boot  initrd.img      lib64       mnt      proc  sbin  usr
dev   initrd.img.old  libx32      old      root  srv   var
etc   lib             lost+found  old-tmp  run   sys   vmlinuz
sh-4.2# poweroff -f
[   56.958724] ACPI: Preparing to enter system sleep state S5
[   56.960332] Power down.

答え2

最初はこの考えが合理的に見えるかもしれませんが、そうしないでください。現在の状態の9Pは、以下を含むかなり基本的な操作を処理できません。

9Pは現在、本番用途に適した状態ではありません。

9Pをルートファイルシステムとして使用してブート可能なシステムを作成できますが、仮想マシンを操作すると重大な結果につながる可能性があります。 Debian を使用している場合、上記の欠陥のため、apt-get アップグレードは機能しません。この問題を解決するためのパッチは何年もどこにも出てこなかった。

これに固執する場合は、ルートフラグは「rootflags=trans=virtio,cache=mmap」である必要があります。それ以外の場合、読み取り/書き込みメモリマッピングは機能しません(たとえば、MariaDBで使用されているように)。

答え3

もちろんです。カーネルコマンドラインに追加:

root=host rootfstype=9p rootflags=trans=virtio

そしてinitrdなしで起動できます(9Pがモジュールではなくカーネルにコンパイルされている場合)。

関連情報