我正在尝试使用 qemu-kvm/9p 挂载共享文件夹,但如果将其添加到 fstab 文件中,它就会失败。我在启动时收到无法挂载该设备的错误,但启动后如果我运行“mount -a”,该设备将被挂载。
fstab 行:
src_mnt /src 9p trans=virtio 0 0
从 dmesg 我可以看到:
[ 7.606258] 9p: Could not find request transport: virtio
几行之后,我看到了“virtio-pci”条目。但我不清楚如何推迟安装直到该设备可用。
答案1
不知道这是否是理想的解决方案,但在 Ubuntu 12.04 客户机上,我通过将 9p 模块添加到 initramfs 使其正常工作。
添加到 /etc/initramfs-tools/modules:
9p
9pnet
9pnet_virtio
然后:
sudo update-initramfs -u
答案2
在 2020 年,将挂载延迟到我们可以访问模块时的更好方法9p
是/lib/modules
添加_netdev
挂载参数:
/data /data 9p trans=virtio,rw,_netdev 0 0
答案3
在 Ubuntu 14.04 上,只有9pnet_virtio
模块需要预加载bhassel 的回答。
引用的前几行 dmesg 显示另外两个已经加载,但找不到所需的传输。
[ 1.370611] 9pnet: Installing 9P2000 support
[ 1.376384] 9p: Installing v9fs 9p2000 file system support
[ 1.376754] 9pnet: Could not find request transport: virtio
在 openSUSE 13.2 上的 qemu/KVM 上使用 Ubuntu 14.04 客户机进行了测试。
答案4
这里的问题是如何在主机上设置 virtio 挂载。有两种方法可以解决这个问题。
解决方案 1:使用映射而不是传输
<filesystem type='mount' accessmode='mapped'>
<source dir='/src_dir'/>
<target dir='src'/>
</filesystem>
这样做是可行的,但所有文件都将归 libvirt 运行的用户所有。这对 tmp 或日志文件系统来说不太适用。
解决方案 2:以 root 身份运行 libvirt 并使用 passthrough
vi /etc/libvirt/qemu.conf
然后取消注释或者添加:
user=root
group=root
重新启动主机或重新启动所有 libvirt 和 qemu/kvm 进程,并使用 passthrough:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/src_dir'/>
<target dir='src'/>
</filesystem>
虽然主机可能会有一些安全隐患,但这会使主机上的文件的 uid:gid 与客户机上的相同,这对于日志和 tmp 文件系统来说很有效。这正是我在这种情况下所做的。