家庭/中小企业免费的云桌面VDI方案--VDI for PVE
近年来,随着5G网络、云计算和虚拟化技术的快速发展,云手机和云电脑逐渐进入大众视野。无论是企业还是个人用户,都可以通过云端提供的算力,在任意设备(如手机、平板、低配电脑)上流畅运行高性能应用和操作系统。那么如何像云厂商一样在本地构建一套私有化云桌面呢?嘿嘿,还真有。本教程将指导你使用 Proxmox VE (PVE) 来构建一个简单的家庭私有云桌面环境
部署前准备
预期想法:在家里配置一台高性能工作站主机作为服务端,购买一些瘦客户机将瘦终端放在各个房间跟客厅。通过PROXMOX VE + NVIDIA vGPU方案构建一个基于家庭环境的高性能虚拟桌面基础设施(VDI)系统,实现在家庭各个房间无缝访问高性能计算资源。
准备一台高性能PC或者服务器(做服务端)
家用或小工作室就别整机架式服务器了,噪音受不了推荐塔式服务器或工作站。比如戴尔这款Precision 7920 工作站
Precision 7920 | 产品参数 | 10个人配置 (3D建模/创意设计/大型游戏) |
---|---|---|
CPU | 支持2颗 铜牌、银牌、金牌、铂金处理器 | 金牌6248 20核40线程 主频2.5,睿频3.9 |
内存 | 24个内存插槽(DDR4 支持ECC自动纠错) | 192G内存 |
硬盘 | 标配4个3.5硬盘位(最多可以配置10个3.5硬盘位) | 2TB Nvme + 16TB机械 |
显卡 | 支持3个双宽显卡 | 2080 Ti 22G 2张 共44G显存 |
网卡 | 英特尔 i219 和 i210 双千兆网卡 | 强烈增加个10G网卡 |
PCIE | 7个PCIE3.0插槽 | 扩展nvme硬盘或者PCIE网卡 |
电源 | 1400W电源 | 整机功耗800W左右 |
准备一些x86_64架构的瘦客户机(做客户端)
小主机:可以找些小主机作为瘦终端,小巧又不占用地方;
移动式:也可以整些云笔记本或者老旧笔记本,外出携带都方便;
HP 400G3 DM | 瘦终端配置 | 价格 |
---|---|---|
准系统 | HP 400G3迷你主机 | 160元 |
CPU | G4560 2核4线程 3.50 GHz | 13元 |
内存 | 4G DDR4 | 25元 |
硬盘 | sata ssd 120G | 30元 |
总价 | 228元 |
懒人免部署篇
如果你是萌新或者是对PVE基础较弱的用户,建议用我封装好的PVE镜像包用balenaEtcher烧录工具写入硬盘启动即可。可以做到免部署开机即用。即节约时间又避免部署过程中产生的坑。
预封装PVE镜像包(服务端)
PVE镜像包说明:
1)基于PVE 8.4.14 内核Linux 6.8.12-15-pve版本进行封装;
2)该镜像大小28GB,账号:root,密码:123456;
3)管理口默认为主机的第一个口,默认IP:10.10.10.123,默认网关:10.10.10.10;
4)预装 NVIDIA vGPU Unlock服务,解除消费卡vGPU限制;
5)预装 NVIDIA vGPU19.0 HOST驱动,在PVE Shell 执行nvidia-smi可以查看;
6)提供fastapi-dls 授权驱动服务LXC容器,90天周期;
7)提供WIN11 24h2 LTSC X64 虚拟机还原包,可用于调试和测试;
8)预装PVE反虚拟化模拟物理机器防检测的PVE-QEMU-KVM包的安装,基于Github上的lixiaoliu666的9.2.0-7版本;
9)修改PVE的VNC显示窗口直接输出vGPU显卡画面,让PVE的Web VNC窗口也支持调用vGPU,只需要在虚拟机添加vgpu显卡时勾选主GPU即可;
10)提供了一些自己写的一键脚本(更改PVE管理IP|扩容系统盘剩余空间|安装去虚拟化QemuKVM包|定制SMBIOS信息|卸载反虚拟化QemuKVM包|批量删除虚拟机)登录SSH自动运行;
11)默认创建了一个用户为1000的VDI账号,可用于登录瘦客户机做测试,如不需要删除即可。账号:1000密码:12345678
PVE镜像使用方法--点我展开
↓↓↓
PVE镜像包使用方法:(视频版)
PVE镜像包使用方法:(图文版)
1)可以使用U盘或者Ventoy引导
进入到PE系统,PE系统推荐:FirPE点我前往
2)进入PE后,打开DiskGenius分区工具
,将要安装PVE的硬盘清空一下分区
3)打开balenaEtcher
烧录工具,将PVE镜像烧录到硬盘
4)重启主机,进入PVE系统后。手动登录控制台,将默认IP:10.10.10.123,默认网关:10.10.10.10修改为自己局域网的IP作为PVE的管理后台(登录Shell后输入1,回车就进入一键修改IP脚本)
5)浏览器登录PVE后台:https://你的IP:8006
。登录进来后将硬盘所剩的空间合并到root根目录下(在Shell里执行脚本序号2一键扩容即可)。
6)镜像包放了2个还原包fastapi-dls
授权驱动服务LXC容器和Windows虚拟机
可以用于测试
Porteus5.0云桌面OS(客户端)
云桌面OS说明:
1)基于轻量级 Linux 发行版 Porteus5.0
作为底层 x86_64
架构;
2)该镜像大小886.1MB
,支持U盘启动
、ISO镜像启动
,硬盘启动
,支持BIOS及UEFI双模式启动
;
3)默认登录为Guest用户,密码:guest
提权需要root密码:toor
;
4)集成PVE VDIClient
和PXVDI客户端
模块,支持 Spice、RDP、VNC 、Horizon
等主流协议;
5)模块还加入了常用远程软件如向日葵、ToDesk、RustDesk、Sunshine串流,Parsec串流
;
6)支持无桌面模式,开机自动运行云桌面客户端,登录后自动进入虚拟机;
云桌面OS镜像使用方法--点我展开
↓↓↓
云桌面OS使用方法:(视频版)
云桌面OS使用方法:(图文版)
云桌面镜像支持BIOS及UEFI双模式启动,下边将介绍这2种方式分别如何安装。安装前请进瘦客户机的BIOS设置好相应的启动方式。一、BIOS启动安装方式:
1)找个U盘使用rufus工具
将镜像烧录到U盘,BIOS启动
烧录U盘的时候记得选MBR分区
。
2)将U盘插到瘦客户机启动云桌面OS。
3)打开GParted分区工具
,对硬盘进行分区并将镜像安装到硬盘。
3)我这里使用一块1GB
的硬盘来安装,首先给它创建MBR分区表
以支持BIOS启动。
3)接着来创建分区,使用整个硬盘空间,创建一个ext4格式的主分区
。并应用等待创建完成。
4)挂载分区到/mnt/sda1
5)打开Porteus Installer
工具,将系统写入硬盘,就可以拔掉U盘,以硬盘启动云桌面OS了。二、UEFI启动安装方式:
1)找个U盘使用rufus工具
将镜像烧录到U盘,然后用U盘启动到云桌面OS。
2)启动到云桌面OS后,打开GParted分区工具
,对硬盘进行分区并将镜像安装到硬盘。
3)我这里使用一块8GB
的硬盘来安装,首先给它创建GPT分区表
以支持UEFI启动。
4)接着来创建一个EFI分区
,分配300M
采用fat32格式
。
5)最后将剩余的所有空间创建一个名为porteus
的ext4分区
。
6)将创建的这2个分区分别挂载到/mnt/sda1
和/mnt/sda2
我这里系统识别硬盘为sda,按系统给的挂载就行。
7)打开文件
窗口,查看一下U盘被系统挂载到哪个路径,我这边是挂载到/mnt/sdc1
需要将里面的文件复制到硬盘
8)打开终端软件,以root权限运行,并执行以下命令将U盘的文件复制到硬盘。
# 获取root权限
sudo -i
# 将U盘的EFI文件夹复制到硬盘ESP分区下
cp -r /mnt/sdc1/EFI/ /mnt/sda1/
# 将U盘的boot文件夹复制到硬盘ESP分区下
cp -r /mnt/sdc1/boot/ /mnt/sda1/
# 将U盘的porteus文件夹复制到硬盘porteus分区下
cp -r /mnt/sdc1/porteus/ /mnt/sda2/
9)编辑硬盘portues分区
下的portues文件夹下
的porteus-v5.0-x86_64.cfg
文件将里面这句from=/mnt/sda2/porteus
的注释#删除掉。到这系统就安装到硬盘了。可以拔掉U盘,以硬盘启动云桌面OS了。
# 使用nano命令编辑porteus-v5.0-x86_64.cfg文件,nano保存按Ctrl +x按y,回车即可保存。
nano /mnt/sda2/porteus/porteus-v5.0-x86_64.cfg
10)硬盘启动云桌面后,可以将自己常用软件添加为桌面快捷方式。三、无桌面模式启动:
对于只需要用到VDI客户端
,登录就自动进入虚拟机,不需要花里胡哨的功能。可以修改porteus
目录下的porteus-v5.0-x86_64.cfg
文件,来启用无桌面模式。
1)将烧录好的U盘打开修改porteus目录下的porteus-v5.0-x86_64.cfg文件
2)启用root用户默认进行登录,将参数login=root前面的#注释给取消即可;
3)启用无桌面模式,将参数cliexec=run-nogui.sh前面的#注释给取消即可;
4)如要无桌面启动进PVE-VDIClient客户端,将参数guiexec=run-pvevdi.sh前面的#注释给取消即可(这步跟第5步,2选一 都启用会冲突
);
5)如要无桌面启动进PXVDI客户端,将参数guiexec=run-pxvdi.sh前面的#注释给取消即可(这步跟第4步,2选一 都启用会冲突
);
以启用PXVDI客户端为例:
编辑porteus-v5.0-x86_64.cfg
文件
## 默认以root账号登录
login=root
## 无桌面模式启动
cliexec=run-nogui.sh
## 无桌面模式启动后运行PVE-VDIClient
# guiexec=run-pvevdi.sh
## 无桌面模式启动后运行PXVDI
guiexec=run-pxvdi.sh
修改好后,插到瘦客户机安装云桌面OS即可。
图文手动部署
服务端部分
服务端将采用Proxmox VE(PVE)免费且开源,无需支付高昂的授权费用。采用典型的C/S架构。在PVE中通过虚拟机权限管理,将虚拟机分配给指定用户。当这个用户通过瘦终端进行登录时,则会查询所拥有的虚拟机,随后通过RDP、Spice、 VMware Horizon等协议连接到虚拟机。对于家庭&中小型企业用户量也不多,也不需要搭建庞大的AD域和后端管理,所以搭建这台方案并不需要过多的专业知识和维护成本。
一、安装Proxmox VE
在高性能PC或者服务器上安装好PVE,以下是PVE8的安装过程。
资源下载
百度网盘:https://pan.baidu.com/s/1rqgxvmFku6rG2Ppjq4g-cg?pwd=knrj
资源 | 说明 |
---|---|
1.PVE镜像 | proxmox-ve_8.4-1.iso |
2.写盘工具 | balenaEtcher-Portable-1.7.9.exe |
3.vGPU驱动 | NVIDIA vGPU 19.0 |
4.FASTAPI-DLS | FASTAPI-DLS授权服务LXC还原包 |
5.系统镜像 | 虚拟机的系统镜像 |
BIOS设置
提前在BIOS开启以下设置
开启VT-d --必须开启,英特尔叫vt-d,AMD叫iommu
- 开启SRIOV --如有
- 开启Above 4G --如有
关闭安全启动 --在security菜单 secure boot 改disabled
PVE烧录U盘
提前把balenaEtcher烧录工具
和PVE安装镜像
下载好,这里我用的是proxmox-ve_8.2-2.iso
版本,用balenaEtcher
烧录工具将镜像写入U盘或者移动硬盘,然后插到主机进行PVE的安装。
PVE图形安装
将U盘或者移动硬盘接入主机引导启动到PVE安装界面,采用第一种图形化界面进行安装。
PVE系统我这边给了28G,20G作为PVE系统盘用于存些ISO镜像啥的,不需要太大。按自己需要设置。另外8G作为SWAP虚拟内存用。PVE图形界面手动分区安装示意图:
PVE基本设置
安装完成PVE后,在浏览器输入https://你的PVE管理IP:8006
来访问你的PVE管理后台了
登录进来后需要对PVE进行硬盘挂载和一些优化设置,在PVE Shell 中执行。以下设置将会大量使用nano
文本编辑命令,至于怎么使用自行百度,这里不重复造轮子了。 知道如何保存就行 Ctrl +X
输入“Y
” 按下回车 保存
1)删除local-lvm将空间合并到local
前面只给PVE系统盘分配了20G空间,再分出个local-lvm分区那local系统分区就没多少空间了,所以我们需要进行合并,删除local-lvm。
# 使用命令删除local-lvm
lvremove /dev/pve/data
# 输入y,确认,输出以下信息即成功
Do you really want to remove active logical volume pve/data? [y/n]: y
Logical volume "data" successfully removed.
# 再将local-lvm的空间转移到pve-root
lvextend -rl +100%FREE /dev/pve/root
# 输出以下信息即合并local分区成功
Size of logical volume pve/root changed from <9.75 GiB (2495 extents) to <19.50 GiB (4991 extents).
Logical volume pve/root successfully resized.
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/pve-root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/pve-root is now 5110784 (4k) blocks long.
删除了lvm-thin之后,还需要在Web删除local-lvm才算完成。
2)把剩余的空间挂载为PVE数据存储池
最后就是把剩余的硬盘空间用作PVE数据存储池。需要做下硬盘分区,这里要根据自己实际硬盘ID操作,我这里的是sda,用M.2硬盘的可能是nvme0n1不要盲目照抄。
硬盘分区好后,可以到PVE控制台看到硬盘分区情况
接着就是将该分区挂载为PVE数据存储池,把虚拟机安装到该存储池下就行。
3)PVE换源
更换国内源主要是为了解决网络访问问题、提升下载速度、确保系统更新的可靠性,同时避免付费订阅的要求。
更换系统源中科大源
# 编辑sources.list
nano /etc/apt/sources.list
# 将原有的源链接在句首加 # 注释掉,更换以下中科大源信息
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
更换企业源中科大源
# 编辑pve-enterprise.list
nano /etc/apt/sources.list.d/pve-enterprise.list
# 将原有的源链接在句首加 # 注释掉,更换以下中科大源信息
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
更换Ceph源
# 编辑ceph.list
nano /etc/apt/sources.list.d/ceph.list
# 将原有的源链接在句首加 # 注释掉,添加中科大ceph源
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
4)执行更新源
# 更新系统程序
apt update
5)LXC容器更源国内清华源
# 备份APLInfo.pm
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
# 替换为清华源:
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
# 重启服务后生效
systemctl restart pvedaemon.service
6)PVE常用优化脚本一些PVE界面优化脚本,可选择安装。
# 该脚本支持PVE7-PVE8.4.0,大于PVE8.4.0可能不适用。
wget https://yangwenqing.com/files/pve/pve_source.tar.gz && tar zxvf /root/pve_source.tar.gz && /root/./pve_source
# 该脚本支持PVE8.4.0-PVE9.0,功能:PVE增加温度和CPU频率显示;硬盘信息;取消弹窗订阅;
(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://mirror.g hproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) && chmod +x /tmp/temp.sh && /tmp/temp.sh remod
7)开启硬件直通
如果你是Intel CPU
使用nano
命令编辑grub
nano /etc/default/grub
# 开启iommu分组,在里面找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"项将其修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
# 更新grub
update-grub
如果你是AMD CPU
使用nano
命令编辑grub
nano /etc/default/grub
# 开启iommu分组,在里面找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"项将其修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
# 更新grub
update-grub
8)加载内核模块
加载内核模块,使用nano
命令加入以下信息nano /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
9)屏蔽设备
添加设备黑名单,编辑pve-blacklist.confnano /etc/modprobe.d/pve-blacklist.conf
# 屏蔽NVIDIA显卡
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
# 允许不安全的设备中断
options vfio_iommu_type1 allow_unsafe_interrupts=1
10)执行更新initramfs
# 更新initramfs
update-initramfs -u -k all
二、部署NVIDIA vGPU
如果你机器有显卡且需要用到NVIDIA显卡做云桌面的,那么可以安装这部分的vGPU内容。
官方支持vGPU的显卡查询:https://docs.nvidia.com/vgpu/gpus-supported-by-vgpu.html
官方非支持vGPU的显卡,需要搭配VGPU_Unlock
服务才支持的显卡如下:
点我展开
以下 Maxwell\Pascal\Turing架构的显卡均支持vGPU,Ampere架构的30系及之后的消费卡暂不支持
Maxwell 架构:(GTX 9xx、Quadro Mxxxx、Tesla Mxx)
Pascal 架构:(GTX 10xx、Quadro Pxxxx、Tesla Pxx)
Turing 架构:(GTX 16xx、RTX 20xx、Quadro RTXxx、Tesla Txx)
设备ID | 显卡型号 | VGPU模拟型号 |
---|---|---|
21c4 | TU116 GeForce GTX 1660 SUPER | Quadro RTX 6000 |
21d1 | TU116BM GeForce GTX 1660 Ti Mobile | Quadro RTX 6000 |
21c2 | TU116 | Quadro RTX 6000 |
2182 | TU116 GeForce GTX 1660 Ti | Quadro RTX 6000 |
2183 | TU116 | Quadro RTX 6000 |
2184 | TU116 GeForce GTX 1660 | Quadro RTX 6000 |
2187 | TU116 GeForce GTX 1650 SUPER | Quadro RTX 6000 |
2188 | TU116 GeForce GTX 1650 | Quadro RTX 6000 |
2191 | TU116M GeForce GTX 1660 Ti Mobile | Quadro RTX 6000 |
2192 | TU116M GeForce GTX 1650 Ti Mobile | Quadro RTX 6000 |
21ae | TU116GL | Quadro RTX 6000 |
21bf | TU116GL | Quadro RTX 6000 |
2189 | TU116 CMP 30HX | Quadro RTX 6000 |
1fbf | TU117GL | Quadro RTX 6000 |
1fbb | TU117GLM Quadro T500 Mobile | Quadro RTX 6000 |
1fd9 | TU117BM GeForce GTX 1650 Mobile Refresh | Quadro RTX 6000 |
1ff9 | TU117GLM Quadro T1000 Mobile | Quadro RTX 6000 |
1fdd | TU117BM GeForce GTX 1650 Mobile Refresh | Quadro RTX 6000 |
1f96 | TU117M GeForce GTX 1650 Mobile / Max-Q | Quadro RTX 6000 |
1f99 | TU117M | Quadro RTX 6000 |
1fae | TU117GL | Quadro RTX 6000 |
1fb8 | TU117GLM Quadro T2000 Mobile / Max-Q | Quadro RTX 6000 |
1fb9 | TU117GLM Quadro T1000 Mobile | Quadro RTX 6000 |
1f97 | TU117M GeForce MX450 | Quadro RTX 6000 |
1f98 | TU117M GeForce MX450 | Quadro RTX 6000 |
1f9c | TU117M GeForce MX450 | Quadro RTX 6000 |
1f9d | TU117M GeForce GTX 1650 Mobile / Max-Q | Quadro RTX 6000 |
1fb0 | TU117GLM Quadro T1000 Mobile | Quadro RTX 6000 |
1fb1 | TU117GL T600 | Quadro RTX 6000 |
1fb2 | TU117GLM Quadro T400 Mobile | Quadro RTX 6000 |
1fba | TU117GLM T600 Mobile | Quadro RTX 6000 |
1f42 | TU106 GeForce RTX 2060 SUPER | Quadro RTX 6000 |
1f47 | TU106 GeForce RTX 2060 SUPER | Quadro RTX 6000 |
1f50 | TU106BM GeForce RTX 2070 Mobile / Max-Q | Quadro RTX 6000 |
1f51 | TU106BM GeForce RTX 2060 Mobile | Quadro RTX 6000 |
1f54 | TU106BM GeForce RTX 2070 Mobile | Quadro RTX 6000 |
1f55 | TU106BM GeForce RTX 2060 Mobile | Quadro RTX 6000 |
1f81 | TU117 | Quadro RTX 6000 |
1f82 | TU117 GeForce GTX 1650 | Quadro RTX 6000 |
1f91 | TU117M GeForce GTX 1650 Mobile / Max-Q | Quadro RTX 6000 |
1f92 | TU117M GeForce GTX 1650 Mobile | Quadro RTX 6000 |
1f94 | TU117M GeForce GTX 1650 Mobile | Quadro RTX 6000 |
1f95 | TU117M GeForce GTX 1650 Ti Mobile | Quadro RTX 6000 |
1f76 | TU106GLM Quadro RTX 3000 Mobile Refresh | Quadro RTX 6000 |
1f07 | TU106 GeForce RTX 2070 Rev. A | Quadro RTX 6000 |
1f08 | TU106 GeForce RTX 2060 Rev. A | Quadro RTX 6000 |
1f09 | TU106 GeForce GTX 1660 SUPER | Quadro RTX 6000 |
1f0a | TU106 GeForce GTX 1650 | Quadro RTX 6000 |
1f10 | TU106M GeForce RTX 2070 Mobile | Quadro RTX 6000 |
1f11 | TU106M GeForce RTX 2060 Mobile | Quadro RTX 6000 |
1f12 | TU106M GeForce RTX 2060 Max-Q | Quadro RTX 6000 |
1f14 | TU106M GeForce RTX 2070 Mobile / Max-Q Refresh | Quadro RTX 6000 |
1f15 | TU106M GeForce RTX 2060 Mobile | Quadro RTX 6000 |
1f2e | TU106M | Quadro RTX 6000 |
1f36 | TU106GLM Quadro RTX 3000 Mobile / Max-Q | Quadro RTX 6000 |
1f0b | TU106 CMP 40HX | Quadro RTX 6000 |
1eb5 | TU104GLM Quadro RTX 5000 Mobile / Max-Q | Quadro RTX 6000 |
1eb6 | TU104GLM Quadro RTX 4000 Mobile / Max-Q | Quadro RTX 6000 |
1eb8 | TU104GL Tesla T4 | Quadro RTX 6000 |
1eb9 | TU104GL | Quadro RTX 6000 |
1ebe | TU104GL | Quadro RTX 6000 |
1ec2 | TU104 GeForce RTX 2070 SUPER | Quadro RTX 6000 |
1ec7 | TU104 GeForce RTX 2070 SUPER | Quadro RTX 6000 |
1ed0 | TU104BM GeForce RTX 2080 Mobile | Quadro RTX 6000 |
1ed1 | TU104BM GeForce RTX 2070 SUPER Mobile / Max-Q | Quadro RTX 6000 |
1ed3 | TU104BM GeForce RTX 2080 SUPER Mobile / Max-Q | Quadro RTX 6000 |
1f02 | TU106 GeForce RTX 2070 | Quadro RTX 6000 |
1f04 | TU106 | Quadro RTX 6000 |
1f06 | TU106 GeForce RTX 2060 SUPER | Quadro RTX 6000 |
1ef5 | TU104GLM Quadro RTX 5000 Mobile Refresh | Quadro RTX 6000 |
1e81 | TU104 GeForce RTX 2080 SUPER | Quadro RTX 6000 |
1e82 | TU104 GeForce RTX 2080 | Quadro RTX 6000 |
1e84 | TU104 GeForce RTX 2070 SUPER | Quadro RTX 6000 |
1e87 | TU104 GeForce RTX 2080 Rev. A | Quadro RTX 6000 |
1e89 | TU104 GeForce RTX 2060 | Quadro RTX 6000 |
1e90 | TU104M GeForce RTX 2080 Mobile | Quadro RTX 6000 |
1e91 | TU104M GeForce RTX 2070 SUPER Mobile / Max-Q | Quadro RTX 6000 |
1e93 | TU104M GeForce RTX 2080 SUPER Mobile / Max-Q | Quadro RTX 6000 |
1eab | TU104M | Quadro RTX 6000 |
1eae | TU104M | Quadro RTX 6000 |
1eb0 | TU104GL Quadro RTX 5000 | Quadro RTX 6000 |
1eb1 | TU104GL Quadro RTX 4000 | Quadro RTX 6000 |
1eb4 | TU104GL T4G | Quadro RTX 6000 |
1e04 | TU102 GeForce RTX 2080 Ti | Quadro RTX 6000 |
1e07 | TU102 GeForce RTX 2080 Ti Rev. A | Quadro RTX 6000 |
1e2d | TU102 GeForce RTX 2080 Ti Engineering Sample | Quadro RTX 6000 |
1e2e | TU102 GeForce RTX 2080 Ti 12GB Engineering Sample | Quadro RTX 6000 |
1e30 | TU102GL Quadro RTX 6000/8000 | Quadro RTX 6000 |
1e36 | TU102GL Quadro RTX 6000 | Quadro RTX 6000 |
1e37 | TU102GL GRID RTX T10-4/T10-8/T10-16 | Quadro RTX 6000 |
1e38 | TU102GL | Quadro RTX 6000 |
1e3c | TU102GL | Quadro RTX 6000 |
1e3d | TU102GL | Quadro RTX 6000 |
1e3e | TU102GL | Quadro RTX 6000 |
1e78 | TU102GL Quadro RTX 6000/8000 | Quadro RTX 6000 |
1e09 | TU102 CMP 50HX | Quadro RTX 6000 |
1dba | GV100GL Quadro GV100 | Tesla V100 32GB PCIE |
1e02 | TU102 TITAN RTX | Quadro RTX 6000 |
1cfa | GP107GL Quadro P2000 | Tesla P40 |
1cfb | GP107GL Quadro P1000 | Tesla P40 |
1d01 | GP108 GeForce GT 1030 | Tesla P40 |
1d10 | GP108M GeForce MX150 | Tesla P40 |
1d11 | GP108M GeForce MX230 | Tesla P40 |
1d12 | GP108M GeForce MX150 | Tesla P40 |
1d13 | GP108M GeForce MX250 | Tesla P40 |
1d16 | GP108M GeForce MX330 | Tesla P40 |
1d33 | GP108GLM Quadro P500 Mobile | Tesla P40 |
1d34 | GP108GLM Quadro P520 | Tesla P40 |
1d52 | GP108BM GeForce MX250 | Tesla P40 |
1d56 | GP108BM GeForce MX330 | Tesla P40 |
1d81 | GV100 TITAN V | Tesla V100 32GB PCIE |
1cb6 | GP107GL Quadro P620 | Tesla P40 |
1cba | GP107GLM Quadro P2000 Mobile | Tesla P40 |
1cbb | GP107GLM Quadro P1000 Mobile | Tesla P40 |
1cbc | GP107GLM Quadro P600 Mobile | Tesla P40 |
1cbd | GP107GLM Quadro P620 | Tesla P40 |
1ccc | GP107BM GeForce GTX 1050 Ti Mobile | Tesla P40 |
1ccd | GP107BM GeForce GTX 1050 Mobile | Tesla P40 |
1ca8 | GP107GL | Tesla P40 |
1caa | GP107GL | Tesla P40 |
1cb1 | GP107GL Quadro P1000 | Tesla P40 |
1cb2 | GP107GL Quadro P600 | Tesla P40 |
1cb3 | GP107GL Quadro P400 | Tesla P40 |
1c70 | GP106GL | Tesla P40 |
1c81 | GP107 GeForce GTX 1050 | Tesla P40 |
1c82 | GP107 GeForce GTX 1050 Ti | Tesla P40 |
1c83 | GP107 GeForce GTX 1050 3GB | Tesla P40 |
1c8c | GP107M GeForce GTX 1050 Ti Mobile | Tesla P40 |
1c8d | GP107M GeForce GTX 1050 Mobile | Tesla P40 |
1c8e | GP107M | Tesla P40 |
1c8f | GP107M GeForce GTX 1050 Ti Max-Q | Tesla P40 |
1c90 | GP107M GeForce MX150 | Tesla P40 |
1c91 | GP107M GeForce GTX 1050 3 GB Max-Q | Tesla P40 |
1c92 | GP107M GeForce GTX 1050 Mobile | Tesla P40 |
1c94 | GP107M GeForce MX350 | Tesla P40 |
1c96 | GP107M GeForce MX350 | Tesla P40 |
1ca7 | GP107GL | Tesla P40 |
1c36 | GP106 P106M | Tesla P40 |
1c07 | GP106 P106-100 | Tesla P40 |
1c09 | GP106 P106-090 | Tesla P40 |
1c20 | GP106M GeForce GTX 1060 Mobile | Tesla P40 |
1c21 | GP106M GeForce GTX 1050 Ti Mobile | Tesla P40 |
1c22 | GP106M GeForce GTX 1050 Mobile | Tesla P40 |
1c23 | GP106M GeForce GTX 1060 Mobile Rev. 2 | Tesla P40 |
1c2d | GP106M | Tesla P40 |
1c30 | GP106GL Quadro P2000 | Tesla P40 |
1c31 | GP106GL Quadro P2200 | Tesla P40 |
1c35 | GP106M Quadro P2000 Mobile | Tesla P40 |
1c60 | GP106BM GeForce GTX 1060 Mobile 6GB | Tesla P40 |
1c61 | GP106BM GeForce GTX 1050 Ti Mobile | Tesla P40 |
1c62 | GP106BM GeForce GTX 1050 Mobile | Tesla P40 |
1bb8 | GP104GLM Quadro P3000 Mobile | Tesla P40 |
1bb9 | GP104GLM Quadro P4200 Mobile | Tesla P40 |
1bbb | GP104GLM Quadro P3200 Mobile | Tesla P40 |
1bc7 | GP104 P104-101 | Tesla P40 |
1be0 | GP104BM GeForce GTX 1080 Mobile | Tesla P40 |
1be1 | GP104BM GeForce GTX 1070 Mobile | Tesla P40 |
1c00 | GP106 | Tesla P40 |
1c01 | GP106 | Tesla P40 |
1c02 | GP106 GeForce GTX 1060 3GB | Tesla P40 |
1c03 | GP106 GeForce GTX 1060 6GB | Tesla P40 |
1c04 | GP106 GeForce GTX 1060 5GB | Tesla P40 |
1c06 | GP106 GeForce GTX 1060 6GB Rev. 2 | Tesla P40 |
1b87 | GP104 P104-100 | Tesla P40 |
1ba0 | GP104M GeForce GTX 1080 Mobile | Tesla P40 |
1ba1 | GP104M GeForce GTX 1070 Mobile | Tesla P40 |
1ba2 | GP104M GeForce GTX 1070 Mobile | Tesla P40 |
1ba9 | GP104M | Tesla P40 |
1baa | GP104M | Tesla P40 |
1bad | GP104 GeForce GTX 1070 Engineering Sample | Tesla P40 |
1bb0 | GP104GL Quadro P5000 | Tesla P40 |
1bb1 | GP104GL Quadro P4000 | Tesla P40 |
1bb3 | GP104GL Tesla P4 | Tesla P40 |
1bb4 | GP104GL Tesla P6 | Tesla P40 |
1bb5 | GP104GLM Quadro P5200 Mobile | Tesla P40 |
1bb6 | GP104GLM Quadro P5000 Mobile | Tesla P40 |
1bb7 | GP104GLM Quadro P4000 Mobile | Tesla P40 |
1b06 | GP102 GeForce GTX 1080 Ti | Tesla P40 |
1b07 | GP102 P102-100 | Tesla P40 |
1b30 | GP102GL Quadro P6000 | Tesla P40 |
1b38 | GP102GL Tesla P40 | Tesla P40 |
1b70 | GP102GL | Tesla P40 |
1b78 | GP102GL | Tesla P40 |
1b80 | GP104 GeForce GTX 1080 | Tesla P40 |
1b81 | GP104 GeForce GTX 1070 | Tesla P40 |
1b82 | GP104 GeForce GTX 1070 Ti | Tesla P40 |
1b83 | GP104 GeForce GTX 1060 6GB | Tesla P40 |
1b84 | GP104 GeForce GTX 1060 3GB | Tesla P40 |
1b39 | GP102GL Tesla P10 | Tesla P40 |
1b00 | GP102 TITAN X | Tesla P40 |
1b01 | GP102 GeForce GTX 1080 Ti 10GB | Tesla P40 |
1b02 | GP102 TITAN Xp | Tesla P40 |
1b04 | GP102 | Tesla P40 |
179c | GM107 GeForce 940MX | Tesla M10 |
17c2 | GM200 GeForce GTX TITAN X | Tesla M60 |
17c8 | GM200 GeForce GTX 980 Ti | Tesla M60 |
17f0 | GM200GL Quadro M6000 | Tesla M60 |
17f1 | GM200GL Quadro M6000 24GB | Tesla M60 |
17fd | GM200GL Tesla M40 | Tesla M60 |
1617 | GM204M GeForce GTX 980M | Tesla M60 |
1618 | GM204M GeForce GTX 970M | Tesla M60 |
1619 | GM204M GeForce GTX 965M | Tesla M60 |
161a | GM204M GeForce GTX 980 Mobile | Tesla M60 |
1667 | GM204M GeForce GTX 965M | Tesla M60 |
1725 | GP100 | Tesla P40 |
172e | GP100 | Tesla P40 |
172f | GP100 | Tesla P40 |
174d | GM108M GeForce MX130 | Tesla M10 |
174e | GM108M GeForce MX110 | Tesla M10 |
1789 | GM107GL GRID M3-3020 | Tesla M10 |
1402 | GM206 GeForce GTX 950 | Tesla M60 |
1406 | GM206 GeForce GTX 960 OEM | Tesla M60 |
1407 | GM206 GeForce GTX 750 v2 | Tesla M60 |
1427 | GM206M GeForce GTX 965M | Tesla M60 |
1430 | GM206GL Quadro M2000 | Tesla M60 |
1431 | GM206GL Tesla M4 | Tesla M60 |
1436 | GM206GLM Quadro M2200 Mobile | Tesla M60 |
15f0 | GP100GL Quadro GP100 | Tesla P40 |
15f1 | GP100GL | Tesla P40 |
1404 | GM206 GeForce GTX 960 FAKE | Tesla M60 |
13d8 | GM204M GeForce GTX 970M | Tesla M60 |
13d9 | GM204M GeForce GTX 965M | Tesla M60 |
13da | GM204M GeForce GTX 980 Mobile | Tesla M60 |
13e7 | GM204GL GeForce GTX 980 Engineering Sample | Tesla M60 |
13f0 | GM204GL Quadro M5000 | Tesla M60 |
13f1 | GM204GL Quadro M4000 | Tesla M60 |
13f2 | GM204GL Tesla M60 | Tesla M60 |
13f3 | GM204GL Tesla M6 | Tesla M60 |
13f8 | GM204GLM Quadro M5000M / M5000 SE | Tesla M60 |
13f9 | GM204GLM Quadro M4000M | Tesla M60 |
13fa | GM204GLM Quadro M3000M | Tesla M60 |
13fb | GM204GLM Quadro M5500 | Tesla M60 |
1401 | GM206 GeForce GTX 960 | Tesla M60 |
13b3 | GM107GLM Quadro K2200M | Tesla M10 |
13b4 | GM107GLM Quadro M620 Mobile | Tesla M10 |
13b6 | GM107GLM Quadro M1200 Mobile | Tesla M10 |
13b9 | GM107GL NVS 810 | Tesla M10 |
13ba | GM107GL Quadro K2200 | Tesla M10 |
13bb | GM107GL Quadro K620 | Tesla M10 |
13bc | GM107GL Quadro K1200 | Tesla M10 |
13bd | GM107GL Tesla M10 | Tesla M10 |
13c0 | GM204 GeForce GTX 980 | Tesla M60 |
13c1 | GM204 | Tesla M60 |
13c2 | GM204 GeForce GTX 970 | Tesla M60 |
13c3 | GM204 | Tesla M60 |
13d7 | GM204M GeForce GTX 980M | Tesla M60 |
1389 | GM107GL GRID M30 | Tesla M10 |
1390 | GM107M GeForce 845M | Tesla M10 |
1391 | GM107M GeForce GTX 850M | Tesla M10 |
1392 | GM107M GeForce GTX 860M | Tesla M10 |
1393 | GM107M GeForce 840M | Tesla M10 |
1398 | GM107M GeForce 845M | Tesla M10 |
1399 | GM107M GeForce 945M | Tesla M10 |
139a | GM107M GeForce GTX 950M | Tesla M10 |
139b | GM107M GeForce GTX 960M | Tesla M10 |
139c | GM107M GeForce 940M | Tesla M10 |
139d | GM107M GeForce GTX 750 Ti | Tesla M10 |
13b0 | GM107GLM Quadro M2000M | Tesla M10 |
13b1 | GM107GLM Quadro M1000M | Tesla M10 |
13b2 | GM107GLM Quadro M600M | Tesla M10 |
1347 | GM108M GeForce 940M | Tesla M10 |
1348 | GM108M GeForce 945M / 945A | Tesla M10 |
1349 | GM108M GeForce 930M | Tesla M10 |
134b | GM108M GeForce 940MX | Tesla M10 |
134d | GM108M GeForce 940MX | Tesla M10 |
134e | GM108M GeForce 930MX | Tesla M10 |
134f | GM108M GeForce 920MX | Tesla M10 |
137a | GM108GLM Quadro K620M / Quadro M500M | Tesla M10 |
137b | GM108GLM Quadro M520 Mobile | Tesla M10 |
137d | GM108M GeForce 940A | Tesla M10 |
1380 | GM107 GeForce GTX 750 Ti | Tesla M10 |
1381 | GM107 GeForce GTX 750 | Tesla M10 |
1382 | GM107 GeForce GTX 745 | Tesla M10 |
1340 | GM108M GeForce 830M | Tesla M10 |
1341 | GM108M GeForce 840M | Tesla M10 |
1344 | GM108M GeForce 845M | Tesla M10 |
1346 | GM108M GeForce 930M | Tesla M10 |
1)配置 NVIDIA vGPU_Unlock 服务
vGPU_Unlock是解锁 NVIDIA 消费级显卡虚拟化功能的vGPU补丁,消费卡必须安装,原生支持的专业卡,数据中心卡可选安装(推荐也安装,可以解锁NVIDIA限制)。
# 创建vgpu_unlock文件夹
mkdir /etc/vgpu_unlock
# 创建profile_override.toml文件
touch /etc/vgpu_unlock/profile_override.toml
# 创建nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d启动服务
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
# 重新加载服务
systemctl daemon-reload
执行完成后,cat下查看服务配置是否与下边一致cat /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d}/*
[Service]
Environment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so
[Service]
Environment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so
下载预编译好的libvgpu_unlock_rs.so
文件
mkdir -p /opt/vgpu_unlock-rs/target/release
cd /opt/vgpu_unlock-rs/target/release
wget -O libvgpu_unlock_rs.so https://yangwenqing.com/files/pve/vgpu/vgpu_unlock/rust/libvgpu_unlock_rs_vgpu19.so
2)安装 NVIDIA vGPU_HOST 驱动
在宿主机PVE下安装vGPU的HOST驱动。驱动已做修补,自行将host驱动NVIDIA-Linux-x86_64-580.65.05-vgpu-kvm-custom.run
上传到/tmp
目录
# 安装用到的依赖包和header头文件
apt install build-essential dkms mdevctl pve-headers-$(uname -r)
# 前往上传驱动的/tmp目录
cd /tmp
# 赋予执行权限
chmod +x NVIDIA-Linux-x86_64-580.65.05-vgpu-kvm-custom.run
# 安装驱动(默认一路回车直至安装完成即可)
./NVIDIA-Linux-x86_64-580.65.05-vgpu-kvm-custom.run --dkms -m=kernel
# 安装好后执行重启
reboot
其他补充提示:
如要升级|降级vGPU驱动,则需要先卸载,再安装
# 卸载显卡驱动
./NVIDIA-Linux-x86_64-580.65.05-vgpu-kvm-custom.run --uninstall
# 移除显卡相关程序
apt remove --purge nvidia-*
# 再开始安装驱动(默认一路回车直至安装完成即可)
./NVIDIA-Linux-x86_64-580.65.05-vgpu-kvm-custom.run --dkms -m=kernel
重启完成后查看相关服务状态是否正常
# 查看相关服务状态
systemctl status {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
# 重新启动相关服务
systemctl restart {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
# 停止相关服务
systemctl stop {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
正常运转没有错误说明服务正常以下为输出日志:
root@pve9:~# systemctl status {nvidia-vgpud.service,nvidia-vgpu-mgr.service}
○ nvidia-vgpud.service - NVIDIA vGPU Daemon
Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpud.service; enabled; preset: enabled)
Drop-In: /etc/systemd/system/nvidia-vgpud.service.d
└─vgpu_unlock.conf
Active: inactive (dead) since Wed 2025-08-27 20:06:00 CST; 3h 46min ago
Invocation: a74e7620de244604b92a71531071bccb
Process: 984 ExecStart=/usr/bin/nvidia-vgpud (code=exited, status=0/SUCCESS)
Main PID: 984 (code=exited, status=0/SUCCESS)
Mem peak: 7.6M
CPU: 634ms
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: Encoder Capacity: 0x64
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: BAR1 Length: 0x100
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: Frame Rate Limiter enabled: 0x1
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: Number of Displays: 4
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: Max pixels: 16384000
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: Display: width 5120, height 2880
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: Multi-vGPU Exclusive supported: 0x1
Aug 27 20:06:00 pve9 nvidia-vgpud[984]: License: GRID-Virtual-PC,2.0;Quadro-Virtual-DWS,5.0;GRID-Virtual-WS,2.0;GRID-Virtual-WS-Ext,2.0
Aug 27 20:06:00 pve9 systemd[1]: nvidia-vgpud.service: Deactivated successfully.
Aug 27 20:06:00 pve9 systemd[1]: Finished nvidia-vgpud.service - NVIDIA vGPU Daemon.
● nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; preset: enabled)
Drop-In: /etc/systemd/system/nvidia-vgpu-mgr.service.d
└─vgpu_unlock.conf
Active: active (running) since Wed 2025-08-27 20:06:00 CST; 3h 46min ago
Invocation: f323e4299db44e0e9077dbaa55110d14
Process: 1200 ExecStart=/usr/bin/nvidia-vgpu-mgr (code=exited, status=0/SUCCESS)
Main PID: 1208 (nvidia-vgpu-mgr)
Tasks: 6 (limit: 38267)
Memory: 37.9M (peak: 78.3M)
CPU: 7.743s
CGroup: /system.slice/nvidia-vgpu-mgr.service
├─1208 /usr/bin/nvidia-vgpu-mgr
└─1574 vgpu
随后使用nvidia-smi
以下为输出日志:
root@pve9:~# nvidia-smi
Wed Aug 27 23:54:38 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.65.05 Driver Version: 580.65.05 CUDA Version: N/A |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA P106-100 On | 00000000:08:00.0 Off | N/A |
| 23% 46C P8 7W / 120W | 1041MiB / 6144MiB | 1% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1574 C+G vgpu 1012MiB |
+-----------------------------------------------------------------------------------------+
root@pve9:~# nvidia-smi vgpu
Wed Aug 27 23:54:44 2025
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 580.65.05 Driver Version: 580.65.05 |
|---------------------------------+------------------------------+------------+
| GPU Name | Bus-Id | GPU-Util |
| vGPU ID Name | VM ID VM Name | vGPU-Util |
|=================================+==============================+============|
| 0 NVIDIA P106-100 | 00000000:08:00.0 | 0% |
| 3251634191 GRID T4-1Q | dd02... Windows10-22H2,d... | 0% |
+---------------------------------+------------------------------+------------+
以及mdevctl types
查看以下为输出日志:
root@pve9:~# mdevctl types
0000:08:00.0
nvidia-222
Available instances: 15
Device API: vfio-pci
Name: GRID T4-1B
Description: num_heads=4, frl_config=45, framebuffer=1024M, max_resolution=5120x2880, max_instance=16
nvidia-223
Available instances: 0
Device API: vfio-pci
Name: GRID T4-2B
Description: num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=8
nvidia-224
Available instances: 0
Device API: vfio-pci
Name: GRID T4-2B4
Description: num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=8
nvidia-225
Available instances: 15
Device API: vfio-pci
Name: GRID T4-1A
Description: num_heads=1, frl_config=60, framebuffer=1024M, max_resolution=1280x1024, max_instance=16
nvidia-226
Available instances: 0
Device API: vfio-pci
Name: GRID T4-2A
Description: num_heads=1, frl_config=60, framebuffer=2048M, max_resolution=1280x1024, max_instance=8
nvidia-227
Available instances: 0
Device API: vfio-pci
Name: GRID T4-4A
Description: num_heads=1, frl_config=60, framebuffer=4096M, max_resolution=1280x1024, max_instance=4
nvidia-228
Available instances: 0
Device API: vfio-pci
Name: GRID T4-8A
Description: num_heads=1, frl_config=60, framebuffer=8192M, max_resolution=1280x1024, max_instance=2
nvidia-229
Available instances: 0
Device API: vfio-pci
Name: GRID T4-16A
Description: num_heads=1, frl_config=60, framebuffer=16384M, max_resolution=1280x1024, max_instance=1
nvidia-230
Available instances: 15
Device API: vfio-pci
Name: GRID T4-1Q
Description: num_heads=4, frl_config=60, framebuffer=1024M, max_resolution=5120x2880, max_instance=16
3)Ampere架构显卡开启vGPU
Ampere架构的显卡在PVE安装好vGPU HOST驱动后,还需要开启VF才能使用vGPU,开启VF前你需要在BIOS打开SR-IOV功能。(用的不是Ampere架构以上的显卡请跳过这部分@零帧起手
)
在PVE Shell 新建一个Systemd自启动服务,开机自启动VF
cat > /etc/systemd/system/nvidia-sriov.service <<EOF
[Unit]
Description=Enable NVIDIA SR-IOV
After=network.target nvidia-vgpud.service nvidia-vgpu-mgr.service
Before=pve-guests.service
[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5
ExecStart=/usr/lib/nvidia/sriov-manage -e ALL
[Install]
WantedBy=multi-user.target
EOF
打开VF后,就可以选Mdev类型开启vGPU给虚拟机了。
# 重新加载服务
systemctl daemon-reload
# 设置nvidia-sriov.service,开机自启动
systemctl enable nvidia-sriov.service
# 启动VF
systemctl restart nvidia-sriov.service
像RTX A5000/A6000这类带显示接口的显卡,还需要切换到无显示模式才能用vGPU,先切换好无显示模式再来安装驱动顺序不能乱。
# 下载displaymodeselector工具到PVE根目录
wget https://yun.yangwenqing.com/NVIDIA/vGPU/NVIDIA/Tools/NVIDIA_Display_Mode_Selector_Tool/displaymodeselector
# 授权可执行文件
chmod +x displaymodeselector
# 切换无显示模式,跟着提示步骤进行关闭
./displaymodeselector --gpumode
# 重启PVE后生效
reboot
4)创建vGPU资源映射
如果机器的PCI设备列表有很多,或者设备里存在多张显卡又或者在用Ampere架构及以上的显卡采用的是SR-IOV拆分,会多出很多个VF设备。直接从原始设备中添加vGPU的时候很难查找。
这时就可以来创建PCI设备的资源映射,这样在添加vGPU设备时能更快的选择到我们vGPU设备。A5000采用SR-IOV拆分,会多出很多个VF设备,只需要全部勾选
添加PCI设备时,在映射的设备列表就能找到我们需要的vGPU设备。
5)搭建fastapi-dls授权服务
NVIDIA vGPU并非免费产品,需要对vGPU驱动购买许可才能正常使用vGPU,这里我用的是技术社区fastapi-dls
项目来取得90天的试用许可。我这里提供一个PVE的LXC容器,使用docker服务部署的fastapi-dls授权。
LXC容器信息:
NVIDIA vGPU 驱动授权服务器(90天授权期,客户端在每13天12点续订1次许可证,授权服务需要保持运行才能自动续期)
FASTAPI-DLS 版本:2.0.2
CT容器IP:10.10.10.99
登录LXC账号:root
登录LXC密码:123123
1)将下载下来的LXC容器还原包vzdump-lxc-999-2025_07_31-19_21_51.tar.zst
上传到PVE的/var/lib/vz/dump/
路径下。然后进行还原
2)并将原来的IP改为自己局域网的IP,这里我用10.10.10.251
。
3)开机并登录LXC容器(账号:root
密码:123123
)并创建fastapi-dls
授权服务。注意下边的IP10.10.10.251
改为自己的IP。
docker run --restart always --name fastapi-dls -d -e DLS_URL=10.10.10.251 -e DLS_PORT=443 -p 443:443 makedie/fastapi-dls:2.0.2
# 检查fastapi-dls容器是否正在运行
docker ps
三、创建虚拟机(Win11)
在PVE上创建一个Win11虚拟机
资源下载
# WINDOWS镜像ISO
https://next.itellyou.cn/
# virtio-win驱动
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
四、安装虚拟机(Win11)
启动虚拟机,开始安装Win11
五、配置虚拟机(Win11)
1)安装virtio驱动
安装好Win11后,把Virtio驱动给打上,进到CD光驱盘运行virtio-win-guest-tools
直接下一步直至安装完成
2)启用QEMU Guest Agent
安装好后,PVE的虚拟机概要处上可以看到ip信息
,如果看不到ip信息,请在关闭虚拟机,在虚拟机的选项
中,启用QEMU Guest Agent
3)开启RDP远程桌面
在系统设置开启RDP远程桌面
4)允许RDP显卡加速
RDP 支持无显卡运行,在远程桌面的时候默认是不调用显卡,可以开启它,让它支持显卡加速。
首先打开虚拟机上的组策略gpedit.msc
,依次找到计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境
在右边选择将硬件图形适配器应用于所有远程桌面服务会话 右键编辑
,选择已启用
,确定保存。
5)解除RDP 30帧限制
RDP 默认的帧率限制在30帧,可以设置为60帧传输。
在注册表打开该路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations
在空白处右键->新建->DWORD(32位)值
,命名为DWMFRAMEINTERVAL
,双击刚添加的这一项,基数选择为十进制
,数值数据填写15
,确定保存重启生效。
6)关闭防火墙
关闭Windows防火墙,或者放行3389远程桌面端口
7)关闭睡眠/屏幕
在系统设置中,把屏幕超时改为从不
六、配置vGPU(Guest驱动)
1)添加vGPU设备
PCI设备:选nvidia显卡(勾选ROM-Bar和PCIE在Mdev类型中选择vgpu设备230)
音频设备:ich9-intel-hda/后端驱动器:无(不添加的话,串流玩游戏时是没有声音的)
其中 GRID T4-1Q (nvidia-230) 是 mdev 的名字,GRID T4--显卡名,1--1G 显存,Q 代表 vWS,nvidia-230 代表ID
关于最后一位字母,如下:
Q:为需要Quadro技术的性能和功能的创意和技术专业人员提供的虚拟工作站 - CUDA OpenGL
C:计算密集型服务器工作负载,如人工智能、深度学习或高性能计算。- CUDA Only
B:为业务专业人员和知识工作者提供的虚拟桌面 - 45FPS MAX
A:为虚拟应用的用户,提供应用流或基于会话的解决方案 - Good for RDSH
3D渲染,游戏,AI运算,请选择Q系列型号即可
。2)安装Guest驱动
从vGPU 18.x开始,NVIDIA技术团队添加了 NLS ROOT CA 证书验证来保护vGPU授权数据,所以要想正常使用GRID显卡驱动还得想办法把驱动证书强校验给破解。以下是在网上找到的破解方法patched-nvidia-grid-drivers,通过
FastAPI-DLS
搭配patched-nvidia-grid-driver
来跳过证书检查。将GRID驱动和nvxdapix.dll补丁复制到虚拟机
# Windows GRID驱动程序
580.88_grid_win10_win11_server2022_dch_64bit_international.exe
# vGPU19.0的nvxdapix.dll补丁用于修补WIN GRID驱动程序
https://github.com/rbqvq/patched-nvidia-grid-drivers/blob/master/patched/19.0/nvxdapix.dll
双击打开GRID驱动程序,等待程序解压完成,并前往程序解压好的路径
将下载下来的nvxdapix.dll
补丁替换到Display.Driver
文件夹下,然后开始安装GRID驱动程序
安装GRID驱动选择精简安装,遇到Windows安全中心的弹窗选择始终安装此驱动程序软件即可。
3)授权GRID驱动
在浏览器访问fastapi-dls授权服务:https://10.10.10.251/-/client-token
会自动下载好授权文件
将文件放入C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\
这个目录下
3) 重启NVIDIA Display Container Ls服务,即可获得授权
授权失败怎么办? ① 需要检查虚拟机的时间是否对得上授权服务器时间;
② fastapi-dls授权服务是否为2.X版本,vGPU18.x后版本必须升级到2.X版本;
4)通过远程桌面工具连接虚拟机跑个鲁大师测试一下显卡是否正常工作
想解除60帧?
编辑
nano /etc/vgpu_unlock/profile_override.toml
文件,加入以下信息关闭虚拟机重新开机生效。[profile.nvidia-230]
cuda_enabled = 1
frl_enabled = 0
vgpu_type = "NVS"
参数说明:
[profile.nvidia-230]nvidia-230 为vgpu型号的参数。如选的不是230则改成自己选的那个型号。
cuda_enabled = 1是否开启cuda
frl_enabled = 0 是否限制帧数,0为不限制
vgpu_type = "NVS" 修复Q系列OpenGL性能异常问题
七、配置VDI角色
在PVE的角色菜单创建一个VDIVMUsers
的角色,并分配以下特权:VM.Audit
VM.Console
VM.PowerMgmt
VM.Monitor
。
角色权限说明:
VM.Audit
权限说明:允许查看/审计虚拟机的配置和状态(只读权限)。
典型操作:查看虚拟机列表、检查虚拟机设置、监控资源使用情况。
VM.Console
权限说明:允许通过控制台访问虚拟机(如NoVNC、SPICE或xterm.js)。
典型操作:通过Web界面打开虚拟机的图形控制台或串行终端。
VM.PowerMgmt
权限说明:允许对虚拟机进行电源管理操作。
典型操作:启动、停止、重启、暂停虚拟机。
VM.Monitor
权限说明:允许查看虚拟机的实时监控数据(如CPU、内存、磁盘I/O等)。
典型操作:在PVE界面中查看性能图表或使用qm monitor命令。
八、配置VDI用户
在PVE的用户菜单创建一个1000
的用户。其中领域选择Proxmox VE authentication server
。
添加好后就能看到用户了,同时在这个页面还支持修改、删除用户信息和密码。
九、给VDI用户分配虚拟机使用权
在PVE里选中要给VDI用户的虚拟机,点击权限
,选择添加
,把刚才添加的用户和角色选择进来即可。
到这服务端的设置全部完成了,可以退出root
账户,使用VDI账户
登录PVE管理后台,网页进行管理资源了,由于网页管理虚拟机只有vnc窗口,要想使用完整云桌面功能还是得配置个瘦客户端,接着我们来设置瘦客户端。
客户端部分
PVE的VDI客户端,个人觉得比较简单好用的一个是Github开源的 PVE-VDIClient另一个是梨儿方科技开发的 PXVDI。2款都支持主流的SPICE和RDP协议,满足日常云桌面需求。该云桌面OS是基于轻量级 Linux 发行版 Porteus作为底层 x86_64架构。系统资源占用率低,即使在老旧的硬件上也能流畅运行,很适合放在瘦客户机上跑。系统集成了PVE VDIClient 和 PXVDI 2款PVE的VDI的客户端模块,以及一些常用的远程软件如向日葵、ToDesk、RustDesk、sunshine串流,Parsec串流。
一、配置PVE VDIClient客户端
PVE-VDIClient开源且免费,支持RDP和SPICE协议
1)打开终端,切换到root权限,去编辑VDIClient的配置文件
将自己正确的PVE地址填入即可。
# 切换root权限
sudo -i
# 使用nano命令编辑vdiclient.ini文件
nano /etc/vdiclient/vdiclient.ini
在节点,主机这里能查看到自己PVE的主机名
2)配置sudo
允许guest
用户提权,做这步是为了在重定向USB设备防止权限不足。
# vi命令编辑sudoers文件
sudo visudo
# 在文件末尾添加以下参数,允许 guest 无密码运行所有命令
guest ALL=(ALL) NOPASSWD: ALL
最后就是给软件加上sudo权限右键软件快捷方式,点击属性,在命令前面加上sudo
即可提权。
3)登录 PVE VDIClient客户端,输入服务端创建好的用户1000
。进行登录
4)登录进来就可以使用RDP协议
进行远程了。
5)如要切换成SPICE协议,需要调整一下虚拟机配置。将显示调整为SPICE,并添加USB和音频重定向。显示:调整为Spice单显示器,SPICE dual monitor表示为2个显示器,最多可添加4个显示器
USB:添加USB,后端选择spice。添加几个USB就代表客户端支持多少个USB重定向
音频:添加声卡,设备选择ich9-intel-hda 后端选择spice
6)同时在虚拟机的选项
处,把SPICE增强
启用。
返回客户端就可以使用SPICE协议
进行远程了。
二、配置PXVDI客户端
PXVDI客户端由梨儿方科技开发,支持RDP、SPICE、VMware Horizon(blast/pcoip)3个协议,Linux端的客户端全部免费使用,最后一个支持直连模式是3.0.7版本,之后的版本仅维护总控模式。总控模式接入AD域,更合规和统一管理,有这方面需求可以访问官网了解报价
1)打开PXVDI客户端,在设置中配置好服务器信息并保存。
2)高级设置中,还可以对各个协议进行定制调整。
高级设置
全屏开关
控制软件是否全屏,以及以后的连接是否全屏。所有的协议均能控制Debug
启用DEBUG模式自动登录
用户登录客户端后,自动登录到虚拟机允许还原
允许用户使用快照回滚桌面连接方式
可选SPICE/Freerdp/Horizon协议。freerdp设置
freerdp版本:配置freerdp的版本,3是最新版本,修复了2存在的bug,2是稳定版本。
编解码:配置freerdp的解码方式,推荐使用420,如果不支持硬件解码,请使用软件解码
色深:配置freerdp的色彩深度,值越大,色彩越好。
缩放:配置freerdp的缩放比率,适合在高分辨率屏中使用
网络速率:wan外网,lan内网,auto自动VMware设置
连接协议:Blast和PCOIP,PCOIP适合性能差的瘦客户机。
状态栏开关:是否显示连接的状态栏,开启后,可以在云桌面中显示高级选项,如USB重定向,配置连接解码方式等网关设置:
AD模式:将用户的登录信息作为云桌面的登录账户,用户无需输入2次密码,如果配置自动登录,用户可以开机登录到桌面。需要云桌面和服务器端加域。
使用网关:配置使用rdp的网关。在ipv6启用的情况下,会忽略网关。
使用用户账号密码:将用户的账户密码作为rdp网关凭据
网关账号:rdp网关账号
网关密码:rdp网关密码。 该功能可以让外部客户端访问内网桌面。iP设置
是否开启IPV6资源设置:
多监视器:允许使用多个屏幕,勾选此项之后,无论是否全屏,云桌面都会全屏。
驱动器重定向:允许重定向瘦客户端的磁盘,如移动磁盘、内置磁盘等等。
声音重定向:允许云桌面播放声音,并从瘦客户端发出来。
打印重定向:允许云桌面使用本地打印机。
usb重定向:允许云桌面读取本地的USB设备。
麦克风重定向:允许云桌面使用麦克风。
剪切板重定向:运行云桌面进行剪切板同步。
3)登录PXVDI客户端,输入服务端创建好的
用户1000
进行登录。格式:用户@pve

4)登录进来就能正常远程了。PXVDI客户端更多的使用教学建议到官方文档查阅:PXVDI文档

三、配置Horizon客户端
PVE本身不支持VMware Horizon(blast/pcoip)这类协议,但是可以通过在PVE虚拟机安装Horizon Agent插件直连的方式来实现使用VMware Horizon Client客户端连接我们的PVE虚拟机
1)需要在Win11虚拟机上将Omnissa-Horizon-Agent
和Omnissa-Horizon-Agent-Direct-Connection
安装包下载到虚拟机。资源下载
# Horizon-Agent
https://yun.yangwenqing.com/Vmware/Omnissa_Horizon/Horizon_8_2503/Omnissa-Horizon-Agent-x86_64-2503-8.15.0-14304348675.exe
# Horizon-Agent-Direct-Connection
https://yun.yangwenqing.com/Vmware/Omnissa_Horizon/Horizon_8_2503/Omnissa-Horizon-Agent-Direct-Connection-x86_64-8.15.0-14304348675.exe
2)由于我们PVE是没有安装Horizon Connection Server
服务的,安装时得从命令行安装 Horizon Agent,跳过Horizon Connection Server 注册的参数。相关说明可见官方Horizon Agent使用文档
# 管理员运行CMD,安装 Horizon Agent时加入安装/v VDM_SKIP_BROKER_REGISTRATION=1参数
Omnissa-Horizon-Agent-x86_64-2503-8.15.0-14304348675.exe /v VDM_SKIP_BROKER_REGISTRATION=1
执行后会弹出安装窗口,按提示安装即可。
3)接着安装Horizon-Agent-Direct-Connection
这个双击运行安装就行,不需要命令行安装。
4)安装好后重启虚拟机。通过虚拟机IP使用Horizon客户端连接即可。
5)到这PVE虚拟机也可以使用VMware Horizon(blast/pcoip)
这类协议了。
四、游戏党配置Sunshine串流
在云端玩游戏推荐采用串流的方式,使用RDP或者SPICE协议来玩游戏会出现丢帧体验不好,建议采用Sunshine串流或Parsec串流方式。客户端云桌面OS已经集成了moonlight,Parsec2款串流工具。只需要在虚拟机配置好串流设置就行,并在虚拟机添加个音频。不然游戏没有声音。
Sunshine+Moonlight串流教学可以看这视频
异地访问
要让云桌面在异地也能正常使用,可以通过公网+端口映射
或者VPN组网
的方式。如果没有公网也可以在腾讯云或者阿里云买台vps做端口转发。下边演示在本地爱快做端口映射实现异地访问。在此之前你需要将宽带改桥接在爱快上拨号
,并且宽带运营商有提供公网ipv4
或者ipv6
就可以继续往下看了。
IPV4
服务端信息
OS:PVE8.4.5
主机名:pve8.lan
IPv4地址:10.10.10.252
PVE管理端口:8006
Spice API端口:3128
1)在爱快的端口映射分别将
8006
和3128
端口映射。如果运营商给你分配的是动态ipv4那你还需要做ddns。

2)返回到瘦客户端OS将公网信息填写到
PVE VDIClient客户端
或PXVDI客户端
PVE VDIClient客户端修改
nano /etc/vdiclient/vdiclient.ini

PXVDI客户端直接在服务器配置填写公网IP或者域名即可

IPV6
待更新...
集群管理
当服务端资源不足了,后面想再增加几台机器做服务端,那么可以在PVE创建集群,把各个服务端节点加入到集群集中管理。
创建PVE集群
在任意一个服务端创建集群作为主节点
,创建集群直接在web
创建。步骤:数据中心 ➡️ 集群 ➡️ 创建集群 ➡️ 设置集群名称 ➡️ 选择网络 ➡️ 创建集群
加入PVE集群
加入集群需要确保节点下没有虚拟机/LXC 容器才可以正常加入集群。在需要加入的节点点击步骤:数据中心 ➡️ 集群 ➡️ 加入集群 ➡️ 粘贴集群加入信息 ➡️ 输入集群 root 密码 ➡️ 选择网络确认加入集群
如果用弄成高可用分布式的集群方案可以看这篇文章。