背景
项目需要nas直通,我们知道主机以文件系统的形式直通到虚拟机中的。
环境准备
qemu
centos中默认把文件系统给关闭了
需要开启virtfs,重编qemu的包
guestos
客户机中需要9p的支持
项目需要centos6.6,其默认2.6内核中是没有9p模块的,需要开启重编内核
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y (Optional)
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
注:经验证2.6的内核,9p有两个bug:
- mount的时候概率性报mount:Can’t Read Superblock
- mount成功后,重复mount会导致虚拟机重启
也可以使用centos6下的4.9内核,已自带9p模块,且已修复上述两个bug。
验证步骤
1.xml
虚拟机的xml中增加如下内容:
<filesystem type='mount' accessmode='passthrough'>
<driver type='path' wrpolicy='immediate'/>
<source dir='/home/'/>
<target dir='/shell'/>
<readonly/>
</filesystem>
启动虚拟机
guestos
在虚拟机挂载文件系统到指定目录
mount -t 9p -o trans=virtio,version=9p2000.L /shell /tmp
热插拔
经验证文件系统目前不支持热插拔。
(qemu本身不支持,libvirt也直接接口拦截了)
经过验证肖神提了一个神思路,一试可行。
先使用qemucommand挂载fsdev的qemu后端,然后qemu开口子出个接口修改path,然后device-add挂载虚拟机的设备到pci总线。
最后通过扩展qga接口实现虚拟机内部的mount(记得关selinux)