PVE 里 virtiofs 设置完整步骤

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

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在Linux分类目录。将固定链接加入收藏夹。