Proxmox VE中虚拟机和主机共享文件方式有很多,最终试下来9P文件系统还是挺好用的,但目前只支持在Linux系统

1、检查内核是否支持9p文件系统

grep -E 'CONFIG_9P|CONFIG_NET_9P|CONFIG_9P_VIRTIO' /boot/config-$(uname -r)

# 输出:
CONFIG_9P=y/n/m
CONFIG_NET_9P=y/n/m
CONFIG_9P_VIRTIO=y/n/m

这里有三种情况:

    1. =y已经支持:直接跳转到 第4. 主机配置
    1. =m未启用: 跳转到第2. 加载9p内核模块
    1. =n或不存在,升级或更新模块:跳转到第3. 重新编译内核

2. 加载9p内核模块

第1步,如果是m,需要手动加载

sudo modprobe 9p
sudo modprobe 9pnet
sudo modprobe 9pnet_virtio

验证模块是否加载成功

9pnet_virtio           20480  0
9p                     73728  0
9pnet                 102400  2 9p,9pnet_virtio
netfs                 499712  1 9p

3. 重新编译内核

CentOS 7/8 默认都是不编译9P相关支持的,这里就需要重新编译内核才能实现的。

这里参考CentOS7内核编译升级,并支持9p文件系统 就不在多叙述了。

4. 主机配置

在主机中,找到虚拟机的配置文件。

如:虚拟机ID为100,配置文件为/etc/pve/qemu-server/100.conf

在文件的最前面加入参数:

args: -fsdev local,security_model=passthrough,id=fsdev0,path=/mnt/data -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=lvm_data

这里path是主机需要共享给虚拟机的目录,mount_tag可以随便写,后面进虚拟机挂载时需要用到。

5. 虚拟机配置

进入虚拟机,编辑/etc/fstab添加

lvm_data /data 9p trans=virtio 0 0
  • lvm_data:这个就是主机配置中,配置的mount_tag值。
  • /data:本地挂载目录
  • 9p trans=virtio:9p文件系统相关配置,使用virtio传输

6. 测试

mount -a # 挂载

df -hT # 查看是否有 lvm_data 挂载到 /data 目录的信息