自用 NAS 折腾,在 PVE 上的虚拟机使用 9P 文件系统共享物理机 ZFS

基本原理

  1. 物理机配置共享文件夹,权限和虚拟机一致
  2. 物理机修改虚拟机的 qemuconfig,(在 host 也就是 pve 上,设置目标 guestqemu.conf (具体的路径为/etc/pve/qemu-server/VMID.conf),如果 host 支持的话直接编辑 xml 会更省力)

配置方法

第一步 虚拟机开启 9p 支持

首先确保 guestkernel 中的 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

https://superuser.com/questions/1317119/qemu-share-folder-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 官方解释

posted @ 2024-02-13 03:44  我听不见  阅读(1048)  评论(0编辑  收藏  举报