使用 16.04 虚拟机管理程序和 16.04 客户机,我希望从客户机直接访问主机文件系统。我在部分:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/gsystem/fs'/>
<target dir='/mnt/fs'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</filesystem>
重新启动客户机后,插槽#3 处的 PCI 设备出现,我可以看到它如下所示(为了清楚起见,我已编辑掉其他 PCI 设备):
# lspci
...
00:03.0 Unclassified device [0002]: Red Hat, Inc Virtio filesystem
...
但文件系统尚未安装,并且目标目录对于客户机而言仍处于本地状态。
是否有下一步要采取的措施,或者我的虚拟机中是否缺少驱动程序?
答案1
您的语法主要用于 LXC 客户机,KVM 略有不同。更新您的 XML,如下所示:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/gsystem/fs'/>
<target dir='mymount'/>
</filesystem>
启动您的客户机并手动将模块添加到客户机启动中。
cat >>/etc/modules <<EOF
loop
virtio
9p
9pnet
9pnet_virtio
EOF
使用以下方式手动插入所有模块
service kmod start
最后尝试挂载共享文件夹
mount mymount /mnt/fs -t 9p -o trans=virtio
如果它正在工作,请卸载并添加以下行到您的安装目录中/etc/fstab
以使安装持久。
mymount /mnt/fs 9p trans=virtio 0 0
最后尝试再次安装
mount -a
答案2
使用 virt-manager 和 Ubuntu 22.04 作为客户机,它可以开箱即用。
首先在虚拟机的内存配置中选中“启用共享内存”。
接下来在 virt-manager 中添加一个新的文件系统:
driver
设置为 virtiofssource path
设置为要共享的主机目录target path
设置为任何字符串,例如myshare
(这实际上不是一个路径,而是下面使用的某种参考标签)。
启动客户机并从那里创建一个挂载点,例如/media/share
,最后运行sudo mount -t virtiofs myshare /media/share
要添加它/etc/fstab
应该看起来像:
myshare /media/share virtiofs rw,noatime,_netdev 0 2