自用 NAS 折腾,在 PVE 上的虚拟机使用 9P 文件系统共享物理机 ZFS
目录
基本原理
- 物理机配置共享文件夹,权限和虚拟机一致
- 物理机修改虚拟机的
qemuconfig
,(在host
也就是pve
上,设置目标guest
的qemu.conf
(具体的路径为/etc/pve/qemu-server/VMID.conf
),如果host
支持的话直接编辑xml
会更省力)
配置方法
第一步 虚拟机开启 9p 支持
首先确保 guest
的 kernel
中的 9p options
都设置正确了,kernel
设置一般在 /boot/config…
中,可能会出现多个 config
文件,通过 uname -r
确认当前使用的内核,选择对应的 config
文件更改即可
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y (Optional)
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y (only needed for the QEMU Arm 'virt' board)
第二步 物理机准备共享目录
物理机创建一个目录用于文件共享,需要注意权限要和虚拟机一样,通过ps aux|grep <vmid>
查看虚拟机用户
mkdir <your/path>
chown root:root <your/path>
第三步 物理机在 qemu.conf
中添加
/etc/pve/qemu-server/VMID.conf
VMID 是你 PVE 分配的序列号
args:
-fsdev
local,path=/tank/omv,security_model=passthrough,id=fsdev0,writeout=immediate -device virtio-9p-pci,fsdev=fsdev0,mount_tag=omv
-fsdev local,path=/mnt/pve/parity1_10T,security_model=passthrough,id=fsdev1,writeout=immediate -device virtio-9p-pci,fsdev=fsdev1,mount_tag=parity1
-fsdev
local,path=/mnt/pve/data1_10T,security_model=passthrough,id=fsdev2,writeout=immediate -device virtio-9p-pci,fsdev=fsdev2,mount_tag=data1
args: -fsdev local,id=fsdev0,path=/zfspool,security_model=passthrough -device virtio-9p-pci,fsdev=fsdev0,mount_tag=kfs
彻底关闭虚拟机再开启(注意:不是重启,是关机,再开启)
第四步 虚拟机 /etc/modules
添加
loop
virtio
9p
9pnet
9pnet_virtio
sudo service kmod start
sudo mkdir /mnt/kfs
sudo mount -t 9p -o trans=virtio kfs /mnt/kfs
测试成功的话,设置 /etc/fstab:
kfs /mnt/kfs 9p trans=virtio 0 0
9pnet_virtio: no channels available for device
Resolved for me (with an ubuntu 18.04 host and 14.04 guest) by adding theses modules:
virtio_input
9pnet
9pnet_virtio
into guest file /etc/initramfs-tools/modules.
Don't forget to upadate initramfs for your kernel(s) after add:
update-initramfs -uk <kernel|all>
https://wiki.qemu.org/Documentation/9psetup
https://zhuanlan.zhihu.com/p/138254689
https://blog.csdn.net/tangobravo/article/details/123290359
QEMU 官方解释