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


11

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

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


我从来没有尝试过将9p作为根FS,但是我认为使用适当的initrd不会阻止您执行此操作。
2013年

1

美丽的是,如果我们可以将overlayfs与/一起使用,并将9p挂载降低,然后将chroot插入其中。但是它不能非常有用,因为写入低位的操作是未定义的...但是,我认为还有其他FUSER文件系统允许这样做,但我尚未实现。
Ciro Santilli冠状病毒审查六四事件法轮功

Answers:


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'

如果您以普通用户身份运行它,则有些文件将无法访问,但是您应该能够得到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.

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被编译到内核中,而不是作为模块编译)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.