前言
本人纯小白,在使用飞牛之前没有接触过NAS、Linux、PVE、虚拟机、docker之类的东西,因为飞牛的出圈,我开始了解NAS然后走上了这条折腾的不归路,从一开始直接在物理机安装飞牛和win10双系统,到在win10hyperV里安装飞牛,发现飞牛在win虚拟机里飞牛用不了显卡,然后开始了解Linux平台的虚拟机,安装PVE再部署飞牛和win10到PVE上面,再安装NVIDIA的vGPU驱动,搭建fastapi-dls服务器,解锁vGPU驱动,分配显卡资源给飞牛和win同时使用。本着有新的绝不用旧的原则(除非明确用不了),所有系统和驱动我都下载的最新版的,但是最新版网上的教程基本没有,只能参考旧版本的教程,因此前前后后踩了不少坑,决定在这里记录一下,也给有需要的朋友提供一些参考(希望有用)。
主要的硬件平台
主板:微星 B450m 迫击炮
CPU:AMD R5 3600
显卡:NVIDIA GTX 1660ti 6G
内存:32G DDR4 3200
主板设置
BIOS开启Above 4G、虚拟化支持、IOMMU,关闭安全启动
以下内容基于上述硬件和平台,不同平台和硬件可能不适用,需自行甄别。
下载安装PVE8.4
安装PVE
官网下载地址 https://enterprise.proxmox.com/iso/proxmox-ve_8.4-1.iso
安装过程参考 https://xinalin.com/86/proxmox-ve-host-configuration
正常情况下用常规安装流程是没有问题的,但是我这里还没见到PVE的logo就卡住了,不管是用rufus还是Ventoy这两个启动盘制作工具,都会在启动时出现几行代码后完全卡死只能强制重启,一开始以为是系统镜像的问题,重新下载,第三方网站下载,还是一样的问题。最后尝试安装到win系统hyperV虚拟机上,可以正常安装成功,那既然这样,我直接把安装好PVE所在的hyperV虚拟硬盘用分区工具DiskGenius整个克隆到物理硬盘上后终于在物理机启动PVE成功。
但是把PVE从虚拟机移到物理机后不会自动更新网络配置,所以这时PVE的网络是不通的,web管理界面也连不上,需要在PVE终端重新配置网络。
输入root账户和密码登录
查询网络接口
ls /sys/class/net


一般en开头的就是物理机的有线网卡
从DHCP服务器临时获取IP地址
dhclient enp34s0
查询获取到的IP
ip -brief address


编辑网络配置文件替换掉eth0接口IP地址和网关
nano /etc/network/interfaces


改成上面这样后按CTRL+S保存,CTRL+X退出
重启PVE后应该就能正常连接了,但是在PVE欢迎界面显示的还是之前虚拟机的IP,可以在issue文件修改
nano /etc/issue


同样更改后CTRL+S、X 保存退出。
PVE常规优化,更换镜像源
同样参考 https://xinalin.com/86/proxmox-ve-host-configuration 文章中 “Update#1 更新 PVE 到 8.0“部分
这里有个坑点,不同版本源链接是不同的,8.0大版本是bookworm
换源后在PVE web节点-更新中刷新然后升级,内核将升级到6.8.12-10


vGPU驱动安装
从8.4版本开始vGPU是PVE官方支持的功能,官网提供了相应的配置工具
参考官方指导文档 https://pve.proxmox.com/wiki/NVIDIA_vGPU_on_Proxmox_VE#vGPU_Configuration


安装PVE官方vGPU工具
apt install pve-nvidia-vgpu-helper
配置
pve-nvidia-vgpu-helper setup
此过程会安装一些必要的依赖工具以及屏蔽自带开源驱动
重启PVE
配置vGPU_unlock
参考 https://gitlab.com/polloloco/vgpu-proxmox#important-notes


