ホスト内からゲストに共有されるフォルダー virtfs/9p経由 をゲスト内のルートファイルシステムとして使用することは可能ですか?
私の前の質問と大まかに関連しています: virtfs/9pを使用して、同じホストフォルダーを複数のゲストと共有できますか?
はい。たとえば、VM with the Host FS
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.
これが最初に思われるような賢明なアイデアは、これを行わないでください。現在の状態の9Pは、次のようなかなり基本的な操作を処理できません。
現在9Pは生産に使用するのに適した状態ではありません。
ルートファイルシステムとして9Pを使用して起動可能なシステムを作成することはできますが、そのVM=を操作すると、重大な悲しみが発生します。Debianを使用している場合、上記の欠陥により、apt-getアップグレードが機能しなくなります。パッチこの問題を解決するために何年も行っていない。
これを行うと主張する場合、rootflagsは「rootflags = trans = virtio、cache = mmap」である必要があります。そうでない場合、読み取り/書き込みメモリマッピングは機能しません(たとえば、MariaDBで使用されます)。
はい、そうです。カーネルコマンドラインに追加:
root=Host rootfstype=9p rootflags=trans=virtio
また、initrdなしで起動することもできます(9Pがモジュールとしてではなくカーネルにコンパイルされている場合)。