virtfs/9p 可以用作根文件系统吗?

0xC*_*22L 12 filesystems kvm virtual-machine root-filesystem virtfs

是否可以使用通过 virtfs/9p从主机共享到来宾的文件夹作为来宾内部的根文件系统?

与我之前的问题松散相关:可以使用 virtfs/9p 与多个来宾共享同一个主机文件夹吗?

Sté*_*las 10

是的,例如,请参阅如何使用主机的 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'
Run Code Online (Sandbox Code Playgroud)

如果您以普通用户身份运行它,有些文件将无法访问,但您应该能够获得 shell 提示并且不会造成任何损坏:

[    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.
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可以使用“security_model=mapped”来完全访问底层文件系统,因为它将所有权和其他特权文件信息存储在文件的扩展属性中。这也允许您挂载 fs 读写而不是只读。另见[链接](https://lists.gnu.org/archive/html/qemu-devel/2010-05/msg02673.html) (2认同)