PVE使用9p挂载,让虚拟机共享宿主机目录
9p可以共享宿主机目录,并且是可以不依赖网络的,即使没有网卡都可以。
https://www.right.com.cn/forum/thread-8302447-1-1.html
环境PVE 8.1.3(x86_64),8.1.7(arm64)均测试成功,无需编译更换内核了!
虚拟机可以用,LXC不行,LXC可以用 lxc.mount.entry
的方法,参考我的这篇文章,PVE使用lxc.mount.entry,让LXC容器共享宿主机目录
第1步,虚拟机关机,修改虚拟机配置文件
将虚拟机关机
在PVE宿主机上,编辑虚拟机配置文件,配置文件位置是 /etc/pve/nodes/armbian/qemu-server/12011.conf
,其中12011是我的虚拟机ID,改成你的
使用nano vi等文本编辑工具编辑该文件,在文件开始位置加入以下代码,保存并退出。
args: -virtfs local,path=/srv/mergerfs/mergerfs1,mount_tag=mergerfs1,security_model=passthrough,id=fs0
/srv/mergerfs/mergerfs1
是PVE宿主机上要共享的目录mergerfs1
是在虚拟机中挂载的标识符,直译是挂载标签- 以上改成你自己的
第2步,虚拟机开机,创建挂载点目录,编辑/etc/fstab自动挂载
将虚拟机开机
在虚拟机内,创建挂载目录,访问这个路径就能访问到PVE共享的目录,改成你的
mkdir /mnt/mergerfs1
使用nano vi等文本编辑工具编辑 /etc/fstab
文件,添加以下代码,保存并退出。
mergerfs1 /mnt/mergerfs1 9p nofail,trans=virtio,version=9p2000.L,rw,share,nobootwait,posixacl,msize=104857600 0 0
mergerfs1
,对应PVE虚拟机配置文件中的mount_tag标识符/mnt/mergerfs1
,是刚才创建的挂载点目录nofail
,添加该参数可以防止挂载失败系统卡引导,无法进入系统的情况发生
更改了 /etc/fstab
需要刷新一下服务才行,然后尝试挂载
systemctl daemon-reload #刷新系统服务
mount -a #尝试挂载
df -h #查看挂载信息
ls -lah /mnt/mergerfs1 #查看共享过来的文件目录
#如需取消挂载,必须保证没有占用着该目录,比如当前就在该目录是无法取消挂载的
#umount /mnt/mergerfs1
第3步,尝试重启虚拟机,看开机自动挂载是否成功
自行重启查看
一些其他的唠叨:
- NFS/SMB依赖IP,如果外部IP变更(如更换路由器等),会导致挂载失效。解决办法是,创建个vmbr99纯内部的网桥,多添加一个来自vmbr99的虚拟网卡给虚拟机,挂载均使用vmbr99的纯内部网桥来挂载,以此避免外部IP变化导致IP变化从而挂载失效。
- NFS似乎有BUG,NFS服务端离线后,NFS客户端会卡住,不会自动尝试重连,即使NFS服务端恢复上线,NFS客户端依然无法访问之前挂载的目录,必须
mount -a
等方法重新挂载才能访问