Ubuntu 24.04虚拟机无法正常使用QEMU/KVM virtio passthrough文件系统共享,其他虚拟机正常
我最近碰到了个挺棘手的问题:主机是Ubuntu 20.04,跑着5台虚拟机,其中Ubuntu 20.04、22.04,以及Fedora 39、40都能正常用virtio文件系统共享目录,唯独Ubuntu 24.04出了问题。
先给大家说下我的配置情况,所有虚拟机的主机端libvirt XML配置都完全一致:
<filesystem type="mount" accessmode="passthrough"> <driver type="path" wrpolicy="immediate"/> <source dir="/mnt/sda1/VM_data"/> <target dir="VM_data"/> <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/> </filesystem>
每台虚拟机里也都在/etc/fstab里加了相同的挂载配置:
/VM_data /home/<user>/host_data 9p trans=virtio,rw,_netdev 0 0
其他四台虚拟机都没问题——共享目录显示正常,主机和虚拟机之间的读写操作能实时同步。但Ubuntu 24.04就很奇怪:虚拟机里的/home/<user>/host_data是空目录,不管在主机还是虚拟机里往这个目录写内容,两边都看不到对方的修改,完全没实现共享效果。
可能的排查和解决方向
针对Ubuntu 24.04的这个问题,你可以试试这些步骤:
检查9p相关内核模块是否加载
在Ubuntu 24.04虚拟机里执行lsmod | grep 9p,看看有没有9p和9p_virtio这两个模块。如果没有,手动加载试试:sudo modprobe 9p 9p_virtio要是加载后能正常工作了,记得把这两个模块加到自动加载列表里,避免重启后失效:
echo -e "9p\n9p_virtio" | sudo tee /etc/modules-load.d/9p.conf调整fstab挂载参数
Ubuntu 24.04的9p驱动可能对参数更敏感,试试修改fstab里的挂载选项:- 先去掉
_netdev参数,这个参数原本是针对网络文件系统的,9p virtio其实不需要 - 或者添加
cache=loose参数,调整缓存策略
修改后的fstab行大概是这样:
/VM_data /home/<user>/host_data 9p trans=virtio,rw,cache=loose 0 0修改后执行
sudo mount -a重新挂载,看看是否生效。- 先去掉
检查共享目录的权限
确认主机上/mnt/sda1/VM_data的权限设置,确保虚拟机用户有足够的读写权限。可以先临时把权限改成777测试:sudo chmod 777 /mnt/sda1/VM_data如果这样能正常工作,再根据实际需求调整更严格的权限和用户组设置。
查看系统日志找错误信息
- 在Ubuntu 24.04虚拟机里执行
dmesg | grep 9p,看看有没有9p驱动相关的报错 - 主机端查看libvirt或QEMU的日志(通常在
/var/log/libvirt/qemu/目录下),找和该虚拟机相关的错误信息,这些日志能帮你定位具体的问题原因
- 在Ubuntu 24.04虚拟机里执行
调整libvirt XML里的共享配置
试试修改XML里的accessmode参数,从passthrough改成mapped,或者调整wrpolicy为writeback,然后重启虚拟机测试:<filesystem type="mount" accessmode="mapped"> <driver type="path" wrpolicy="writeback"/> <source dir="/mnt/sda1/VM_data"/> <target dir="VM_data"/> <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/> </filesystem>
备注:内容来源于stack exchange,提问作者Mlocik97