该项目指南中需要安装Rust编译器和一些库,还要给驱动打补丁,我这里省略了这些步骤,因为我在佛西博客的网盘中找到了已经编译好的文件和打好补丁的驱动,在这里感谢佛西博客的大佬。
下面直接执行剩余的步骤
创建用于 vGPU-unlock的文件和文件夹
mkdir /etc/vgpu_unlock
touch /etc/vgpu_unlock/profile_override.toml
mkdir /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d}
echo -e "[Service]\nEnvironment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpud.service.d/vgpu_unlock.conf
echo -e "[Service]\nEnvironment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpu-mgr.service.d/vgpu_unlock.conf
下载编译好的so文件
mkdir -p /opt/vgpu_unlock-rs/target/release
cd /opt/vgpu_unlock-rs/target/release
wget -O libvgpu_unlock_rs.so https://alist.homelabproject.cc/p/foxipan/vGPU/17.5/libvgpu_unlock_rs.so
下载安装已经patch过的18.1版本驱动
cd /root
wget https://alist.homelabproject.cc/p/foxipan/vGPU/18.1/NVIDIA-Linux-x86_64-570.133.10-vgpu-kvm-custom.run
chmod +x NVIDIA-Linux-x86_64-570.133.10-vgpu-kvm-custom.run
./NVIDIA-Linux-x86_64-570.133.10-vgpu-kvm-custom.run --dkms -m=kernel
安装过程中会有几个提示,一直按回车就好
安装完成后重启PVE
验证是否解锁成功
mdevctl types


回显如上说明解锁vGPU成功
创建飞牛虚拟机以及安装18.1版本guest驱动
参考站内大佬 yangwenqing 的帖子 https://club.fnnas.com/forum.php?mod=viewthread&tid=25267&highlight=


注意最后一条添加PCI设备,也就是显卡,是在创建虚拟机完成后再添加


我这里选择的是GRID RTX6000-3Q(nvidia-258),也就是分配3G显存的型号给飞牛OS
18.1版本驱动包下载地址
https://alist.homelabproject.cc/p/foxipan/vGPU/18.1/NVIDIA-GRID-Linux-KVM-570.133.10-570.133.20-572.83.zip 同样来自佛西博客网盘
下载后解压缩找到里面的 NVIDIA-Linux-x86_64-570.133.20-grid.run 上传到飞牛


参考yangwenqing的帖子进行安装


执行的时候需要将驱动包名替换成 NVIDIA-Linux-x86_64-570.133.20-grid.run
搭建fastapi-dls授权服务器
参考项目 https://git.collinwebdesigns.de/oscar.krause/fastapi-dls


从上面可以看到18及后续版本需要额外打一个patch
项目作者提供了好几个搭建方式,我选择了一个我认为比较方便的,直接在飞牛的docker里搭建
创建证书文件夹
WORKING_DIR=/vol1/1000/fastapi-dls/cert
mkdir -p $WORKING_DIR
cd $WORKING_DIR
生成证书,过程中需要按5次回车
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout $WORKING_DIR/webserver.key -out $WORKING_DIR/webserver.crt
运行docker
docker volume create dls-db
docker run -e DLS_URL=192.168.31.249 -e DLS_PORT=9443 -e TZ=Asia/Shanghai -e LEASE_EXPIRE_DAYS=90 -p 9443:443 -v /vol1/1000/fastapi-dls/cert:/app/cert -v dls-db:/app/database collinwebdesigns/fastapi-dls:latest
DLS_URL 后面的IP地址需改成自己飞牛的IP,因为飞牛重定向了443端口到5667,所以我改成了9443
完成后在飞牛docker看到已经自动生成了一个容器正在运行,先把容器停止再启动,以下操作都需要容器保持运行状态


验证服务器
打开浏览器输入192.168.31.249:9443 可以看到fastapi-dls的readme页面,说明服务器搭建成功


获取证书
wget --no-check-certificate -O /etc/nvidia/ClientConfigToken/client\_configuration\_token\_\$(date '+%d-%m-%Y-%H-%M-%S').tok https://192.168.31.249:9443/-/client-token
出现以下回显即获取成功


18以及后面的版本需要额外patch补丁
进入root_certificate.pem所在目录
cd /vol1/1000/fastapi-dls/cert
下载patch文件
wget https://git.collinwebdesigns.de/api/v4/projects/129/packages/generic/gridd-unlock-patcher/1.0/gridd-unlock-patcher
执行
chmod +x gridd-unlock-patcher
./gridd-unlock-patcher -g /usr/bin/nvidia-gridd -c root_certificate.pem
patch成功后回显


如果没有则需要先停止gridd服务
service nvidia-gridd stop
再次执行
./gridd-unlock-patcher -g /usr/bin/nvidia-gridd -c root_certificate.pem
然后重启gridd服务
service nvidia-gridd restart
验证授权
nvidia-smi -q | grep License


licensed 后面出现日期说明驱动授权成功,就可以不受限制在飞牛影视和相册中调用显卡资源了
授权成功后可以关掉docker里面的容器,但是重启飞牛或者重启了gridd服务授权会失效,建议经常重启系统的话把docker和容器设为开机自启
暂时记录到这里