virtiofs 是一种现代的文件系统共享机制,主要用于宿主机与虚拟机(尤其是 KVM/QEMU 虚拟机)之间的高效目录共享。相比传统的 9pfs 或 NFS,virtiofs 提供了更好的性能、兼容性和安全性,适合容器、开发环境、嵌入式虚拟化等场景。
将宿主目录 /hostshare 映射到虚拟机 /mnt/virtshare:
qemu-system-x86_64 \
-enable-kvm \
-m 4096 \
-cpu host \
-drive file=vm.qcow2,format=qcow2 \
-fsdev local,id=myfs,path=/hostshare,security_model=passthrough \
-device vhost-user-fs-pci,chardev=char0,tag=mytag \
-chardev socket,id=char0,path=/tmp/vhost.sock \
...
1️⃣ 找到虚拟机的配置文件
PVE 的每个虚拟机有一个对应的配置文件,路径是:
/etc/pve/qemu-server/<VMID>.conf
举例:
- 如果你的虚拟机 ID 是
100
,路径就是:
/etc/pve/qemu-server/100.conf
2️⃣ 编辑配置文件
用编辑器打开:
nano /etc/pve/qemu-server/100.conf
添加如下行:
args: -object memory-backend-memfd,id=mem,size=4G,share=on \
-numa node,memdev=mem \
-chardev socket,path=/var/run/qemu-server/100.virtiofs,id=char0 \
-device vhost-user-fs-pci,chardev=char0,tag=devserver \
-fsdev local,id=fsdev0,path=/mnt/vmshare/devserver,security_model=passthrough \
virtiofs: data0,mount_tag=devserver,path=/mnt/vmshare/devserver,security_model=passthrough
参数 | 含义 |
---|---|
virtiofs: | 开头标记,说明是 virtiofs 类型 |
data0 | 设备 ID(随意命名,比如 data0, share0, myshare 都可以) |
mount_tag=devserver | 客户机里挂载时用的名字,必须记住后面会用到 |
path=/mnt/vmshare/devserver | 宿主机目录,是真实存在的路径(这是你刚才说的路径✅) |
3️⃣如果用的是 PVE Web 页面(图形界面操作)
PVE 的 Web 界面 数据中心->Directory Mapping, 然后添加名称devserver, 路径/mnt/vmshare/devserver
进入虚拟机的设置 硬件->virtiofs, 增加,名字devserver即可
4️⃣在虚拟机里面编辑/etc/fstab
devserver /mnt/devserver virtiofs defaults 0 0