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


11

ゲスト内のルートファイルシステムとして、virtfs / 9p介してホストからゲストに共有されるフォルダーを使用することは可能ですか?

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


私はルートFSとして9pを試したことはありませんが、適切なinitrdがあれば、それを妨げる要因は何もないと思います。
Alexander Kudrevatykh 2013年

1
jor1kがこれを行う
Janus Troelsen

美しいのは、overlayfsを/および9pマウントとして使用し、chrootを実行できる場合です。しかし、下位への書き込みが定義されていないため、これは非常に有用ではありません...しかし、それを可能にする他のFUSERファイルシステムはありますが、まだ到達していません。
Ciro Santilli冠状病毒审查六四事件法轮功

回答:


9

はい。たとえば、ホストの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 (debian-kernel@lists.debian.org) (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
さらに、 'security_model = mapped'を使用すると、ファイルの拡張属性に所有権やその他の特権ファイル情報が格納されるため、基礎となるファイルシステムに完全にアクセスできます。これにより、読み取り専用ではなく読み取り/書き込み可能なfsをマウントすることもできます。リンク
Rutger Nijlunsing 2014年

最近のLinuxは、「root = r」コマンドラインオプションを無視するようで、無条件にmount_tag「/ dev / root」を探します。それを反映するように回答を更新することに異議がありますか?
R .. GitHub ICEの

4

これが最初に思われるような賢明なアイデアは、これを行わないでください。現在の状態の9Pは、次のようなかなり基本的な操作を処理できません。

現在9Pは生産に使用するのに適した状態ではありません。

ルートファイルシステムとして9Pを使用して起動可能なシステムを作成することはできますが、そのVMを操作すると重大な問題が発生します。Debianを使用している場合、上記の欠陥によりapt-getアップグレードが機能しなくなります。この問題を修正するパッチは、何年も前から存在していません。

これを行うと主張する場合、rootflagsは「rootflags = trans = virtio、cache = mmap」である必要があります。そうでない場合、読み取り/書き込みメモリマッピングは機能しません(たとえば、MariaDBで使用されます)。


気に入らなくても入力ありがとう。私は現在、適切なファイルコンテナーにブートとルートを配置し、9pで共有されることになっているデータの一部を考えています...
0xC0000022L

1

はい、そうです。カーネルコマンドラインに追加:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.