起因背景我们在使用NVIDIA vGPU切分显卡资源给虚拟机后，这台虚拟机就会存在2个虚拟屏幕，一个是PVE的VNC窗口，一个是NVIDIA VGX虚拟屏幕，当我们在PVE的VNC窗口操作虚拟机的话，部分应用又无法调用到GPU资源，把VNC窗口设置“无”(NONE)的话只能借助外部远程工具连接虚拟机，PVE的VNC窗口又不工作。所以这里参考佛西：为vgpu设备添加mdev gpu类型的补丁给PVE9打上。让VNC窗口直接输出vGPU显卡画面。支持类型说明版本系统PVE 9.1.6内核Linux pve9 6.17.13-2-pvepve-qemu-kvm10.0.2-7支持虚拟机类型SeaBIOS/OVMF支持分辨率16:9/4:3(其他比例可能会花屏和黑屏)正常工作版本vGPU11.X/16.X/17.X/18.X/19.5不工作版本vGPU19.0/19.1/19.2/19.3/19.4修改QemuServer.pm可以使用nano命令来编辑QemuServer.pm文件nano /usr/share/perl5/PVE/QemuServer.pm1）第一处，在这句结尾加入mdev参数 enum => [ - qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 serial2 serial3 std virtio virtio-gl vmware) ],修改完成后效果： enum => [ + qw(cirrus qxl qxl2 qxl3 qxl4 none serial0 serial1 serial2 serial3 std virtio virtio-gl vmware mdev) ],2）第二处，在这句结尾加入'mdev' => 'mdev',参数my $vga_map = { 'cirrus' => 'cirrus-vga', 'std' => 'VGA', 'vmware' => 'vmware-svga', 'virtio' => 'virtio-vga', 'virtio-gl' => 'virtio-vga-gl', };修改完成后效果：my $vga_map = { 'cirrus' => 'cirrus-vga', 'std' => 'VGA', 'vmware' => 'vmware-svga', 'virtio' => 'virtio-vga', 'virtio-gl' => 'virtio-vga-gl', + 'mdev' => 'mdev', };3）第三处，在这句中加入if ($vga->{type} ne 'mdev'){ if判断语句，别忘了后面还有个括号}参数push @$cmd, '-no-reboot' if defined($conf->{reboot}) && $conf->{reboot} == 0; if ($vga->{type} && $vga->{type} !~ m/^serial\d+$/ && $vga->{type} ne 'none') { push @$devices, '-device', print_vga_device($conf, $vga, $arch, $machine_version, undef, $qxlnum, $bridges); push @$cmd, '-display', 'egl-headless,gl=core' if $vga->{type} eq 'virtio-gl'; # VIRGL修改完成后效果：push @$cmd, '-no-reboot' if defined($conf->{reboot}) && $conf->{reboot} == 0; if ($vga->{type} && $vga->{type} !~ m/^serial\d+$/ && $vga->{type} ne 'none') { + if ($vga->{type} ne 'mdev'){ push @$devices, '-device', print_vga_device($conf, $vga, $arch, $machine_version, undef, $qxlnum, $bridges); + } push @$cmd, '-display', 'egl-headless,gl=core' if $vga->{type} eq 'virtio-gl'; # VIRGL4）第四处，在这句结尾加入|mdev参数，让Mdev显示器支持spcie协议,如果要用SPICE协议云桌面办公的建议加上（可选） my $spice_port; assert_clipboard_config($vga); - my $is_spice = $qxlnum || $vga->{type} =~ /^virtio/;修改完成后效果： my $spice_port; assert_clipboard_config($vga); + my $is_spice = $qxlnum || $vga->{type} =~ /^(virtio|mdev)/;修改PCI.pm可以使用nano命令来编辑PCI.pm文件nano /usr/share/perl5/PVE/QemuServer/PCI.pm1）第一处，在这2句中间加入mdev类型的判断处理 my $mf_addr = $multifunction ? ".$j" : ''; $devicestr .= ",id=${id}${mf_addr}${pciaddr}${mf_addr}"; if ($j == 0) { $devicestr .= ',rombar=0' if defined($d->{rombar}) && !$d->{rombar}; $devicestr .= "$xvga";修改完成后效果： my $mf_addr = $multifunction ? ".$j" : ''; $devicestr .= ",id=${id}${mf_addr}${pciaddr}${mf_addr}"; + my $mdevtype = $d->{mdev} // undef; + if ($mdevtype =~ /^(.*?)-/) { + $mdevtype = $1; + } if ($j == 0) { $devicestr .= ',rombar=0' if defined($d->{rombar}) && !$d->{rombar}; $devicestr .= "$xvga";2）第二处，在这2句中间加入mdev类型的判断处理 if ($j == 0) { $devicestr .= ',rombar=0' if defined($d->{rombar}) && !$d->{rombar}; $devicestr .= "$xvga"; $devicestr .= ",multifunction=on" if $multifunction; $devicestr .= ",romfile=/usr/share/kvm/$d->{romfile}" if $d->{romfile}; $devicestr .= ",bootindex=$bootorder->{$id}" if $bootorder->{$id}; for my $option (qw(vendor-id device-id sub-vendor-id sub-device-id)) { $devicestr .= ",x-pci-$option=$d->{$option}" if $d->{$option}; } } push @$devices, '-device', $devicestr; last if $d->{mdev}; } }修改完成后效果： if ($j == 0) { $devicestr .= ',rombar=0' if defined($d->{rombar}) && !$d->{rombar}; $devicestr .= "$xvga"; $devicestr .= ",multifunction=on" if $multifunction; $devicestr .= ",romfile=/usr/share/kvm/$d->{romfile}" if $d->{romfile}; $devicestr .= ",bootindex=$bootorder->{$id}" if $bootorder->{$id}; for my $option (qw(vendor-id device-id sub-vendor-id sub-device-id)) { $devicestr .= ",x-pci-$option=$d->{$option}" if $d->{$option}; } } + if ($mdevtype && $vga->{type} eq 'mdev'){ + $devicestr .= ",display=on,ramfb=on,driver=vfio-pci-nohotplug"; + } push @$devices, '-device', $devicestr; last if $d->{mdev}; } }修改pvemanagerlib.js可以使用nano命令来编辑pvemanagerlib.js文件nano /usr/share/pve-manager/js/pvemanagerlib.js修改前端文件，在这句结尾加入mdev: 'NVIDIA vGPU',参数std: gettext('Standard VGA'), vmware: gettext('VMware compatible'), qxl: 'SPICE', qxl2: 'SPICE dual monitor', qxl3: 'SPICE three monitors', qxl4: 'SPICE four monitors', serial0: gettext('Serial terminal') + ' 0', serial1: gettext('Serial terminal') + ' 1', serial2: gettext('Serial terminal') + ' 2', serial3: gettext('Serial terminal') + ' 3', virtio: 'VirtIO-GPU', 'virtio-gl': 'VirGL GPU', + mdev: 'NVIDIA vGPU', none: Proxmox.Utils.noneText, },重启服务让其生效，重启完记得Ctrl+F5清理下浏览器缓存。systemctl restart {pvedaemon,pveproxy}最后就是给虚拟机添加上vGPU设备了，然后在显示那选择NVIDIA vGPU显示就能正常输入vGPU画面了。只测试了vGPU11 16 17 18的驱动版本可以正常显示，vGPU19.0-19.4会黑屏或者卡主以及花屏现象，vGPU19.5版本英伟达以修复可以正常输出显示。一键修补脚本懒人专属，附上个一键脚本进行修补，仅在PVE9.1.6版本测试通过，其他版本自测或者手动替换。[collapse status="false" title="一键新增一个NVIDIA vGPU显示器脚本"]使用方法：# 使用nano命令新建一个patch-mdev.sh文件 nano patch-mdev.sh # 粘贴下边的脚本 # 添加可执行权限 chmod +x patch-mdev.sh # 运行脚本 ./patch-mdev.sh以下是脚本内容：#!/bin/bash set -e echo "===== PVE mdev Patch=====" backup_file() { local file=$1 if ls ${file}.bak.* 1>/dev/null 2>&1; then echo " ↪ 已存在备份 $file" else cp "$file" "${file}.bak.$(date +%F-%H%M%S)" echo "[备份] $file" fi } patch_qemuserver() { local file="/usr/share/perl5/PVE/QemuServer.pm" backup_file "$file" echo "[处理] QemuServer.pm" # 1️⃣ 修改第一处 if ! grep -q "vmware mdev)" "$file"; then sed -i "s/qw(\(.*vmware\))/qw(\1 mdev)/" "$file" echo " ✔ 已修补完成" else echo " ↪ 已存在，跳过" fi # 2️⃣ 修改第二处 if ! grep -q "'mdev' => 'mdev'" "$file"; then sed -i "/'virtio-gl' => 'virtio-vga-gl',/a\ 'mdev' => 'mdev'," "$file" echo " ✔ 已修补完成" else echo " ↪ 已存在，跳过" fi # 3️⃣ 修改第三处 if ! grep -q "if (\$vga->{type} ne 'mdev')" "$file"; then echo " ✔ 已修补完成" awk ' { if ($0 ~ /push @\$devices, '\''-device'\''/ && !done) { getline nextline if (nextline ~ /print_vga_device/) { print " if ($vga->{type} ne '\''mdev'\''){" print " push @$devices, '\''-device'\''," print "" nextline print " }" done=1 next } else { print $0 print nextline next } } print $0 } ' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file" else echo " ↪ 已存在，跳过" fi # 4️⃣ 修改第四处 if ! grep -q "virtio|mdev" "$file"; then echo " ✔ 已修补完成" sed -i '/my \$is_spice = \$qxlnum || \$vga->{type} =~ \/\^virtio\//c\ my $is_spice = $qxlnum || $vga->{type} =~ /^(virtio|mdev)/;' "$file" else echo " ↪ 已存在，跳过" fi } patch_pci() { local file="/usr/share/perl5/PVE/QemuServer/PCI.pm" backup_file "$file" echo "[处理] PCI.pm" # 1️⃣ 修改第一处 if ! grep -q "mdevtype" "$file"; then sed -i "/id=\${id}/a\ my \$mdevtype = \$d->{mdev} \/\/ undef;\n if (\$mdevtype =~ \/^(.*?)-\/) {\n \$mdevtype = \$1;\n }" "$file" echo " ✔ 已修补完成" else echo " ↪ 已存在，跳过" fi # 2️⃣ 修改第二处 if ! grep -q "vfio-pci-nohotplug" "$file"; then awk ' { print if ($0 ~ /if \(\$j == 0\)/) { in_block=1 brace=0 } if (in_block) { brace += gsub(/{/, "{") brace -= gsub(/}/, "}") if (brace == 0) { print " if ($mdevtype && $vga->{type} eq '\''mdev'\''){" print " $devicestr .= \",display=on,ramfb=on,driver=vfio-pci-nohotplug\";" print " }" in_block=0 } } } ' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file" echo " ✔ 已修补完成" else echo " ↪ 已存在，跳过" fi } patch_ui() { local file="/usr/share/pve-manager/js/pvemanagerlib.js" backup_file "$file" echo "[处理] 前端UI" if ! grep -q "mdev: 'NVIDIA vGPU'" "$file"; then sed -i "/'virtio-gl': 'VirGL GPU',/a\ mdev: 'NVIDIA vGPU'," "$file" echo " ✔ 已修补完成" else echo " ↪ 已存在，跳过" fi } restart_services() { echo "[重启服务]" systemctl restart {pvedaemon,pveproxy} } # ===== 执行 ===== patch_qemuserver patch_pci patch_ui restart_services echo "" echo "===== ✅ 完成 =====" echo "请 Ctrl+F5 刷新浏览器"[/collapse]
PVE9：主机只有无线网卡|不插网线如何来玩转PVE
PVE9：主机只有无线网卡|不插网线如何来玩转PVE快过年了，不要再讨论什么 NAS、HTPC、OpenWrt了。你带你的大机箱回到家并不能给你带来任何实质性作用，朋友们兜里掏出一大把钱吃喝玩乐，你默默的在家里摆弄你的破群晖。亲戚朋友吃饭问你收获了什么，你说我组了一个 RAID 0 的 ALL IN ONE，亲戚们懵逼了，你还在心里默默嘲笑他们，笑他们不懂你的刮削器，不懂你的 Auto Backup，也笑他们看爱奇艺还要忍受会员专属广告。你父母的同事都在说自己的子女一年的收获，儿子买了个房，女儿买了个车，姑娘升职加薪了，你的父母默默无言，说我的儿子装了个黑盒子，开起来嗡嗡响、家里电表走得越来越快了。起因，老家有台闲置的老旧笔记本，没有有线网卡，只有个无线WiFi。只能通过连WiFi上网，反正在家也是闲着就来捣鼓一下在不插网线的情况，通过WiFi来玩转PVE。准备工作1）一台有无线网卡的x86主机2）一个U盘（用于安装PVE/放置离线软件包）3）下载PVE9.1.1 ISO安装包4）下载balenaEtcher烧录工具安装PVE把大象装冰箱总共分几步？答：三步，第一步把冰箱门打开；第二步把大象装进去；第三步把冰箱门关上。PVE烧录U盘提前把balenaEtcher烧录工具和PVE9.1.1镜像下载好，用balenaEtcher烧录工具将PVE镜像写入U盘，然后插到主机进行安装。PVE图形安装将U盘接入主机引导启动到PVE安装界面，采用第一种图形化界面Install Proxmox VE (Graphical）进行安装。PVE图形界面手动分区安装示意图：如果遇到第一种图形界面安装不成功，出现白屏黑屏或者没法继续的时候，更推荐采用第二种终端化界面Install Proxmox VE (Terminal UI）进行安装。PVE终端化界面手动安装示意图：查看自己网卡名称PVE安装好后，可以执行ip -c a来查看无线网卡名称，我的是wls16配置无线因为设备只有一个无线网卡，即使安装好PVE，我们也无法在另一台电脑上正常访问PVE的管理后台以及联网安装软件啥的，需要先配置好无线网络才能正常访问PVE后台和联网。下载安装包到U盘我们可以找个U盘将其格式化成fat32格式，然后将以下5个deb安装包下载好并拷到U盘，将U盘插到PVE机器上，挂载进行安装。# 下载WIFI认证和扫描工具以及相关依赖包 https://mirrors.ustc.edu.cn/debian/pool/main/w/wpa/wpasupplicant_2.10-24_amd64.deb https://mirrors.ustc.edu.cn/debian/pool/main/w/wireless-tools/wireless-tools_30~pre9-18+b1_amd64.deb https://mirrors.ustc.edu.cn/debian/pool/main/w/wireless-tools/libiw30t64_30~pre9-18+b1_amd64.deb https://mirrors.ustc.edu.cn/debian/pool/main/libn/libnl3/libnl-genl-3-200_3.7.0-2_amd64.deb https://mirrors.ustc.edu.cn/debian/pool/main/p/pcsc-lite/libpcsclite1_2.3.3-1_amd64.deb挂载U盘并安装PVE主机接好键鼠和显示器并将U盘插到设备上去，登录到控制台并将U盘挂载安装离线软件包# 进入U盘挂载路径 cd /mnt/sdb1/ # 执行安装5个deb包 dpkg -i ./*.deb测试无线网卡可以执行以下命令来测试无线网卡是否可以正常工作了# 启用无线网卡，wls16改成自己网卡名称 ip link set wls16 up # 搜索附近可用WIFI，wls16改成自己网卡名称，执行后会列出一堆WiFi信息 iwlist wls16 scanning生成个WIFI密钥因为不能直接用WiFi名称+WiFi密码进行连接，所以我们要给要连接的WiFi生成一个WiFi密钥，以下是我家的WiFi和密码，自行替换成自己的WiFi信息# 执行以下命令生成WIFI密钥，yangwenqing_5G是wifi的名称，12345678是wifi的密码 wpa_passphrase yangwenqing_5G 12345678 # 输入结果如下： root@pve9:~# wpa_passphrase yangwenqing_5G 12345678 network={ ssid="yangwenqing_5G" #psk="12345678" psk=efc169d76bafda6de23888c2b11004e44af04b178f3a9a0974af608bf9e3c2b6 }psk=efc169d76bafda6de23888c2b11004e44af04b178f3a9a0974af608bf9e3c2b6就是我们要的WiFi密钥，拍照保存。连接无线网络使用nano /etc/network/interfaces命令编辑网络配置文件，删掉原来的配置信息并根据自己实际的网卡名称 WiFi网段 WIFI网关 WiFi名称 PSK密钥来填写。（因为不能复制粘贴，这里手打得细心点，错一个字母都无法连上WiFi）auto lo iface lo inet loopback auto wls16 iface wls16 inet static address 10.10.10.222/24 gateway 10.10.10.10 wpa-ssid yangwenqing_5G wpa-psk efc169d76bafda6de23888c2b11004e44af04b178f3a9a0974af608bf9e3c2b6 source /etc/network/interfaces.d/*修改好后，保存并重启PVE设备，重新开机后就能通过https://10.10.10.222:8006访问到PVE的管理后台了，同时PVE也可以正常联网。初始化操作一些PVE基础初始化优化工作，可选执行[collapse status="false" title="PVE初始化操作"]PVE换源更换国内源主要是为了解决网络访问问题、提升下载速度、确保系统更新的可靠性，同时避免付费订阅的要求。更换系统源中科大源# 替换 Debian 官方源和安全源为中科大源 sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources更换企业源中科大源# 关闭官方订阅企业源 sed -i '/Types:/a Enabled: false' /etc/apt/sources.list.d/pve-enterprise.sources # 新增无订阅企业源为中科大源 cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve Suites: trixie Components: pve-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF更换Ceph源# 匹配当前Ceph版本和系统版本并更换为社区无订阅的中科大源 if [ -f /etc/apt/sources.list.d/ceph.sources ]; then CEPH_CODENAME=`ceph -v | grep ceph | awk '{print $(NF-1)}'` source /etc/os-release cat > /etc/apt/sources.list.d/ceph.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME Suites: $VERSION_CODENAME Components: no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF fi执行更新# 更新软件包并将系统升级到最新 apt update && apt dist-upgrade -yLXC容器更源中科大源# 备份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.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm # 重启服务后生效 systemctl restart pvedaemon.servicePVE常用优化脚本# 一键给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删除local-lvm将空间合并到local删除local-lvm将空间合并到local目录池让空间最大化。# 使用命令删除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才算完成。[/collapse]配置NAT网络因为PVE使用的是无线网络WiFi，只能供PVE宿主机本身联网使用，如果还要给虚拟机和lXC容器联网，则我们还需要在PVE上设置SNAT规则和DHCP。首先，我们应该明确SNAT和DHCP各自的作用。SNAT，即源地址转换，用于将虚拟机的内部IP地址转换为宿主机的外部IP地址，这样虚拟机就可以访问外部网络。而DHCP则负责为虚拟机分配内部IP地址，简化网络配置。安装dnsmasq为了使用DHCP功能，需要额外安装dnsmasq通过以下命令执行：# 安装dnsmasq apt install dnsmasq # 禁用默认的 dnsmasq 服务 systemctl disable --now dnsmasq启用网络转发让PVE允许在不同网络接口之间转发流量echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p配置SDN服务确保你的PVE版本是8.2及以上，这些版本才开始默认支持SDN功能。创建Simple区域步骤：数据中心 → SDN → 区域 → 添加Simple → 填写名称ID → 勾选DHCP创建Vnets步骤：数据中心 → SDN → Vnets → 创建VNet → 填写名称 → 勾选区域如果想让虚拟机之间互不通信，禁止访问对方，只需要勾选【隔离端口】就好了。这里我没有这类需求就不勾选了创建子网步骤：数据中心 → SDN → Vnets → 选中创建好的VNet → 创建子网 → 填写子网网段和网关 → 勾选SNAT配置DHCP范围步骤：数据中心 → SDN → Vnets → 选中创建好的VNet → 选中子网 → DHCP范围 → 添加IP范围都已设置完毕，我们需要应用更改。在SDN面板并单击“应用”来完成。确保网络重新加载任务成功完成。（注意：因为PVE连的是WiFi，这里点击完应用后会导致WiFi断开使得PVE失联，需要物理重启PVE，WiFi才能重新正常连接）配置防火墙(可选)如果使用 PVE 防火墙，则还需要在 VNet 接口上允许 DHCP 转发和 DNS 流量。否则，您的访客将无法联系 dnsmasq 进行 DHCP 租约和 DNS 查询。为此，请向数据中心防火墙添加两个规则：一个用于 DNS 查询，另一个用于 DHCP 转发。这两个规则都应使用方向 “in”、作 “ACCEPT” 和 VNet 名称作为接口名称对于 DNS 规则，您还应将目标地址设置为网络网关。这只允许 dnsmasq 服务器的 DNS 流量。如果您不设置它，则将允许所有 DNS 流量，这可用于规避其他防火墙规则。不能以相同的方式限制 DHCP，因为它需要首先能够发出广播消息。最后，将两者标记为已启用并保存规则。验证上网创建虚拟机或者容器在配置网络时，记得选择vnet0作为网桥，可将IPv4设置为静态或者DHCP，获取的IP段取决于您配置的子网。访问外网成功自定义DNSDnsmasq还可以为整个VNet提供DNS。如果要为VNet配置自定义DNS服务器，则需要通过编辑文件 /etc/pve/sdn/subnets.cfg并设置dhcp-dns-server配置来完成。使用nano命令编辑nano /etc/pve/sdn/subnets.cfg,在里面加入一行dhcp-dns-server 223.5.5.5即可。subnet: dhcpsnat-172.16.80.0-24 vnet vnet0 dhcp-range start-address=172.16.80.50,end-address=172.16.80.200 gateway 172.16.80.1 dhcp-dns-server 223.5.5.5 snat 1配置静态路由因为PVE下的虚拟机用的是nat网络（二级路由），在一级路由下的设备如果想直接访问PVE下的虚拟机或者LXC容器则还需要在路由器上做个静态路由规则。这样一级路由上的设备才能正常访问PVE下的nat虚拟机。以爱快软路由为例：什么！你说家用级路由器没有路由功能，无法做静态路由规则？这种情况，可以直接在设备上做静态路由规则，效果一样以Windows系统为例：# 以管理员打开cmd窗口执行以下指令： route -p add 172.16.80.0 mask 255.255.255.0 10.10.10.222配置端口转发如果你有公网IP，需要暴露到公网，则可以做端口映射，比如将ssh的22端口映射到公网的2222端口。以爱快软路由为例：总结剩下的RAID 0 All on boom自己慢慢折腾了，市面上的WiFi6/7路由器百来块钱，给设备安装个支持WiFi6的无线网卡不比有线网络差，而且设备还可以随意挪动。
给你的PVE虚拟机自定义GPU显卡型号没钱买5090显卡怎么办？咱就自己骗自己，模拟一个出来。GPU ID模拟在直通GPU时，你通常可以看到PCI菜单下方有 供应商 ID 设备 ID 和子供应商 ID 子系统 ID这4个值，如果我们把显卡对应的信息填入，就能覆盖原来的GPU ID 从而模拟成一张5090的显卡。[scode type="blue"]GPU ID 覆盖供应商ID ：指显卡供应商；三巨头 NVIDIA：10de Intel：8086 AMD：1002；设备 ID：指显卡ID值，填5090的ID则任务管理器就显示5090型号；子供应商 ID：可以理解为代工厂，比如华硕，微星，技嘉代供出来的显卡，这个选项可以留空不填；子设备 ID：同理，代工厂的设备ID，这个选项可以留空不填；如这张华硕的5090的显卡：把这些信息填到PVE处：这些显卡型号的设备ID值可以从这些网站得到：https://www.techpowerup.com/vgabios/https://admin.pci-ids.ucw.cz/read/PC/8086[/scode]当然你模拟的显卡型号和使用的驱动得跟你原来设备兼容才行，不兼容强制模拟显卡是没法正常工作的。像我用的是1080ti显卡模拟成5090显卡是完全可以的，两者都是用的同一系列的GeForce驱动。你如果把1080ti模拟成AMD 5700XT肯定是不行的跨度太大了。1080ti模拟5090核显UHD630模拟HD610
给你的PVE虚拟机自定义CPU模型/型号通常我们的PVE虚拟机习惯把CPU的类别设置为host模型，这样既能获得与宿主机CPU几乎完全相同的指令集和性能又可以在虚拟机看到的CPU就是宿主机CPU型号。如何查看虚拟机的CPU有哪些特征和指令集？qm show vmid --pretty# 查看107虚拟机CPU支持哪些指令集和特征 qm show 107 --pretty # 以下是截取的部分CPU信息 ... -cpu 'host,hv_ipi,hv_relaxed,hv_reset,hv_runtime,hv_spinlocks=0x1fff,hv_stimer,hv_synic,hv_time,hv_vapic,hv_vpindex,+kvm_pv_eoi,+kvm_pv_unhalt' ...可以看到虚拟机给CPU设置host模型后会有以上特征和指令集。自定义CPU模型如果我们想删掉/增加一些特征或者指令集，则可以在PVE上创建一个自定义CPU模型。比如我要创建一个支持"套娃"和隐藏虚拟机特征来绕过某些反作弊机制的游戏：nano /etc/pve/virtual-guest/cpu-models.conf使用nano命令创建以下内容# Intel处理器 cpu-model: Intel-Gaming flags -hypervisor;+invtsc;+hv-frequencies;+hv-evmcs;+hv-reenlightenment;+hv-emsr-bitmap;+hv-tlbflush-direct;+vmx;+pcid;+ssbd;+md-clear;+stibp;-vmware-cpuid-freq phys-bits host hidden 1 hv-vendor-id GenuineIntel reported-model host # AMD处理器 cpu-model: AMD-Gaming flags -hypervisor;+invtsc;+hv-frequencies;+hv-reenlightenment;+hv-emsr-bitmap;+hv-tlbflush-direct+svm;+topoext;-vmware-cpuid-freq phys-bits host hidden 1 hv-vendor-id AuthenticAMD reported-model host[scode type="blue"]语法如下：cpu-model: 自定义CPU模型名称；flags: CPU的特征或者指令集,+号就是增加，-号就是去除；hidden: 填0|1，是否隐藏虚拟机特征，0否，1是；phys-bits: 填32-64或者host(宿主机本身)，可以理解为多少位处理器；hv-vendor-id: 供应商 ID。自定义填写reported-model: 链接CPU模型，例如Skylake-Client-v4|EPYC-Milan-v2|kvm64|host...[/scode]设置好后，我们在CPU类别处就能看到我们自定义好的CPU模型如宿主机用的是Intel处理器则用Intel-Gaming如果用的是AMD处理器则选AMD-Gaming可以看到我们使用原始host模型和使用自定义Intel-Gaming模型差别还是挺大的，取消了虚拟机特征和支持套娃在虚拟机跑hyperV,安卓模拟器，docker和玩些不让在虚拟机运行的端游都是没有问题的。自定义CPU型号如果不想暴露宿主机CPU型号给虚拟机，我们还可以对CPU型号进行随意模拟伪装。先在网上找张CPU-Z图片，比如这张：Intel(R) Core(TM) i9-9900可以看到i9-9900的family值为6；model值为9E,Stepping值为C。由于我们qemu虚拟机只支持10进制，还需要将model值、Stepping值从16进制转为10进制。转为10进制的model值为：158；转为10进制的Stepping值为：12；# 将VMID换成自己要模拟的虚拟机ID qm set <VMID> --args "-global cpu.model-id='Intel(R) Core(TM) i9-9900 @ 3.60GHz' -global cpu.family=6 -global cpu.model=158 -global cpu.stepping=12"高级CPU欺诈法超线程i9-9900是一颗8核16线程的处理器，上面只是对型号做了更改，并为对核心跟线程进行伪装。如要把核心和线程进行伪装可以使用-smp参数（注意smp参数是真实有效的并非装饰，当然如果你宿主机本身就只有4核4线程，把它设置成8核16线程也只能有4核4线程性能，你逛论坛看到某某IDC严重超售啊，明明买的是8核心的VPS跑分还不如别人的双核性能的VPS，就是这么来的，靠北）# 将VMID换成自己要模拟的虚拟机ID qm set <VMID> --args "-global cpu.model-id='Intel(R) Core(TM) i9-9900 @ 3.60GHz' -global cpu.family=6 -global cpu.model=158 -global cpu.stepping=12 -smp 16,sockets=1,cores=8,threads=2,maxcpus=16"这样你就拥有一颗i9-9900 8核16线程的处理器了：伪主频如果你的CPU支持TSC scaling的话，还可以在虚拟机里对CPU基础主频进行模拟伪装，如 i9-9900这颗CPU的基础频率是3.60GHz。要模拟的话加入这个参数即可-global cpu.tsc-frequency=3600000000# 将VMID换成自己要模拟的虚拟机ID qm set <VMID> --args "-global cpu.model-id='Intel(R) Core(TM) i9-9900 @ 3.60GHz' -global cpu.family=6 -global cpu.model=158 -global cpu.stepping=12 -global cpu.tsc-frequency=3600000000 -smp 16,sockets=1,cores=8,threads=2,maxcpus=16"注意：CPU不支持TSC scaling强制模拟TSC频率会无法启动虚拟机总结当然并非一定要创建自定义模型，你可以直接在虚拟机添加args引导参数将CPU的特征和指令集增加/移除，创建自定义模型可以更灵活使用，不需要为每个虚拟机都往args加一堆参数。增加/移除CPU特征对性能损耗肯定是有的这个就自己去测了。参考文献PVE手册：自定义CPU模型QEMU手册：CPU参数指南
在ESXI 8.0下使用NVIDIA vGPU19.0显卡虚拟化拆分技术---应用于Windows/Ubuntu系统
在ESXI 8.0下使用NVIDIA vGPU19.0显卡虚拟化拆分技术---应用于Windows/Ubuntu系统来更新一篇ESXI版本的NVIDIA vGPU教程，本次用到的版本是ESXI8.0，由于ESXI9.0的授权模式变为了订阅制且放弃了中文语言，无法再用【神秘代码】激活白嫖了。所以白嫖党停留到了ESXI8，富哥们可以使用ESXI9.0，安装方式是一样的。本次演示的NVIDIA vGPU 版本是19.0版本，这个版本也是最后一个支持老架构的vGPU显卡了，以后的版本只会支持Ampere/Ada/Blackwell架构及其他新架构GPU卡。由于NVIDIA vGPU相关设置都需要在vCenter操作，所以还需要安装VCSA，需要将ESXI主机加入到vCenter进行管理，才能完整使用vGPU。硬件配置配置型号ESXI版本ESXI 8.0U2-22380479VCSA版本VCSA 8.0.2-22617221主板技嘉 Z370 HD3 大板CPUIntel(R) CC150 CPU @ 3.50GHz 8核16线程内存64G DDR4显卡NVIDIA L4NVIDIA vGPU驱动580.65.05[collapse status="false" title="NVIDIA vGPU支持的显卡列表 点我展开 "]适用于vGPU显卡型号和支持的版本，后续更新可以前往官网查询：https://docs.nvidia.com/vgpu/gpus-supported-by-vgpu.htmlGPU架构GPU名称首个支持的版本最后支持的版本MaxwellTesla M104.019.xMaxwellTesla M602.016.xMaxwellTesla M62.016.xPascalTesla P1005.016.xPascalTesla P405.016.xPascalTesla P45.016.xPascalTesla P65.016.xVoltaTesla V1006.019.xTuringQuadro RTX 60008.019.xTuringQuadro RTX 6000 passive10.019.xTuringQuadro RTX 80008.019.xTuringQuadro RTX 8000 passive10.019.xTuringTesla T47.1待定AmpereNVIDIA A214.0待定AmpereNVIDIA A1012.2待定AmpereNVIDIA A1613.0待定AmpereNVIDIA A4012.0待定AmpereNVIDIA RTX A500012.2待定AmpereNVIDIA RTX A550014.0待定AmpereNVIDIA RTX A600012.0待定AdaNVIDIA L216.3待定AdaNVIDIA L415.2待定AdaNVIDIA L2016.3待定AdaNVIDIA L4015.2待定AdaNVIDIA L40S16.1待定AdaNVIDIA RTX 5000 Ada16.1待定AdaNVIDIA RTX 5880 Ada17.0待定AdaNVIDIA RTX 6000 Ada15.2待定BlackwellNVIDIA RTX PRO 600019.0待定[/collapse]安装前设置BIOS[scode type="green"]为了能顺利安装vGPU，我们需要提前在BIOS里面开启以下相关设置开启VT-d --必须开启，英特尔叫vt-d，AMD叫iommu，一般在北桥那里开启SRIOV --如有，一般在PCI子设备系统那里开启Above 4G --如有，一般在PCI子设备系统那里关闭安全启动 --在security菜单 secure boot 改disabled推荐使用UEFI引导启动 -- 在boot引导项[/scode]安装NVIDIA vGPU Host驱动进入维护模式1）在ESXI8界面开启SSH服务，并进入维护模式（把ESXI8里运行的虚拟机关闭电源否则无法进入维护模式）后面要通过SSH工具登录到ESXI后台安装驱动2）将下载下来的NVIDIA VGPU驱动进行解压,把Host_Drivers文件夹里的nvd-gpu-mgmt-daemon_580.65.05-0.0.0000.zip和NVD-VGPU-800_580.65.05-1OEM.800.1.0.20613240.zip并上传到ESXI的/tmp路径安装vGPU host驱动1）通过SSH工具登录到ESXI，安装NVIDIA vGPU host驱动# 安装 NVD-VGPU-800_580.65.05-1OEM.800.1.0.20613240.zip esxcli software component apply -d /tmp/NVD-VGPU*.zip # 安装 nvd-gpu-mgmt-daemon_580.65.05-0.0.0000.zip esxcli software component apply -d /tmp/nvd-gpu-mgmt-daemon*.zip2）安装记录如下：Last login: Sat Aug 17 23:47:48 on ttys001 july@JulysiMac ~ % ssh root@10.10.10.251 (root@10.10.10.251) Password: The time and date of this login have been sent to the system logs. WARNING: All commands run on the ESXi shell are logged and may be included in support bundles. Do not provide passwords directly on the command line. Most tools can prompt for secrets or accept them from standard input. VMware offers powerful and supported automation tools. Please see https://developer.vmware.com for details. The ESXi Shell can be disabled by an administrative user. See the vSphere Security documentation for more information. [root@ESXI8:~] ls /tmp NVD-VGPU-800_580.65.05-1OEM.800.1.0.20613240.zip vmware-root nvd-gpu-mgmt-daemon_580.65.05-0.0.0000.zip vmware-uid_0 [root@ESXI8:~] esxcli software component apply -d /tmp/NVD-VGPU*.zip Installation Result Message: Operation finished successfully. Components Installed: NVD-VGPU-800_580.65.05-1OEM.800.1.0.20613240 Components Removed: Components Skipped: Reboot Required: false DPU Results: [root@ESXI8:~] esxcli software component apply -d /tmp/nvd-gpu-mgmt-daemon*.zip Installation Result Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective. Components Installed: nvd-gpu-mgmt-daemon_580.65.05-0.0.0000 Components Removed: Components Skipped: Reboot Required: true DPU Results:3) 安装完成可以执行nvidia-smi命令来验证驱动是否正常，输出类似如下信息：[root@ESXI8:~] nvidia-smi Sat Aug 17 16:14:41 2024 +-----------------------------------------------------------------------------------------+ | 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 L4 On | 00000000:01:00.0 Off | N/A | | 24% 54C P8 26W / 75W 25MiB / 24576MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | 0 N/A N/A 1050448 G Xorg 4MiB | | 1 N/A N/A 1050467 G Xorg 4MiB | +---------------------------------------------------------------------------------------+如果执行nvidia-smi没有输出，提示no devices found可能是你BIOS没设置好或者驱动版本与你的显卡不兼容。[scode type="green"]修改默认设置（可选）：3.1 关闭ECC纠错 开启ECC的话，会占用一部分显存，比如8GB的P4(8192MB)开启ECC的话就只有7680MB，所以为了使用全部显存这里选择关闭ECC# 关闭ECC nvidia-smi -e 0 # 如果你要开启则 nvidia-smi -e 13.2 切换GPU策略为均等分配默认策略是动态抢占，谁忙谁就用的多，A\Q系列限制60帧 B系列限制45帧。我们需要将它切换到均等分配的策略，均等分配的话当你开1个虚拟机的时候则有100%性能，开2个VM则有50%性能，开3个VM则有33%性能，3个VM里关掉一个又会变回50%性能。均等分配模式下是不限制帧率的。# 将 所有 vGPU 调度策略设置为均等份额调度器，并采用默认时间片长度 esxcli system module parameters set -m nvidia -p "NVreg_RegistryDwords=RmPVMRL=0x01"[/scode]4）全部做完后退出维护模式（在UI界面或者使用命令退出都行），然后重启ESXI。# 命令退出维护模式 esxcli system maintenanceMode set --enable false # 重启 rebootVCSA开启vGPU设置图形设备设置vGPU相关设置都需要在vCenter进行，所以得把ESXI主机接入到vCenter。登录到vCenter将显卡和ESXI主机从默认的共享类型（VSGA）改为直接共享类型（SR-IOV）步骤：vCenter → ESXI主机 → 配置 → 图形 → 图形设备 → 编辑 → 直接共享 → vGPU模式 → 混合大小 → 确定命令下开启混合大小模式：一些VCSA版本过低的话，在页面上是没有vGPU模式选项的，那么可以在Esxi ssh里用命令开启，重启也不会失效。# VCSA8开启混合大小模式，把下边的device-id值改为自己显卡实际所在的PCI设备地址 esxcli graphics device set --device-id=0000:06:00.0 --type SharedPassthru --vgpu-mode=MixedSize # 刷新让其生效 esxcli graphics host refresh # 查看是否处于混合大小模式 esxcli graphics device list # 输出如下结果说明混合大小模式以开启 0000:06:00.0 Vendor Name: NVIDIA Corporation Device Name: Tesla L4 Module Name: nvidia Graphics Type: SharedPassthru MixedSize[scode type="blue"]vGPU模式从vGPU 18版本开始，vGPU模式支持相同大小模式和混合大小模式。相同大小模式： 如其中一台虚拟机选了nvidia_l4-4q模型后，后面的虚拟机都将只能使用了nvidia_l4-4q模型，相同大小模式。混合大小模式： 如其中一台虚拟机选了nvidia_l4-4q模型后，后面的虚拟机既可以使用nvidia_l4-4q模型又可以使用其他模型，混合大小模式。[/scode]主机图形设置步骤：vCenter → ESXI主机 → 配置 → 图形 → 主机图形 → 编辑 → 直接共享 → 确定[scode type="green"]共享GPU分配策略GPU分配策略有2种模式，最佳性能模式和GPU整合模式。最佳性能模式：最大化利用所有GPU资源，避免单块GPU过载；适用AI推理、实时渲染、科学计算的用户GPU整合模式：先填满一块GPU，再开始使用下一块；适用测试或开发环境，面向于对性能要求不高的用户[/scode]然后就可以在虚拟机配置文件添加vGPU设备了,选择添加PCI设备，然后选择自己要使用的模型比如我这里给Ubuntu分配个24G显存，因为L4显卡总显存就24GB，如果把显存都分配给了这台虚拟机，那么其他虚拟机就没得用了，按自己需求给就行。[scode type="blue"]其中 NVIDIA GRID vGPU nvidia_l4-24q 是 mdev 的名字，nvidia_l4--显卡名，24--24G 显存，q 代表 vWS关于最后一位字母，如下:A = Virtual Applications (vApps)适用于虚拟应用/共享桌面等场景B = Virtual Desktops (vPC)-适用于拥有标准PC应用程序、浏览器和多媒体的虚拟桌面。常用于办公场景Q = Virtual Workstations (vWS)-适用于专业级图形应用程序，如Al、深度学习和数据科学。性能最佳[/scode]为虚拟机安装Guest驱动（Win11）安装驱动1）安装Win11虚拟机略过，自行在ESXI上安装好Win11虚拟机并安装好VM Tools工具。（如果你装的是Win10，则你的系统版本需要在22h2及以上才能正常使用vGPU。因为这是vGPU19.0版本的最低要求。）然后在VCSA上面添加好vGPU的PCI设备，选择自己需要的模型。2）将下载下来的NVIDIA vGPU驱动进行解压,把Guest_Drivers文件夹里的580.88_grid_win10_win11_server2022_dch_64bit_international.exe上传到虚拟机3）安装驱动的话，一直下一步直至安装完成即可。授权驱动NVIDIA vGPU系列产品并非免费给消费者使用的，而是给企业用户专门定制的。需要对GRID驱动购买许可才能正常使用vGPU，驱动不授权的话，试用期到期将会锁住限制在15帧。这里我用开源社区nvlts项目来给驱动进行永久授权（个人测试使用，商用注意规避风险）1）下载nvlts,并解压放到C盘，如C:\nvlts# nvtls 1.0.3 https://dl.yangwenqing.com/webos/link/6b00d5a713984ea8beee6516adb9a6b9/nvlts_1.0.3_windows_amd64.zip2）打开CMD窗口执行以下命令，因为我们用的是Q系列vWS模型，所以授权的时候也要使用vWS的配置文件。# 进到nvlts目录 cd c:\nvlts # 进行授权 nvlts.exe -g -r -c configs\vWS.json之后我们可以执行nvidia-smi -q | findstr /i "license"来查看是否永久授权成功。C:\nvlts>nvidia-smi -q | findstr /i "license" vGPU Software Licensed Product License Status : Licensed (Expiry: Permanent)# 说明永久授权成功开启RDP[scode type="green"]注意：我们的vGPU虚拟机是需要使用远程方式来连接虚拟机的，这样才会调用GPU，如果直接在浏览器Web端操作虚拟机是不会调用到vGPU资源的，Windows虚拟机可以使用RDP协议远程连接到虚拟机。以下是Win开启RDP远程的操作：1）开启RDP远程桌面在系统设置开启RDP远程桌面2）允许RDP显卡加速RDP 支持无显卡运行，在远程桌面的时候默认是不调用显卡，可以开启它，让它支持显卡加速。首先打开虚拟机上的组策略gpedit.msc，依次找到计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境在右边选择将硬件图形适配器应用于所有远程桌面服务会话 右键编辑，选择已启用，确定保存。3）解除RDP 30帧限制RDP 默认的帧率限制在30帧，可以设置为60帧传输。在注册表打开该路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations在空白处右键->新建->DWORD（32位）值，命名为DWMFRAMEINTERVAL，双击刚添加的这一项，基数选择为十进制，数值数据填写15，确定保存重启生效。4）关闭防火墙关闭Windows防火墙,或者放行3389远程桌面端口5）关闭睡眠/屏幕在系统设置中，把屏幕超时改为从不[/scode]为虚拟机安装Guest驱动（Ubuntu 2504）安装Ubuntu 2504虚拟机略过，自行在ESXI上安装好Ubuntu虚拟机并安装好VM Tools工具。（安装Ubuntu虚拟机请采用UEFI安装，不要使用BIOS安装）然后在VCSA上面添加好vGPU的PCI设备，选择自己需要的模型。内核知识[collapse status="false" title="您需要知道的内核小知识："][scode type="blue"]因为NVIDIA Driver需要对应内核才能正常安装驱动，比如535版本可能需要在6.5内核，550版本可能需要在6.8内核...一般我们安装Ubuntu的时候，系统会默认将内核升级到最新版本，所以我们在打驱动时需要将内核指定到对应版本才能安装NVIDIA Driver。Ubuntu推荐使用mainline内核管理程序来快速切换任意版本的Linux内核。1）查看当前系统内核版本，如果内核满足驱动安装，那么直接跳过安装内核步骤直接去安装驱动即可。uname -r2）安装 mainline 的软件包，需要添加它的软件源，然后用 apt 安装。sudo add-apt-repository ppa:cappelikan/ppa -y sudo apt update && sudo apt install mainline -y3）安装好后，可以指定想要安装的内核版本。比如要安装 6.8.12 版本：# 安装`6.8.12` 内核 sudo mainline install 6.8.12 # 以下信息是安装过程 mainline 1.4.13 Updating Kernels... Downloading 6.8.12-060812-generic ▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░ 27% 19/54 MB - file 3/44）内核安装好后，你需要知道系统里已经安装了哪些内核# 查看当前已安装的内核列表 dpkg --list | grep linux-image # 你会看到类似下面的输出： rc linux-image-6.14.0-29-generic 6.14.0-29.29~24.04.1 amd64 Signed kernel image generic hi linux-image-unsigned-6.8.12-060812-generic 6.8.12-060812.202501300202 amd64 Linux kernel image for version 6.8.12 on 64 bit x86 SMP这里linux-image-6.14.0-29-generic 和 linux-image-unsigned-6.8.12-060812-generic 就是已安装的内核包名5）修改 GRUB 配置，指定内核启动，我们将通过修改 /etc/default/grub 文件来设置默认内核# nano编辑grub文件 sudo nano /etc/default/grub # 例如，如果你想将 linux-image-unsigned-6.8.12-060812-generic 设置为默认，配置行可能看起来像这样： GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.12-060812-generic" # 配置grub读秒，让你有足够的时间在启动时看到 GRUB 菜单并进行选择 GRUB_TIMEOUT=5 # 确保这一行是 ‘menu’ 而不是 ‘hidden’ GRUB_TIMEOUT_STYLE=menu我的完整grub参数如下：# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.12-060812-generic" GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`( . /etc/os-release; echo ${NAME:-Ubuntu} ) 2>/dev/null || echo Ubuntu` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # If your computer has multiple operating systems installed, then you # probably want to run os-prober. However, if your computer is a host # for guest OSes installed via LVM or raw disk devices, running # os-prober can cause damage to those guest OSes as it mounts # filesystems to look for things. #GRUB_DISABLE_OS_PROBER=false # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"6）更新并重启系统sudo update-grub && reboot7) 重启后，系统就会自动切换到指定的内核版本# 登录进来提示 Welcome to Ubuntu 24.04.3 LTS (GNU/Linux 6.8.12-060812-generic x86_64) # uname -r 6.8.12-060812-generic8）把不需要的旧内核清除一下，腾出空间sudo apt autoremove -y这样就可以去安装Guest驱动了，如果你的gcc版本过低的话也需要升级。这样才能打上驱动。[/scode][/collapse]安装驱动1) 安装显卡驱动前先将需要的依赖文件打上# 安装ssh工具，使用第三方SSH工具（putty,终端）连接到Ubuntu，PVE里面控制台无法复制命令 sudo apt-get install openssh-server # 需要所需依赖 sudo apt install build-essential linux-headers-generic libglvnd-dev pkg-config -y # 安装dkms sudo apt install dkms -y # 安装32位兼容库 sudo dpkg --add-architecture i386 sudo apt update sudo apt install libc6:i386 -y2）屏蔽自带的显卡驱动创建blacklist-nouveau.conf文件sudo nano /etc/modprobe.d/blacklist-nouveau.conf# 在blacklist-nouveau.conf文件添加如下内容： blacklist nouveau options nouveau modeset=0# 重载内核initramfs sudo update-initramfs -u # 重启Ubuntu sudo reboot重启完成后检查nouveau是否已禁用，没有任何输出说明已经禁用lsmod | grep nouveau # 切换到文本命令行控制台 sudo chvt 3 # 关闭图形界面服务 sudo service gdm stop3）安装显卡GRID驱动，将NVIDIA-Linux-x86_64-580.65.06-grid.run上传到/root目录下# 切换root权限 sudo -i # 给可执行权限 cd /root && chmod +x NVIDIA-Linux-x86_64-580.65.06-grid.run # 安装驱动（默认回车直至安装完成即可） ./NVIDIA-Linux-x86_64-580.65.06-grid.run --dkms4）使用nvidia-smi验证驱动是否正常ubuntu@ubuntu-Standard-PC-Q35-ICH9-2009:~$ nvidia-smi Thu Aug 28 23:02:49 2025 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 580.65.06 Driver Version: 580.65.06 CUDA Version: 13.0 | +-----------------------------------------+------------------------+----------------------+ | 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 GRID T4-1Q On | 00000000:01:00.0 Off | N/A | | N/A N/A P0 N/A / N/A | 11MiB / 4096MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 1454 G /usr/lib/xorg/Xorg 10MiB | +-----------------------------------------------------------------------------------------+授权驱动下载nvlts,并解压到/opt# 创建存放nvlts mkdir /opt/nvlts && cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf && cd /opt/nvlts # 下载nvtls 1.0.3 wget -O /opt/nvlts/nvlts_1.0.3_linux_amd64.tar.gz "https://dl.yangwenqing.com/webos/link/2b88beefd12e41e3a03ce3faeae9ebdb/nvlts_1.0.3_linux_amd64.tar.gz" # 解压nvlts tar zxvf nvlts*.tar.gz # 配置自启动项 mkdir -p /etc/systemd/system/nvidia-gridd.service.d cp /opt/nvlts/systemd/vWS.conf /etc/systemd/system/nvidia-gridd.service.d/nvlts.conf systemctl daemon-reload # 执行授权 ./nvlts -g -r -c configs/vWS.json验证授权# 重启服务 sudo service nvidia-gridd restart # 验证授权获取情况 nvidia-smi -q | grep License# 看到有Licensed字样，就授权好了。 ubuntu@ubuntu-Standard-PC-Q35-ICH9-2009:~$ nvidia-smi -q | grep License vGPU Software Licensed Product License Status : Licensed (Expiry: Permanent)[scode type="green"]如果你需要用vGPU跑大模型，可能还需要安装CUDA/CuDNN，vGPU19.0支持最新的CUDA 13.0版本，当然cuda12 cuda11版本也是可以安装。安装CUDA打开官网：https://developer.nvidia.com/cuda-toolkit-archive选择CUDA 13.0，如下图选择Linux及对应的架构、系统、版本和安装形式：复制网站给我们的安装命令，依次在终端中输入：# 下载cuda 13 安装程序 wget https://developer.download.nvidia.com/compute/cuda/13.0.0/local_installers/cuda_13.0.0_580.65.06_linux.run # 执行安装cuda程序 sudo sh cuda_13.0.0_580.65.06_linux.run输入accept接受条款┌──────────────────────────────────────────────────────────────────────────────┐ │ End User License Agreement │ │ -------------------------- │ │ │ │ NVIDIA Software License Agreement and CUDA Supplement to │ │ Software License Agreement. │ │ │ │ The CUDA Toolkit End User License Agreement applies to the │ │ NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA │ │ Display Driver, NVIDIA Nsight tools (Visual Studio Edition), │ │ and the associated documentation on CUDA APIs, programming │ │ model and development tools. If you do not agree with the │ │ terms and conditions of the license agreement, then do not │ │ download or use the software. │ │ │ │ Last updated: January 12, 2025 │ │ │ │ │ │ Preface │ │ ------- │ │ │ │──────────────────────────────────────────────────────────────────────────────│ │ Do you accept the above EULA? (accept/decline/quit): │ │ accept │ └──────────────────────────────────────────────────────────────────────────────┘注意：由于之前已经安装过驱动了，这次不要再安装驱动。在Driver这里按ENTER键将勾去掉！将2项CUDA选项勾选然后选择Install┌──────────────────────────────────────────────────────────────────────────────┐ │ CUDA Installer │ │ - [ ] Driver │ │ [ ] 580.65.06 │ │ + [X] CUDA Toolkit 13.0 │ │ [X] CUDA Documentation 13.0 │ │ - [ ] Kernel Objects │ │ [ ] nvidia-fs │ │ Options │ │ Install │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │ └──────────────────────────────────────────────────────────────────────────────┘安装完成后，使用nano命令来配置环境变量：nano ~/.bashrc# 在最后添加以下变量信息 export PATH=$PATH:/usr/local/cuda-13.0/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-13.0/lib64最后，使其生效source ~/.bashrc执行nvcc -V即可查看CUDA版本root@ubuntu-Standard-PC-Q35-ICH9-2009:~# nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Wed_Jul_16_07:30:01_PM_PDT_2025 Cuda compilation tools, release 13.0, V13.0.48 Build cuda_13.0.r13.0/compiler.36260728_0安装CuDNN打开官网：https://developer.nvidia.com/cudnn-downloads选择CuDNN 9.12.0，如下图选择Linux及对应的架构、系统、版本和安装形式：复制网站给我们的安装命令，依次在终端中输入：wget https://developer.download.nvidia.com/compute/cudnn/9.12.0/local_installers/cudnn-local-repo-ubuntu2404-9.12.0_1.0-1_amd64.deb sudo dpkg -i cudnn-local-repo-ubuntu2404-9.12.0_1.0-1_amd64.deb sudo cp /var/cudnn-local-repo-ubuntu2404-9.12.0/cudnn-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cudnn9-cuda-13[/scode]FAQ问答Q1：我的是A5000/A6000显卡带视频输出接口，怎样才能使用vGPU呢？A1：A5000/A6000显卡默认是显示模式的，如果要使用vGPU功能，需要先切换为无显示模式才能使用vGPU。切换模式需要使用NVIDIA的displaymodeselector工具，该工具只支持在Window和linux平台使用，ESXI目前是没办法直接用的。如果你是ESXI平台，可以将显卡拆下来放到Win/Linux物理机又或者将显卡直通到Win/Linux的虚拟机里切换好在来安装vGPU。工具下载# displaymodeselector工具 Windows版本 https://share.feijipan.com/s/fqFt9mRH # displaymodeselector工具 Linux版本 https://share.feijipan.com/s/AFFt9s8cdisplaymodeselector工具切换教学（Window为例）在CMD窗口，执行一下命令：.\displaymodeselector.exe --gpumode然后根据提示关闭就行，关闭后就可以进行vGPU的安装。Q2：为啥我在网页连接的虚拟机打完显卡驱动后，就不能操作了呢？A2：请配置好远程桌面或者安装第三方远程工具，确认能通过远程连上虚拟机再来安装显卡驱动，如果你没配置就安装了显卡驱动，则需要先删除显卡设备，配置好远程再添加上显卡设备。因为你一旦安装好显卡驱动后系统就会呈现双显示器状态，这样就会导致Web网页虚拟机控制台黑屏，或者是副屏状态，使得无法操作虚拟机。如要使用GPU资源请通过远程操作虚拟机。如果你要简单的在Web操作虚拟机，不想借助外部的远程工具，可以用ToDesk远程到虚拟机，把显示屏设置改为仅控制台窗口显示，这样ESXI的Web显示就能操作了。（注意：Web控制台的窗口是独立的虚拟显卡并不调用vGPU）Q3：为啥帧率限制在60帧，可以解除帧率限制？A3：可以的，vGPU调度器默认采用Best Effort（尽力而为）策略，A|Q系列会被限制在60帧，B系列会限制在45帧。如要解除帧率限制则改为Equal Share（均等份额）策略即可。只需要在esxi ssh中执行以下命令# 将 所有 vGPU 调度策略设置为均等份额调度器，并采用默认时间片长度 esxcli system module parameters set -m nvidia -p "NVreg_RegistryDwords=RmPVMRL=0x01" # 重启Esxi，即可生效 reboot均等份额策略：物理 GPU 由其上所有运行的 vGPU 平均共享。当 vGPU 数量变化时，每个 vGPU 获得的份额会动态调整。如开1个VM则有100%性能，开2个VM则有50%性能，开3个VM则有33%性能，3个VM关掉一个又会变回50%性能。更多调度器参数设置可见官方文档：vGPU调度策略说明Q4：此产品许可证不支持共享 PCI 直通适配器。无法启动虚拟机。A4：你的ESXI的产品没激活或者没有使用Enterprise Plus企业激活秘钥。vGPU需要企业增强版的秘钥才能完整使用vGPU，这里附上个ESXI8的Enterprise Plus神秘代码：4V492-44210-48830-931GK-2PRJ4
PVE9：用NVIDIA vGPU19.0虚拟化显卡拆分在虚拟机玩游戏记录6.14内核的PVE9配置NVIDIA vGPU19.0版本的显卡虚拟化拆分，并在虚拟机里玩游戏。NVIDIA vGPU是一项由 NVIDIA 开发的虚拟化技术。它允许单个物理的 NVIDIA GPU（显卡）被多个虚拟机（VM）同时、直接地共享使用。注意它不是一个免费的项目，需要购买软件许可vGPU License才能完整的使用vGPU。本文涉及的vGPU解锁和授权驱动功能是基于开源社区方案实现，仅限个人测试、学习及非商业用途，商用可能存在法律风险。技术支持如果你是萌新或者是对PVE基础较弱的用户，频道提供专属的技术护航服务服务目录服务内容价格表渠道入口资源包提供本文用到的PVE镜像+虚拟机还原包；自行看教程部署无任何技术支持；19.9元购买入口技术支持提供疑难解答、远程支持：如去虚拟化、安装虚拟机、安装驱动等；不足一小时按小时收取费用；50元/小时购买入口一条龙部署提供从0-1的远程部署服务；提供简单的使用培训；提供1天的售后和支持；99元购买入口所需资料[scode type="green"]定制版PVE镜像包-ISO版--推荐镜像使用说明：如果你用预装版的PVE镜像包安装不成功，或者无法在你的设备上正常初始化，又或者你想使用冗余raid1或者ZFS模式来安装PVE。那么你可以用这个PVE ISO镜像来安装。安装方式跟常规的PVE安装方法一样。将ISO镜像写入U盘插到设备进行安装，安装好后登录PVE后台打开PVE Shell窗口进行一键部署，本镜像需要PVE联网下载依赖包来部署环境镜像更新说明：1）基于PVE 9.2.2 内核Linux 7.0.2-6-pve版本完成构建；2）集成一键初始化脚本：一键为PVE9合并local分区|换源|开启IOMMU|屏蔽NVIDIA显卡|去订阅弹窗等；3）集成一键部署vGPU脚本：一键安装NVIDIA vGPU Host驱动（11|16|17|18|19|20）和vGPU unlock-rs服务；4）集成一键去虚拟化脚本：规避虚拟机检测，模拟真实硬件环境，让软件或者端游在虚拟机中运行;5）集成一键随机硬件脚本：为每台虚拟机生成独立的硬件信息（主板|CPU|内存|硬盘|BIOS|机器码）;6）集成一键随机显卡脚本：给每台虚拟机生成一张Quadro专业卡/Geforce消费卡,虚拟机需要NVIDIA vGPU支持;7）集成一键虚拟机多开脚本：批量克隆虚拟机|同步母机数据盘|批量删除虚拟机；8）提供Fastapi-dls GRID驱动授权服务的搭建和LXC还原包，激活vGPU 全功能（vApps/vPC/vWS）;9）提供针对游戏优化的 Win 11 24h2 x64 | Win10 22h2 x64 | Win7 旗舰版 x64 虚拟机的还原包;预装版PVE镜像包-无桌版镜像使用说明：1）预装版就是环境都帮你部署好了，不用你另外联网安装啥的。你只需要烧录硬盘启动即可；2）镜像无绑定限制，可重复使用。本镜像为无桌面版本，需要用第二台机器做主控机进行管理PVE；3）对于一些不能接入外网的用户或者多机器想减少重复部署工作的工作室，预装版是个不错的选择；镜像更新说明：1）基于PVE 9.2.2 内核Linux 7.0.2-6-pve版本进行封装；2）该镜像大小32GB，管理账号：root,密码：123456；3）管理口默认为主机的第一个口，默认IP：10.10.10.123，默认网关：10.10.10.10；4）提前预装了vGPU安装前所需的依赖包，如要使用N卡做vGPU拆分，执行脚本安装vGPU驱动即可;5）提供Fastapi-dls GRID驱动授权服务的搭建和LXC还原包，激活vGPU 全功能（vApps/vPC/vWS）;6）提供针对游戏优化的 Win 11 24h2 x64 | Win10 22h2 x64 | Win7 旗舰版 x64 虚拟机的还原包;7）提供PVE脚本（更改PVE管理IP|扩容系统盘剩余空间|安装vGPU驱动11/16/17/18/19/20|安装/卸载去虚拟化KVM包|定制硬件信息|模拟显卡信息|批量克隆/同步/删除虚拟机）登录SSH自动运行；预装版PVE镜像包-桌面版镜像使用说明：1）镜像安装了GNOME图形界面，对实在找不到第二台机器来做主控机的用户友好；2）PVE既是被控端也是主控端，不需要找第2台机器去管理PVE，直接在当前PVE的浏览器登录PVE后台即可；3）前提是你机器最少要2张显卡，可以核显（核显用于输出显示器）+独显（N卡用于vGPU）或者2个独显（A卡用于输出显示器，N卡用于vGPU）的搭配，因为N卡做了vGPU是没法输出显示器的，输出显示器就没法使用vGPU，记得在BIOS将显卡第一显示改核显或者要输出显示器的独显A卡；镜像更新说明：1）基于PVE 9.2.2 内核Linux 7.0.2-6-pve版本进行封装；2）该镜像大小28GB，管理账号：root,密码：123456；3）管理口默认为主机的第一个口，默认IP：10.10.10.123，默认网关：10.10.10.10；4）预装GNOME桌面，中文输入法，以及常用的远程软件向日葵，rustdesk，moonlight；5）提前预装了vGPU安装前所需的依赖包，如要使用N卡做vGPU拆分，执行脚本安装vGPU驱动即可;6）提供Fastapi-dls GRID驱动授权服务的搭建和LXC还原包，激活vGPU 全功能（vApps/vPC/vWS）;7）提供针对游戏优化的 Win 11 24h2 x64 | Win10 22h2 x64 | Win7 旗舰版 x64 虚拟机的还原包;8）提供PVE脚本（更改PVE管理IP|扩容系统盘剩余空间|安装vGPU驱动11/16/17/18/19/20|安装/卸载去虚拟化KVM包|定制硬件信息|模拟显卡信息|批量克隆/同步/删除虚拟机）登录SSH自动运行；[/scode][scode type="blue"]虚拟机还原包-Win10采用Windows10最后一个功能更新的版本22h2，适配vGPU19版本虚拟机信息：系统：Windows10 22H2 X64 不忘初心游戏版 UEFI启动计算机名：Win10-1账号：administrator密码：没有密码Rustdesk 默认密码：123456使用说明：1）虚拟机还原后，建议在PVE Shell中运行脚本更新一下虚拟机的硬件信息防止和其他人串号;2）已预装NVIDIA vGPU GRID 19.0 驱动，记得下载好授权文件给驱动授权，不授权驱动会被限制在15帧；3）桌面放置了【工具箱】文件夹：系统优化工具|系统激活工具|虚拟机检测工具|过游戏检测方法|NVIDIA驱动；虚拟机还原包-Win7介于还有人在使用Win7，特地将其搬到PVE9上并适配vGPU驱动，支持分配vGPU资源提供图形加速虚拟机信息：系统：Windows7 X64 旗舰版 BIOS启动计算机名：Win7-Game-01账号：administrator密码：没有密码Rustdesk 默认密码：123456使用说明：1）虚拟机还原后，建议在PVE Shell中运行脚本更新一下虚拟机的硬件信息防止和其他人串号;2）登录到虚拟机后，建议给虚拟机固定好静态IP地址，然后使用Rustdesk用IP进行远程使用；3）虚拟机已装NVIDIA quadro 441.66 驱动,请分配好vGPU显卡，在PVE Shell运行脚本模拟专业卡型号；4）桌面放置了【工具】文件夹：系统优化工具|系统激活工具|虚拟机检测工具|过游戏检测方法|NVIDIA驱动；[/scode]视频教学部署篇请前往B站观看整个系列的教学视频。图文教学部署篇硬件配置演示的显卡依旧是哥布林救出来的美女一手自用带体香的P106-100矿卡。配置型号系统PVE 9.0.3内核Linux pve9 6.14.8-2-pvepve-qemu-kvm10.0.2-4CPUIntel Core CC150 @ 3.5GHz 8核16线程显卡七彩虹 P106-100 6144 MBvGPU驱动580.65.05显卡支不支持vGPU虚拟化，可以点开下边列表进行查阅。[collapse status="false" title="VGPU_Unlock支持的显卡列表 点我展开"][scode type="blue"]以下 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支持的显卡列表可能模拟的显卡型号21c4TU116 GeForce GTX 1660 SUPERQuadro RTX 600021d1TU116BM GeForce GTX 1660 Ti MobileQuadro RTX 60002182TU116 GeForce GTX 1660 TiQuadro RTX 60002184TU116 GeForce GTX 1660Quadro RTX 60002187TU116 GeForce GTX 1650 SUPERQuadro RTX 60002188TU116 GeForce GTX 1650Quadro RTX 60002191TU116M GeForce GTX 1660 Ti MobileQuadro RTX 60002192TU116M GeForce GTX 1650 Ti MobileQuadro RTX 60002189TU116 CMP 30HXQuadro RTX 60001fbbTU117GLM Quadro T500 MobileQuadro RTX 60001fd9TU117BM GeForce GTX 1650 Mobile RefreshQuadro RTX 60001ff9TU117GLM Quadro T1000 MobileQuadro RTX 60001fddTU117BM GeForce GTX 1650 Mobile RefreshQuadro RTX 60001f96TU117M GeForce GTX 1650 Mobile / Max-QQuadro RTX 60001fb8TU117GLM Quadro T2000 Mobile / Max-QQuadro RTX 60001fb9TU117GLM Quadro T1000 MobileQuadro RTX 60001f97TU117M GeForce MX450Quadro RTX 60001f98TU117M GeForce MX450Quadro RTX 60001f9cTU117M GeForce MX450Quadro RTX 60001f9dTU117M GeForce GTX 1650 Mobile / Max-QQuadro RTX 60001fb0TU117GLM Quadro T1000 MobileQuadro RTX 60001fb1TU117GL T600Quadro RTX 60001fb2TU117GLM Quadro T400 MobileQuadro RTX 60001fbaTU117GLM T600 MobileQuadro RTX 60001f42TU106 GeForce RTX 2060 SUPERQuadro RTX 60001f47TU106 GeForce RTX 2060 SUPERQuadro RTX 60001f50TU106BM GeForce RTX 2070 Mobile / Max-QQuadro RTX 60001f51TU106BM GeForce RTX 2060 MobileQuadro RTX 60001f54TU106BM GeForce RTX 2070 MobileQuadro RTX 60001f55TU106BM GeForce RTX 2060 MobileQuadro RTX 60001f82TU117 GeForce GTX 1650Quadro RTX 60001f91TU117M GeForce GTX 1650 Mobile / Max-QQuadro RTX 60001f92TU117M GeForce GTX 1650 MobileQuadro RTX 60001f94TU117M GeForce GTX 1650 MobileQuadro RTX 60001f95TU117M GeForce GTX 1650 Ti MobileQuadro RTX 60001f76TU106GLM Quadro RTX 3000 Mobile RefreshQuadro RTX 60001f07TU106 GeForce RTX 2070 Rev. AQuadro RTX 60001f08TU106 GeForce RTX 2060 Rev. AQuadro RTX 60001f09TU106 GeForce GTX 1660 SUPERQuadro RTX 60001f0aTU106 GeForce GTX 1650Quadro RTX 60001f10TU106M GeForce RTX 2070 MobileQuadro RTX 60001f11TU106M GeForce RTX 2060 MobileQuadro RTX 60001f12TU106M GeForce RTX 2060 Max-QQuadro RTX 60001f14TU106M GeForce RTX 2070 Mobile / Max-Q RefreshQuadro RTX 60001f15TU106M GeForce RTX 2060 MobileQuadro RTX 60001f36TU106GLM Quadro RTX 3000 Mobile / Max-QQuadro RTX 60001f0bTU106 CMP 40HXQuadro RTX 60001eb5TU104GLM Quadro RTX 5000 Mobile / Max-QQuadro RTX 60001eb6TU104GLM Quadro RTX 4000 Mobile / Max-QQuadro RTX 60001eb8TU104GL Tesla T4Quadro RTX 60001ec2TU104 GeForce RTX 2070 SUPERQuadro RTX 60001ec7TU104 GeForce RTX 2070 SUPERQuadro RTX 60001ed0TU104BM GeForce RTX 2080 MobileQuadro RTX 60001ed1TU104BM GeForce RTX 2070 SUPER Mobile / Max-QQuadro RTX 60001ed3TU104BM GeForce RTX 2080 SUPER Mobile / Max-QQuadro RTX 60001f02TU106 GeForce RTX 2070Quadro RTX 60001f06TU106 GeForce RTX 2060 SUPERQuadro RTX 60001ef5TU104GLM Quadro RTX 5000 Mobile RefreshQuadro RTX 60001e81TU104 GeForce RTX 2080 SUPERQuadro RTX 60001e82TU104 GeForce RTX 2080Quadro RTX 60001e84TU104 GeForce RTX 2070 SUPERQuadro RTX 60001e87TU104 GeForce RTX 2080 Rev. AQuadro RTX 60001e89TU104 GeForce RTX 2060Quadro RTX 60001e90TU104M GeForce RTX 2080 MobileQuadro RTX 60001e91TU104M GeForce RTX 2070 SUPER Mobile / Max-QQuadro RTX 60001e93TU104M GeForce RTX 2080 SUPER Mobile / Max-QQuadro RTX 60001eb0TU104GL Quadro RTX 5000Quadro RTX 60001eb1TU104GL Quadro RTX 4000Quadro RTX 60001eb4TU104GL T4GQuadro RTX 60001e04TU102 GeForce RTX 2080 TiQuadro RTX 60001e07TU102 GeForce RTX 2080 Ti Rev. AQuadro RTX 60001e2dTU102 GeForce RTX 2080 Ti Engineering SampleQuadro RTX 60001e2eTU102 GeForce RTX 2080 Ti 12GB Engineering SampleQuadro RTX 60001e30TU102GL Quadro RTX 6000/8000Quadro RTX 60001e36TU102GL Quadro RTX 6000Quadro RTX 60001e37TU102GL GRID RTX T10-4/T10-8/T10-16Quadro RTX 60001e78TU102GL Quadro RTX 6000/8000Quadro RTX 60001e09TU102 CMP 50HXQuadro RTX 60001dbaGV100GL Quadro GV100Tesla V100 32GB PCIE1e02TU102 TITAN RTXQuadro RTX 60001cfaGP107GL Quadro P2000Tesla P401cfbGP107GL Quadro P1000Tesla P401d01GP108 GeForce GT 1030Tesla P401d10GP108M GeForce MX150Tesla P401d11GP108M GeForce MX230Tesla P401d12GP108M GeForce MX150Tesla P401d13GP108M GeForce MX250Tesla P401d16GP108M GeForce MX330Tesla P401d33GP108GLM Quadro P500 MobileTesla P401d34GP108GLM Quadro P520Tesla P401d52GP108BM GeForce MX250Tesla P401d56GP108BM GeForce MX330Tesla P401d81GV100 TITAN VTesla V100 32GB PCIE1cb6GP107GL Quadro P620Tesla P401cbaGP107GLM Quadro P2000 MobileTesla P401cbbGP107GLM Quadro P1000 MobileTesla P401cbcGP107GLM Quadro P600 MobileTesla P401cbdGP107GLM Quadro P620Tesla P401cccGP107BM GeForce GTX 1050 Ti MobileTesla P401ccdGP107BM GeForce GTX 1050 MobileTesla P401cb1GP107GL Quadro P1000Tesla P401cb2GP107GL Quadro P600Tesla P401cb3GP107GL Quadro P400Tesla P401c81GP107 GeForce GTX 1050Tesla P401c82GP107 GeForce GTX 1050 TiTesla P401c83GP107 GeForce GTX 1050 3GBTesla P401c8cGP107M GeForce GTX 1050 Ti MobileTesla P401c8dGP107M GeForce GTX 1050 MobileTesla P401c8fGP107M GeForce GTX 1050 Ti Max-QTesla P401c90GP107M GeForce MX150Tesla P401c91GP107M GeForce GTX 1050 3 GB Max-QTesla P401c92GP107M GeForce GTX 1050 MobileTesla P401c94GP107M GeForce MX350Tesla P401c96GP107M GeForce MX350Tesla P401c36GP106 P106MTesla P401c07GP106 P106-100Tesla P401c09GP106 P106-090Tesla P401c20GP106M GeForce GTX 1060 MobileTesla P401c21GP106M GeForce GTX 1050 Ti MobileTesla P401c22GP106M GeForce GTX 1050 MobileTesla P401c23GP106M GeForce GTX 1060 Mobile Rev. 2Tesla P401c30GP106GL Quadro P2000Tesla P401c31GP106GL Quadro P2200Tesla P401c35GP106M Quadro P2000 MobileTesla P401c60GP106BM GeForce GTX 1060 Mobile 6GBTesla P401c61GP106BM GeForce GTX 1050 Ti MobileTesla P401c62GP106BM GeForce GTX 1050 MobileTesla P401bb8GP104GLM Quadro P3000 MobileTesla P401bb9GP104GLM Quadro P4200 MobileTesla P401bbbGP104GLM Quadro P3200 MobileTesla P401bc7GP104 P104-101Tesla P401be0GP104BM GeForce GTX 1080 MobileTesla P401be1GP104BM GeForce GTX 1070 MobileTesla P401c02GP106 GeForce GTX 1060 3GBTesla P401c03GP106 GeForce GTX 1060 6GBTesla P401c04GP106 GeForce GTX 1060 5GBTesla P401c06GP106 GeForce GTX 1060 6GB Rev. 2Tesla P401b87GP104 P104-100Tesla P401ba0GP104M GeForce GTX 1080 MobileTesla P401ba1GP104M GeForce GTX 1070 MobileTesla P401ba2GP104M GeForce GTX 1070 MobileTesla P401badGP104 GeForce GTX 1070 Engineering SampleTesla P401bb0GP104GL Quadro P5000Tesla P401bb1GP104GL Quadro P4000Tesla P401bb5GP104GLM Quadro P5200 MobileTesla P401bb6GP104GLM Quadro P5000 MobileTesla P401bb7GP104GLM Quadro P4000 MobileTesla P401b06GP102 GeForce GTX 1080 TiTesla P401b07GP102 P102-100Tesla P401b30GP102GL Quadro P6000Tesla P401b38GP102GL Tesla P40Tesla P401b80GP104 GeForce GTX 1080Tesla P401b81GP104 GeForce GTX 1070Tesla P401b82GP104 GeForce GTX 1070 TiTesla P401b83GP104 GeForce GTX 1060 6GBTesla P401b84GP104 GeForce GTX 1060 3GBTesla P401b39GP102GL Tesla P10Tesla P401b00GP102 TITAN XTesla P401b01GP102 GeForce GTX 1080 Ti 10GBTesla P401b02GP102 TITAN XpTesla P40179cGM107 GeForce 940MXTesla M1017c2GM200 GeForce GTX TITAN XTesla M6017c8GM200 GeForce GTX 980 TiTesla M6017f0GM200GL Quadro M6000Tesla M6017f1GM200GL Quadro M6000 24GBTesla M6017fdGM200GL Tesla M40Tesla M601617GM204M GeForce GTX 980MTesla M601618GM204M GeForce GTX 970MTesla M601619GM204M GeForce GTX 965MTesla M60161aGM204M GeForce GTX 980 MobileTesla M601667GM204M GeForce GTX 965MTesla M60174dGM108M GeForce MX130Tesla M10174eGM108M GeForce MX110Tesla M101789GM107GL GRID M3-3020Tesla M101402GM206 GeForce GTX 950Tesla M601406GM206 GeForce GTX 960 OEMTesla M601407GM206 GeForce GTX 750 v2Tesla M601427GM206M GeForce GTX 965MTesla M601430GM206GL Quadro M2000Tesla M601431GM206GL Tesla M4Tesla M601436GM206GLM Quadro M2200 MobileTesla M6015f0GP100GL Quadro GP100Tesla P401404GM206 GeForce GTX 960 FAKETesla M6013d8GM204M GeForce GTX 970MTesla M6013d9GM204M GeForce GTX 965MTesla M6013daGM204M GeForce GTX 980 MobileTesla M6013e7GM204GL GeForce GTX 980 Engineering SampleTesla M6013f0GM204GL Quadro M5000Tesla M6013f1GM204GL Quadro M4000Tesla M6013f2GM204GL Tesla M60Tesla M6013f3GM204GL Tesla M6Tesla M6013f8GM204GLM Quadro M5000M / M5000 SETesla M6013f9GM204GLM Quadro M4000MTesla M6013faGM204GLM Quadro M3000MTesla M6013fbGM204GLM Quadro M5500Tesla M601401GM206 GeForce GTX 960Tesla M6013b3GM107GLM Quadro K2200MTesla M1013b4GM107GLM Quadro M620 MobileTesla M1013b6GM107GLM Quadro M1200 MobileTesla M1013b9GM107GL NVS 810Tesla M1013baGM107GL Quadro K2200Tesla M1013bbGM107GL Quadro K620Tesla M1013bcGM107GL Quadro K1200Tesla M1013bdGM107GL Tesla M10Tesla M1013c0GM204 GeForce GTX 980Tesla M6013c2GM204 GeForce GTX 970Tesla M6013d7GM204M GeForce GTX 980MTesla M601389GM107GL GRID M30Tesla M101390GM107M GeForce 845MTesla M101391GM107M GeForce GTX 850MTesla M101392GM107M GeForce GTX 860MTesla M101393GM107M GeForce 840MTesla M101398GM107M GeForce 845MTesla M101399GM107M GeForce 945MTesla M10139aGM107M GeForce GTX 950MTesla M10139bGM107M GeForce GTX 960MTesla M10139cGM107M GeForce 940MTesla M10139dGM107M GeForce GTX 750 TiTesla M1013b0GM107GLM Quadro M2000MTesla M1013b1GM107GLM Quadro M1000MTesla M1013b2GM107GLM Quadro M600MTesla M101347GM108M GeForce 940MTesla M101348GM108M GeForce 945M / 945ATesla M101349GM108M GeForce 930MTesla M10134bGM108M GeForce 940MXTesla M10134dGM108M GeForce 940MXTesla M10134eGM108M GeForce 930MXTesla M10134fGM108M GeForce 920MXTesla M10137aGM108GLM Quadro K620M / Quadro M500MTesla M10137bGM108GLM Quadro M520 MobileTesla M10137dGM108M GeForce 940ATesla M101380GM107 GeForce GTX 750 TiTesla M101381GM107 GeForce GTX 750Tesla M101382GM107 GeForce GTX 745Tesla M101340GM108M GeForce 830MTesla M101341GM108M GeForce 840MTesla M101344GM108M GeForce 845MTesla M101346GM108M GeForce 930MTesla M10[/scode][/collapse]一、安装Proxmox VE如果你用的是预装版PVE的IMG镜像，那么你直接将镜像烧录硬盘启动即可，以下只演示定制版PVE ISO镜像的图文安装过程。BIOS设置[scode type="green"]提前在BIOS开启以下设置开启VT-d --必须开启，英特尔叫vt-d，AMD叫iommu开启SRIOV --如有开启Above 4G --如有关闭安全启动 --在security菜单 secure boot 改disabled推荐使用UEFI引导启动[/scode]PVE烧录U盘提前把balenaEtcher烧录工具和定制版的PVE镜像下载好，用balenaEtcher烧录工具将镜像写入U盘或者移动硬盘，然后插到主机进行PVE的安装。PVE图形安装将U盘或者移动硬盘接入主机引导启动到PVE安装界面，采用第一种图形化界面Install Proxmox VE (Graphical）进行安装。PVE图形界面手动分区安装示意图：如果遇到第一种图形界面安装不成功，出现白屏黑屏或者没法继续的时候，更推荐采用第二种终端化界面Install Proxmox VE (Terminal UI）进行安装。PVE终端化界面手动安装示意图：PVE初始化设置安装完成PVE后，在浏览器输入https://你的PVE管理IP:8006来访问你的PVE管理后台了登录进来后需要对PVE进行一些初始化设置，打开PVE Shell执行脚本①(PVE需要能访问外网，不然无法继续)脚本执行完会对PVE进行自动重启一次。二、部署NVIDIA vGPU安装vGPU驱动1）打开PVE Shell执行脚本②一键安装NVIDIA vGPU Host驱动（16|17|18|19）和vGPU Unlock-rs服务2）选择自己要安装的版本，PVE9推荐安装vGPU19，PVE8推荐安装vGPU17。3）重启完成后查看相关服务状态是否正常# 查看相关服务状态 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=16Ampere架构显卡开启vGPU官方支持的Ampere架构及之后架构的显卡在PVE安装好vGPU HOST驱动后，还需要开启VF才能使用vGPU，开启VF前你需要在BIOS打开SR-IOV功能。（用的不是Ampere架构以上的显卡请跳过这部分@零帧起手）在PVE Shell 新建一个Systemd自启动服务，开机自启动VFcat > /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[scode type="yellow"]像RTX A5000/A6000这类带显示接口的显卡，还需要切换到无显示模式才能用vGPU,先切换好无显示模式再来安装驱动顺序不能乱。# 先下载displaymodeselector工具上传到PVE根目录 https://share.feijipan.com/s/zOZHGpgP # 授权可执行文件 chmod +x displaymodeselector # 切换无显示模式，跟着提示步骤进行关闭 ./displaymodeselector --gpumode # 重启PVE后生效 reboot[/scode]创建vGPU资源映射如果机器的PCI设备列表有很多，或者设备里存在多张显卡又或者在用Ampere架构及以上的显卡采用的是SR-IOV拆分，会多出很多个VF设备。直接从原始设备中添加vGPU的时候很难查找。这时就可以来创建PCI设备的资源映射，这样在添加vGPU设备时能更快的选择到我们vGPU设备。A5000采用SR-IOV拆分，会多出很多个VF设备，只需要全部勾选非SR-IOV拆分的显卡，则勾选显卡本身单独创建即可。多张卡就创建多个资源映射添加PCI设备时，在映射的设备列表就能找到我们需要的vGPU设备。三、搭建fastapi-dls授权服务NVIDIA vGPU并非免费产品，需要对vGPU驱动购买许可才能正常使用vGPU，这里我用的是技术社区fastapi-dls项目来取得90天的试用许可。提供2种方式部署fastapi-dls服务，一种是在PVE宿主机本地部署，另一种是使用LXC容器运行docker来部署fastapi-dls，选择其中1种方式进行部署就行。PVE本地部署在PVE shell执行脚本安装FASTAPI-DLS服务来部署服务（PVE需要联网下载依赖包）输入1执行一键部署FastAPI-DLS服务=============================================== FastAPI-DLS 管理脚本 一个部署在PVE宿主机的NVIDIA GRID 驱动授权服务； 支持给NVIDIA GRID vGPU 14-19驱动版本进行授权； =============================================== 1) 一键安装 FastAPI-DLS V2.0.3 2) 一键卸载 FastAPI-DLS 3) 查看服务状态 4) 查看服务日志 5) 重启服务 6) 退出 =============================================== 请选择操作 [1-6]: 这里会检测IP并使用你的PVE服务器IP作为授权地址，这里我们选择Y继续；（如果你PVE地址是内网IP，你又想将授权服务映射公网，则选N，手动填写公网IP地址）端口：默认443，自签证书：默认10年，授权天数周期：默认90天。[STEP] 开始部署 FastAPI-DLS... [INFO] 请配置以下参数（直接回车使用默认值） [INFO] 检测到服务器IP: 10.10.10.253 是否使用此IP? [Y/n]: y 请输入服务端口 [默认: 443]: 请输入证书有效期(天) [默认: 3650]: 请输入租约有效期(天) [默认: 90]: [INFO] 安装配置: 服务器IP: 10.10.10.253 服务端口: 443 证书有效期: 3650 天 租约有效期: 90 天 确认开始安装? [y/N]:安装好后就可以给虚拟机GRID驱动授权了========== FastAPI-DLS 部署完成 ========== 授权服务地址: https://10.10.10.253:443 配置文件位置: /etc/fastapi-dls/env ========================================== 管理命令: 启动: systemctl start fastapi-dls 停止: systemctl stop fastapi-dls 重启: systemctl restart fastapi-dls 状态: systemctl status fastapi-dls 日志: journalctl -u fastapi-dls -f 如果需要修改配置，请编辑 /etc/fastapi-dls/env 后重启服务 ========================================== 按回车键返回主菜单...LXC容器部署[scode type="blue"]LXC容器信息：NVIDIA vGPU 驱动授权服务器（90天授权期，客户端在每13天12点续订1次许可证，授权服务需要保持运行才能自动续期）FASTAPI-DLS 版本：2.0.2CT容器IP：10.10.10.99登录LXC账号：root登录LXC密码：123123[/scode]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四、PVE去虚拟化做完以上vGPU部分，就可以给PVE安装做去虚拟化步骤了。因为市面上大部分端游都不允许在虚拟机进行游戏有反作弊检测，单机3A游戏除外。如你有在虚拟机玩端游的需求，则还需要对虚拟机做以下去虚拟化动作。单独去虚拟化在PVE管理工具菜单中可以对单台虚拟机进行去虚拟化，这样可以防止不需要去虚拟化的虚拟机受到关联造成影响或者性能损失。支持Intel/AMD处理器。脚本：定制硬件信息+取消虚拟机特征（Intel/AMD专用）机器使用的是Intel处理器就用Intel专用，AMD处理器就用AMD专用。脚本会去除虚拟机特征+模拟CPU型号+仿冒SMBIOS硬件信息全局去虚拟化全局去虚拟化需要安装去虚拟化QEMU-KVM包，可以更彻底的去除Qemu虚拟机的特征。安装后PVE下的所有虚拟机都会生效。安装完还需要配合脚本：定制硬件信息+取消虚拟机特征（Intel/AMD专用）一起使用。去虚拟化QEMU-KVM包是基于github上的pve-anti-detection的基础上修改重新编译打包而成的。步骤：PVE Shell → 安装去虚拟化QEMU-KVM包 → 安装五、创建虚拟机（Win11）创建虚拟机PVE的去虚拟化装好后，最后我们来安装一个虚拟机。把Win11镜像上传到PVE。然后在PVE上创建一个Win11虚拟机（24h2）实例创建好后PVE就会生成一个ID为100的Win11虚拟机打开PVE Shell 执行脚本④给虚拟机做去虚拟化和定制硬件信息安装虚拟机启动虚拟机，开始安装Win11配置虚拟机1）开启RDP远程桌面在系统设置开启RDP远程桌面2）允许RDP显卡加速RDP 支持无显卡运行，在远程桌面的时候默认是不调用显卡，可以开启它，让它支持显卡加速。首先打开虚拟机上的组策略gpedit.msc，依次找到计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境在右边选择将硬件图形适配器应用于所有远程桌面服务会话 右键编辑，选择已启用，确定保存。3）解除RDP 30帧限制RDP 默认的帧率限制在30帧，可以设置为60帧传输。在注册表打开该路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations在空白处右键->新建->DWORD（32位）值，命名为DWMFRAMEINTERVAL，双击刚添加的这一项，基数选择为十进制，数值数据填写15，确定保存重启生效。4）关闭防火墙关闭Windows防火墙,或者放行3389远程桌面端口5）关闭睡眠/屏幕在系统设置中，把屏幕超时改为从不配置vGPU添加vGPU设备PCI设备：选nvidia显卡（勾选ROM-Bar和PCIE在Mdev类型中选择vgpu设备230）音频设备：ich9-intel-hda/后端驱动器：无(不添加的话，串流玩游戏时是没有声音的)[scode type="blue"]其中 GRID T4-1Q (nvidia-230) 是 mdev 的名字，GRID T4--显卡名，1--1G 显存，Q 代表 vWS，nvidia-230 代表ID关于最后一位字母，如下:Q：为需要Quadro技术的性能和功能的创意和技术专业人员提供的虚拟工作站 - CUDA OpenGLC：计算密集型服务器工作负载，如人工智能、深度学习或高性能计算。- CUDA OnlyB：为业务专业人员和知识工作者提供的虚拟桌面 - 45FPS MAXA：为虚拟应用的用户，提供应用流或基于会话的解决方案 - Good for RDSH3D渲染，游戏，AI运算，请选择Q系列型号即可。[/scode]安装驱动NVIDIA vGPU系列产品并非免费给消费者使用的，而是给企业用户专门定制的。需要对GRID驱动购买许可才能正常使用vGPU，驱动不授权的话，试用期到期将会锁住限制在15帧。这里提供2种方式FASTAPI-DLS和NVLTS来为驱动进行授权，按需选择。[collapse status="false" title="1.使用FASTAPI-DLS授权来安装驱动方法："]使用FASTAPI-DLS授权来安装驱动方法：从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安全中心的弹窗选择始终安装此驱动程序软件即可。授权GRID驱动，在浏览器访问fastapi-dls授权服务：https://10.10.10.251/-/client-token会自动下载好授权文件将文件放入C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\这个目录下重启NVIDIA Display Container Ls服务，即可获得授权 授权失败怎么办？ ① 需要检查虚拟机的时间是否对得上授权服务器时间；② fastapi-dls授权服务是否为2.X版本，vGPU18.x后版本必须升级到2.X版本；[/collapse][collapse status="false" title="2.使用NVLTS授权来安装驱动方法："]使用NVLTS授权来安装驱动方法：这里用开源社区nvlts项目来给驱动进行永久授权。将下载下来的NVIDIA vGPU驱动进行解压,把Guest_Drivers文件夹里的580.88_grid_win10_win11_server2022_dch_64bit_international.exe上传到虚拟机安装驱动的话，一直下一步直至安装完成即可。下载nvlts,并解压放到C盘，如C:\nvlts# nvtls 1.0.3 https://dl.yangwenqing.com/webos/link/6b00d5a713984ea8beee6516adb9a6b9/nvlts_1.0.3_windows_amd64.zip打开CMD窗口执行以下命令，因为我们用的是Q系列vWS模型，所以授权的时候也要使用vWS的配置文件。# 进到nvlts目录 cd c:\nvlts # 进行授权 nvlts.exe -g -r -c configs\vWS.json之后我们可以执行nvidia-smi -q | findstr /i "license"来查看是否永久授权成功。C:\nvlts>nvidia-smi -q | findstr /i "license" vGPU Software Licensed Product License Status : Licensed (Expiry: Permanent)# 说明永久授权成功 授权失败怎么办？ ① NVLTS依赖系统指纹信息，如更改过网卡信息或者系统指纹信息均会掉授权需要重新授权② 如果需要经常变更虚拟机的指纹信息建议将nvlts放到自启文件夹每次开机都静默执行授权[/collapse]测试GPU通过远程桌面工具连接虚拟机跑个鲁大师测试一下显卡是否正常工作[scode type="yellow"]想解除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是否开启cudafrl_enabled = 0 是否限制帧数，0为不限制vgpu_type = "NVS" 修复Q系列OpenGL性能异常问题[/scode]六、配置串流玩游戏最后就是把要玩的游戏安装到虚拟机玩游戏推荐使用串流协议，可以使用sunshine串流配合moonlight客户端进行游玩。当然你如果是想多开挂机游戏，可以用一些同步专家，RDP，VNC，ToDesk，Rustdesk，连连控等投屏软件就行。[scode type="blue"]注意：由于Web端虚拟机的VNC显示窗口是不会调用vGPU的，开启了这个VNC显示窗口相当于开启了一个虚拟显示器。这就导致一些游戏和远程软件不能正常调用到vGPU。所以我们在配置好虚拟机/配置好远程后，就可以把这个VNC窗口关闭掉。如何关闭VNC窗口？选中要关的虚拟机→硬件→显示改成"无"关闭后控制台的显示将会关闭无法显示，请使用远程工具连接虚拟机。[/scode]异地串流玩游戏（sunshine串流为例）既然都在局域网中云端玩游戏了，肯定少不了在异地玩游戏啦~如果你家宽有公网ipv4或者ipv6，就可以在异地玩云游戏了。需要先在Sunshine串流后台开启公网访问的设置如果你是ipv6，直接用虚拟机获取到的ipv6地址在Moonlight直接连接就行如果你是ipv4,则需要在你的路由器设备做好端口映射并放行47984-48010端口。以爱快为例：做好端口映射就可以使用你公网IPv4在Moonlight进行连接了。在用su7车机网络串流到虚拟机打黑神话流畅度还行 ::aru:proud:: 七、多开克隆虚拟机克隆多开我要开10个英雄联盟窗口，蓝队和红队完成一场5v5对战。开10个窗口就需要启动10个虚拟机，可以在一个虚拟机安装好游戏然后将这个虚拟机作为母机，使用脚本⑦链接克隆方式克隆10个虚拟机，这种克隆方式是将母机系统盘C盘和同步盘D盘的数据链接给子机使用，所以子机不会占用原始空间，可以有效的节约硬盘资源（注意：链接克隆后，母机如果没有啥必要，请不要开机也不要在里面正常使用请保持关机的状态。如果母机做了大量的修改和设置或者安装了些软件及驱动的，是有几率影响到子机的，导致子机蓝屏无法启动）。具体能不能跑的动10个窗口，得看物理机性能（CPU，内存，硬盘，网卡，显存）都需要合理分配。克隆出来的这10个虚拟机可以再使用脚本④随机硬件信息刷新一下虚拟机参数进行伪装。让每台虚拟机都是独立信息同步更新如果游戏后续需要更新了，可以去更新母盘的游戏数据，然后使用脚本⑧同步母盘数据盘下发给10个子虚拟机。注意：同步的话，只会去同步名称为ide1的硬盘，所以你的母盘虚拟机的游戏需要安装到这个硬盘下面才能正常下发给子虚拟机。同步会将子虚拟机的ide1硬盘给格式化，所以子虚拟机有重要数据不要放在ide1这个硬盘里，可以放桌面或者C盘这样数据不会丢失。FAQ问答[scode type="green"]一、NVIDIA vGPU部分Q1：我的显卡是Tesla P4，安装好了vGPU驱动，在Windows虚拟机看到显卡变成了T4或者RTXA6000A1: 部分NVIDIA vGPU HOST驱动是做了修补集成了vGPU unlock服务，所以你看到p4变成T4或者RTXA6000都是正常的并不会影响其性能。当然p4本身就是支持的vGPU卡，在vGPU17版本前直接用原生NVIDIA vGPU HOST驱动就行,如果你要用vGPU17版本及以上就得模拟一个受支持的显卡型号才能使用Q2：我的显卡有6GB显存，选用GRID T4-1Q（nvidia-230）模型，那显示可用数16个，我是不是能开16个？A2：错的！nvidia-230模型每开一个vgpu会占用1024M显存，6G显存理论就是1G+1G+1G+1G+1G+1G=6个。16是这个230模型最大可用数Q3：为啥我给虚拟机使用nvidia-230模型后，其他虚拟机想再使用其他模型就不让选择了可用数为0。只能用nvidia-230模型。A3：对的，默认vGPU是置于相等大小模式，一旦选了这个模型后，所有虚拟机都将采用该模型，你不能一台虚拟机使用nvidia-230模型，另一台虚拟机使用nvidia-231模型。但是从vGPU18版本后NVIDIA开始对老显卡非SRIOV的虚拟化也支持了混合模式即支持不同显存大小。打脸的是我们用的消费卡/非支持的专业卡依旧不能使用官方方法开启混合模式，卡不支持还是得用vGPU Unlock解锁修改。官方开启GPU混合大小模式1）使用nvidia-smi -q命令列出所有物理 GPU 的状态，并检查异构时间分片 vGPU 大小是否受支持。当Heterogeneous Time-Slice Sizes项如果是Supported状态，说明你的显卡支持开启混合模式.... Attached GPUs : 1 GPU 00000000:41:00.0 ... Heterogeneous Time-Slice Sizes : Supported ...2）使用以下命令开启混合大小模式。将id值改自己显卡获取到的数字（一般从0开始，机器只有一张N卡那默认就是0）# 开启混合大小模式 nvidia-smi vgpu -i id -shm 1 # 例如： nvidia-smi vgpu -i 0 -shm 1 # 输出以下信息说明开启成功 Enabled vGPU heterogeneous mode for GPU 00000000:41:00.0使用nvidia-smi -q命令检查 vGPU 异构模式是否已启用，以确认 GPU 现在处于混合大小模式。 ... vGPU Heterogeneous Mode : Enabled ...如要切换回GPU置于相等大小模式，使用-shm 0选项运行此命令即可。3）因为重启PVE GPU混合大小模式就会失效，所以建立个开机自启Systemd文件,开机自动开启。cat > /etc/systemd/system/nvidia-vgpu-shm0.service <<EOF [Unit] Description=Enabled NVIDIA Heterogeneous Mode After=network.target nvidia-vgpud.service nvidia-vgpu-mgr.service Before=pve-guests.service [Service] Type=oneshot ExecStartPre=/bin/sleep 8 ExecStart=/usr/bin/nvidia-smi vgpu -i 0 -shm 1 [Install] WantedBy=multi-user.target EOF# 重载Systemd服务 systemctl daemon-reload # 设置nvidia-vgpu-shm.service开机自启 systemctl enable nvidia-vgpu-shm.service # 启动nvidia-vgpu-shm.service systemctl start nvidia-vgpu-shm.serviceQ4：我显卡不支持官方方法开启GPU混合大小模式，我要怎么给每台虚拟机分配不同大小的显存？A4：可以配合vGPU Unlock，通过修改framebuffer、framebuffer_reservation这2个值就能给每台虚拟机自定义显存大小。显存大小不建议低于1GB，低于1GB将无法启用NVENC视频编解码器。由于vGPU是采用时间片轮询方式来共享算力，切分的越多虚拟机占用算力的时间就越少丢帧也越严重。虽可改512MB，384MB的显存值来达到切分10~20个虚拟机，但你的显卡算力瓶颈就在那，与其减小显存强制多开，不如多买几张卡。例如：我要使用nvidia-230模型给101虚拟机分配4G显存，102虚拟机分配2G显存，那么我就这样写即可nano命令编辑nano /etc/vgpu_unlock/profile_override.toml# 自定义nvidia-230模型 [profile.nvidia-230] # 启用cuda支持 cuda_enabled = 1 # 解除帧率限制 frl_enabled = 0 # 修复Q系列OpenGL异常问题 vgpu_type = "NVS" # 配置1GB显存的值 framebuffer = 939524096 framebuffer_reservation = 134217728 [vm.101] # 给101虚拟机设置4G显存 framebuffer = 3959422976 framebuffer_reservation = 335544320 [vm.102] # 给102虚拟机设置2G显存 framebuffer = 1946157056 framebuffer_reservation = 201326592Q5：我的显卡明明有6GB显存，用1GB显存的nvidia-230模型开了6台虚拟机，启动到第6台虚拟机发现无法启动是怎么回事？A5：总显存值剩余不足1GB，所以到第6台时就没法启动了，可以执行nvidia-smi查看剩余显存，通过改小第6台虚拟机显存大小再启动即可，或者把nvidia-230模型整体显存改小以下是些换算好的显存值，有需要可以替换到profile_override.toml文件，如需要更多值可以在这个网页查询：[button color="success" icon="glyphicon glyphicon-search" url="https://yangwenqing.com/files/pve/framebuffer.html" type=""]显存值计算[/button]# 设置384M显存 framebuffer = 318767104 framebuffer_reservation = 83886080 # 设置512M显存 framebuffer = 436207616 framebuffer_reservation = 100663296 # 设置896M显存 framebuffer = 822083584 framebuffer_reservation = 117440512 # 设置1GB显存 framebuffer = 939524096 framebuffer_reservation = 134217728 # 设置2GB显存 framebuffer = 1946157056 framebuffer_reservation = 201326592 # 设置3GB显存 framebuffer = 2952790016 framebuffer_reservation = 268435456 # 设置4GB显存 framebuffer = 3959422976 framebuffer_reservation = 335544320 # 设置5GB显存 framebuffer = 4966055936 framebuffer_reservation = 402653184 # 设置6GB显存 framebuffer = 5972688896 framebuffer_reservation = 469762048 # 设置8GB显存 framebuffer = 7985954816 framebuffer_reservation = 603979776 # 设置10GB显存 framebuffer = 9999220736 framebuffer_reservation = 738197504 # 设置12GB显存 framebuffer = 12012486656 framebuffer_reservation = 872415232 # 设置16GB显存 framebuffer = 16039018496 framebuffer_reservation = 1140850688 # 设置20GB显存 framebuffer = 20065550336 framebuffer_reservation = 1409286144 # 设置24GB显存 framebuffer = 24092082176 framebuffer_reservation = 1677721600 # 设置32GB显存 framebuffer = 32145145856 framebuffer_reservation = 2214592512 # 设置48GB显存 framebuffer = 48001712128 framebuffer_reservation = 3537895424Q6：为啥帧率限制在60帧，可以解除帧率限制？A6：可以的，vGPU调度器默认采用Best Effort（尽力而为）策略，A|Q系列会被限制在60帧，B系列会限制在45帧。如要解除帧率限制则改为Equal Share（均等份额）策略即可。只需要在PVE Shell中执行以下命令(这个是官方方法，如果你安装vGPU unlock直接修改配置文件frl_enabled = 0也是一样的效果)# 将 所有 vGPU 调度策略设置为均等份额调度器，并采用默认时间片长度 echo "options nvidia NVreg_RegistryDwords="RmPVMRL=0x01"" > /etc/modprobe.d/nvidia.conf # 更新initramfs update-initramfs -u -k all # 重启 reboot均等份额策略：物理 GPU 由其上所有运行的 vGPU 平均共享。当 vGPU 数量变化时，每个 vGPU 获得的份额会动态调整。如开1个VM则有100%性能，开2个VM则有50%性能，开3个VM则有33%性能，3个VM关掉一个又会变回50%性能。Q7：是否可以自定义帧率限制？A7：可以通过vGPU unlock配置覆盖方法，从而到达自定义帧率限制。该方法仅对虚拟机安装了GRID驱动生效，同时 frl_enabled = 0 时自定义帧率也不生效# 启用帧率限制器控制 frl_enabled = 1 # 自定义自己需要的帧率，如100帧 frl_config = 100如果你的虚拟机是仿冒了Quadro或者GeForce显卡的，安装这类非GRID的驱动如果要自定义帧率限制，则可以给虚拟机安装个微星小飞机RTSS显卡锁帧工具，就可以自定义锁定帧率了。比如30帧，100帧等等。[button color="success" icon="glyphicon glyphicon-save" url="https://share.feijipan.com/s/oiWkb9rT" type=""]RTSS显卡锁帧工具7.3.7-中文版[/button]不想用第三方工具也可以直接在NVIDIA控制面板做帧率控制【管理3D设置】→【后台应用程序最大帧速率】→【最大帧速率】Q8：可以固定分辨率大小？或者说是固定默认分辨率。A8：可以的，需要配合vGPU unlock覆盖配置文件，去修改profile_override.toml文件。如要固定最大/默认分辨率大小，写法如下:如分配最大为1个1920x1080分辨率的显示器# 显示器数量 num_displays = 1 # 显示器长宽 display_width = 1920 display_height = 1080 #显示器分辨率，max_pixels值=长宽的乘积 max_pixels = 2073600Q9：我已经用FASTAPI-DLS生成的授权文件给虚拟机NVIDIA GRID驱动成功授权了，这个有数量限制吗？A9：没有明确的授权数量上限，而是控制有效期为默认90天。客户端将在每13天的12点续订一次许可证，所以授权服务需要一直开着才能自动续期；如遇到授权失败，需要检查虚拟机的时间是否与授权服务器一致，必须一致才能取得授权；如安装18 19的vGPU驱动还需要将FASTAPI-DLS版本升级到2.X，同时替换Guest驱动补丁才能正常授权Q10：我不想用NVIDIA GRID驱动+授权驱动方式，我想用模拟Quadro专业卡或者GeForce消费卡安装这类型驱动。A10：可以的，可以使用“定制显卡型号信息”脚本，模拟好Quadro专业卡或者GeForce消费卡然后去安装对应的Quadro驱动或者GeForce驱动即可，这样驱动就不需要授权且更像一张物理显卡。注意这类方法只适用于Windows系统，Linux系统无法使用且无法使用CUDA计算，同时vGPU策略同样不适用于这类驱动需要注意：打Quadro/Geforce驱动不要高于550及以上的版本，这类版本对驱动授权加强了校验，即使模拟为专业卡/消费卡，一旦试用期到就会触发 license限制在15帧。如果你安装vGPU16 17 18 19的任意版本安装Quadro538或者Geforce537的驱动就可以了；如果你安装vGPU11的版本就安装441/453的Quadro驱动；如果你游戏需要550以上的驱动才能运行的又或者你需要使用CUDA计算，那你还是老老实实用GRID驱动+授权驱动方式；适用于vGPU 16 17 18 19的Win10 Win11的GeForce驱动[button color="success" icon="glyphicon glyphicon-save" url="https://www.nvidia.cn/drivers/details/212701/" type=""]537 GeForce驱动[/button]适用于vGPU 16 17 18 19的Win10 Win11的Quadro驱动[button color="success" icon="glyphicon glyphicon-save" url="https://www.nvidia.cn/drivers/details/224489/" type=""]538 Quadro驱动[/button]适用于vGPU11的Win10的Quadro驱动[button color="success" icon="glyphicon glyphicon-save" url="https://www.nvidia.cn/drivers/details/177160/" type=""]453 Quadro驱动[/button]适用于vGPU11的Win7 Win8的Quadro驱动[button color="success" icon="glyphicon glyphicon-save" url="https://www.nvidia.cn/drivers/details/155850/" type=""]441 Quadro驱动[/button]Q11：你的显卡驱动程序已过期，不符合运行《暗黑破坏神IV》的最低要求。请更新驱动程序并重试。当前版本：551.61，最低要求版本：552.74A11：游戏需要较新的驱动才能游戏，可以尝试直接在虚拟机安装552.74的驱动，如果安装了新的Guest驱动报43代码错误，则你还需要升级PVE宿主机的vGPU Host驱动。Q12：为啥我在PVE网页虚拟机控制台里打完显卡驱动后，就不能操作了呢？A12：请配置好远程桌面或者安装第三方远程工具，确认能通过远程连上虚拟机再来安装显卡驱动，如果你没配置就安装了显卡驱动，则需要先删除显卡设备，配置好远程再添加上显卡设备。因为你一旦安装好显卡驱动后系统就会呈现双显示器状态，这样就会导致PVE网页虚拟机控制台黑屏，或者是副屏状态，使得无法操作虚拟机。这里推荐把PVE控制台窗口显示给关闭，即在【虚拟机→硬件→显示】改成“无”，只保留vGPU一个显示器,通过远程操作虚拟机。如果你要在PVE控制台操作虚拟机，不想借助外部的远程工具，可以用ToDesk远程到虚拟机，把显示屏设置改为仅控制台窗口显示，这样PVE的Web显示就能操作了。（注意：PVE控制台的窗口是独立的虚拟显卡并不调用vGPU；UEFI安装的虚拟机修改PVE的Web窗口分辨率需要在虚拟机BIOS修改，SeaBIOS安装的虚拟机在系统显示设置进行修改分辨率）UEFI虚拟机修改PVE Web窗口分辨率操作步骤：虚拟机开机按esc键进入BIOS → Device Manager → OVMF Platform ConfigurationQ13：修改PVE的Perl模块让VNC显示窗口输出vGPU显卡画面A13：针对上面的Q12做了优化，将PVE的VNC显示窗口直接输出vGPU显卡画面，让PVE的Web VNC窗口也支持调用GPU资源,只需要在虚拟机添加vgpu显卡时勾选主GPU即可；(仅对vGPU 16 17 18和UEFI方式的虚拟机有效) 修改QemuServer.pm nano 命令修改 QemuServer.pm文件，可以使用 Ctrl+W，搜索关键字定位nano /usr/share/perl5/PVE/QemuServer.pm push @$devices, '-device', print_vga_device( $conf, $vga, $arch, $machine_version, $machine_type, undef, $qxlnum, $bridges);添加判断语句到 ; 号前if $vga->{type} ne 'gpu'修改后的效果 push @$devices, '-device', print_vga_device( $conf, $vga, $arch, $machine_version, $machine_type, undef, $qxlnum, $bridges) if $vga->{type} ne 'gpu'; 修改PCI.pm nano 命令修改 PCI.pm文件，可以使用Ctrl+W，搜索关键字定位nano /usr/share/perl5/PVE/QemuServer/PCI.pm添加以下代码 # If GPU is installed, read the frame from GPU if ($d->{'x-vga'}) { my $mdevtype = $d->{mdev} // ""; $mdevtype =~ s/^(.*?)-.*$/$1/; $devicestr .= ",x-igd-opregion=on" if $mdevtype eq "i915"; $devicestr .= ",display=on,ramfb=on,driver=vfio-pci-nohotplug"; $vga->{type} = 'gpu'; }修改后的效果 if ($j == 0) { $devicestr .= ',rombar=0' if defined($d->{rombar}) && !$d->{rombar}; $devicestr .= "$xvga"; $devicestr .= ",multifunction=on" if $multifunction; $devicestr .= ",romfile=/usr/share/kvm/$d->{romfile}" if $d->{romfile}; $devicestr .= ",bootindex=$bootorder->{$id}" if $bootorder->{$id}; for my $option (qw(vendor-id device-id sub-vendor-id sub-device-id)) { $devicestr .= ",x-pci-$option=$d->{$option}" if $d->{$option}; } # If GPU is installed, read the frame from GPU if ($d->{'x-vga'}) { my $mdevtype = $d->{mdev} // ""; $mdevtype =~ s/^(.*?)-.*$/$1/; $devicestr .= ",x-igd-opregion=on" if $mdevtype eq "i915"; $devicestr .= ",display=on,ramfb=on,driver=vfio-pci-nohotplug"; $vga->{type} = 'gpu'; } } 重启PVE服务 systemctl restart {pvedaemon,pveproxy} 设置虚拟机 将虚拟机的显卡 PCI 设备将主 GPU (x-vga) 勾选, 重启虚拟机即可如果虚拟机安装了显卡, 默认显示设备会被禁用, VNC 将从显卡读取画面，也就实现了在VNC调用GPU的效果。如果你需要SeaBIOS引导启动的虚拟机也支持，可以使用这个新方法[post cid="3253" /]Q14：我用的是CMP系列的30HX/40HX/50HX的挖矿卡，为啥一切都正常，虚拟机就是无法启动。A14：CMP系列的挖矿卡寄存器BAR1只有64MB，要启用vGPU实例默认需要256MB，需要将vGPU配置信息重写。将换算好的64M的bar1值，写入profile_override.toml文件1）使用命令lspci -v -s 硬件ID查看自己显卡bar1大小，如30hx：2）nano命令编辑nano /etc/vgpu_unlock/profile_override.toml# 配置nvidia-230重写文件 [profile.nvidia-230] # 将bar1_length参数调整为64MB bar1_length = 0x40Q15：我是官方支持的vGPU显卡，我可能不需要解锁，想关闭vGPU-unlock服务。A15：如需要禁用vGPU-unlock的解锁服务，执行以下命令，重启pve即可echo "unlock = false" > /etc/vgpu_unlock/config.tomlQ16：关闭ECC纠错A16：开启ECC的话，会占用一部分显存，比如8GB的P4(8192MB)开启ECC的话就只有7680MB，所以为了使用全部显存这里选择关闭ECC# 关闭ECC nvidia-smi -e 0 # 如果你要开启则 nvidia-smi -e 1[/scode][scode type="blue"]二、虚拟机部分Q1：虚拟机分配的内存给多少pve就占用多少，且在pve控制台不能操作关机和不显示IP是怎么回事？A1：VMware平台有VMwareTools，KVM平台有qemu-guest-agent。PVE下给虚拟机安装qemu-guest-agent可解决虚拟机无法关机和内存不同步IP不显示等问题。在PVE先给虚拟机开启qemu-guest-agent再安装qemu-guest-agentWindows虚拟机为例访问网站 Virtio驱动下载页 下载 Virtio 驱动，例如 virtio-win-0.1.262.iso，上传到虚拟机。加载镜像文件后安装virtio-win-guest-tools.exe，然后重启系统。概要这里能显示IP，说明虚拟机的qemu-qa服务正常了。可以正常开关机虚拟机。PVE这里的内存使用率，如果你是直通了PCI设备，PVE会强制要求直通时内存必须固定，给多少内存占用多少。具体实际使用请在虚拟机内部查看。Q2：我的虚拟机运行的多了，虚拟机变卡了怎么办？A2：既要马儿跑，又要马儿不吃草的道理，机器做了虚拟化，CPU，硬盘，网卡等硬件都得依靠处理器去协调，所以结合自己硬件合理分配资源；1）CPU：玩竞技类/模拟类/策略类游戏请选用单核性能强的处理器；3A大型游戏请给多一点线程和内存；2）硬盘：硬盘IO读写越快虚拟机越流畅，不要把所有虚拟机都跑在一个硬盘那样IO读写会爆炸，推荐4-5个虚拟机一个硬盘，强烈推荐用nvme硬盘,10块机械硬盘组的raid0都不如一块nvme来的实际；3) 网卡：3-5个虚拟机千兆物理网卡足矣，其他的建议升级万兆网卡；4) GPU：当把帧率限制解除后，GPU分配给1台虚拟机时那么这台虚拟机能获得GPU100%性能，分配2台则50%性能，3台则33.3%性能；要想稳定多开推荐将帧率锁在60帧。Q3：我想在机器上开10个《英雄联盟》需要怎样的配置？A3：《英雄联盟》的硬件配置要求相对较低，以下是官方推荐的 60 FPS配置：操作系统：Windows 10/11（64位）处理器：Intel Core i5-3300 / AMD Ryzen 3 1200内存：8GB显卡：NVIDIA GeForce GTX 960 / AMD Radeon R9 280 / Intel UHD 630存储空间：40GB 可用空间分辨率：1920x1080那么创建一台Win虚拟机配置如下：操作系统：Windows10 x64vCPU：分配4个线程vRAM：分配8GB内存vROM：分配100GB存储，系统+游戏够用了vGPU：分配1GB显存，这游戏不怎么吃GPU那么10开硬件选配如下：处理器：E5-2690 v3/E5-2690 v4 (20核心40线程)内存：96G显卡：GeForce GTX 1080 Ti 11G / Tesla P100 16G硬盘：4张256G或者2张512GB Nvme高速盘；每张放4-5个虚拟机网卡：万兆网卡 英特尔X520/X540Q4：虚拟机能不能像LXC容器一样在外面配置IP，我不想登录到虚拟机里面手动修改。A4：支持的，可以在虚拟机安装一个cloudinit初始化软件，这样我们就可以在外面实现重置用户名，用户密码，IP地址等信息[button color="success" icon="glyphicon glyphicon-save" url="https://github.com/cloudbase/cloudbase-init" type=""]cloudinit软件[/button]1）将下载好的CloudbaseInitSetup_1_1_6_x64.msi文件进行安装（Win虚拟机为例）2）安装好后将路径下的C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf的文件内容全部删掉替换为以下的：该配置文件只做修改IP动作，其他的重置用户名，用户密码等不生效；[DEFAULT] config_drive_raw_hhd=true config_drive_cdrom=true config_drive_vfat=true bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\ mtu_use_dhcp_config=true ntp_use_dhcp_config=true plugins=cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin verbose=true debug=true log_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\ log_file=cloudbase-init.log local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\ check_latest_version=false3）关机虚拟机，给虚拟机添加一个Cloudinit设备4）最后就是把虚拟机开机，然后把IP和DNS配置上去，点击重生成镜像，等待180秒。IP就能自动触发修改了。Q5：虚拟机是使用Seabios还是UEFI，哪个启动更好？A5：如果需要直通硬件请选用UEFI启动，大部分硬件只支持UEFI直通；Win10 Win11推荐UEFI，兼容性好且高效，在去虚拟化方面也更像是一台物理机带有物理机特征；除非你需要运行一些陈年老旧的软件/驱动或者系统才使用SeaBIOS引导启动Q6：链接克隆的虚拟机使用一段时间后出现蓝屏A6：引起这类问题大概率是母机做了更新动作（如设置，安装软件，驱动等等）一般母机做了链接克隆后，如果没有啥必要请不要开机也不要在里面正常使用请保持关机的状态。如果母机的系统盘做了大量的修改和设置或者安装了些软件及驱动到系统盘，是有几率影响到子机的，导致子机蓝屏无法启动对于这类问题也很好解决，只需要做好2个母机，一个母机负责链接克隆系统盘，克隆后永远不要开机母机，如果要改动系统设置直接去改动子机系统就行；另一个母机负责链接克隆同步盘（游戏盘），这个母机你想开机就开机，如游戏需要更新，则在母机更新好，执行同步脚本下发到子机就行。具体操作见下面：1）先做好一个名字为MJ-OS的母机，把游戏环境都安装好，然后选中母机右键克隆一个名为MJ-Game母机2出来。步骤：选中母机1 → 克隆 → 等待克隆完成2）MJ-Game母机2克隆好后，我们可以删除母机1的ide1的游戏盘腾出点硬盘空间，因为母机1只需要用到系统盘。步骤：关机虚拟机 → 选中ide1硬盘 → 分离 → 选中刚刚分离的未分配硬盘 → 移除3）之后就可以使用链接克隆脚本用母机1克隆子机出来，比如我要克隆4台子机出来102-105:步骤：打开PVE Shell → 选择克隆脚本4）再然后使用同步母机数据盘脚本用母机2同步游戏盘出来给子机即可。后续游戏更新再次用母机2进行下发到子机就行。步骤：打开PVE Shell → 选择同步脚本5）注意：如果母机是UEFI引导的虚拟机，克隆出来的子虚拟机最好单独处理一下efi引导盘（删掉efi引导盘重新添加个新的efi引导盘），不然子机可能会黑屏开不了机。如下图：删掉efi引导盘重新添加个新的efi引导盘添加efi引导盘时记得把预注册密钥给取消勾选，勾选的话就会开启安全启动，一些没签名的驱动或者软件可能不能正常工作。[/scode][scode type="yellow"]三、去虚拟化部分Q1：去除虚拟化后能玩哪类游戏？有封号风险吗？A1：理论可以过市面上90%的游戏，一些带有高级反作弊检测的端游如腾讯ACE，战眼BattlEye，蓝熊EAC的自行测试了，这类游戏既检查虚拟机特征和检查没有物理机特征所以即使做了去虚拟化也可能依旧进不了游戏；封号因素很多，系统环境，科技辅助，IP关联等等都有可能触发运营商封号机制，自行承担风险。Q2：NCSOFT的永恒之塔2检测PVE虚拟鼠标驱动，导致进不了游戏咋办？A2：方法很简单，只需要把鼠标驱动换成vmware的鼠标驱动即可，安装时提示不安全弹窗记得点允许安装即可。重启虚拟机后就能正常进游戏了[button color="success" icon="glyphicon glyphicon-save" url="https://share.feijipan.com/s/HgWBYhXU" type=""]Vmware鼠标驱动[/button]同时游戏策划特别对Todesk|向日葵|UU远程|连连控|Rustdesk|Moonlight|同步专家|RDP远程桌面|这类远程虚拟键鼠做了禁用，导致游戏无法正常点击。可见对游戏工作室是用心良苦啊；目前可以通过给虚拟机直通个键盘和鼠标就能用上方的远程工具配合物理键鼠正常操作游戏了这样是不是有点费键盘鼠标？一个虚拟机得配一套键盘鼠标。而且我PVE在机房，主控电脑不在机房键盘鼠标根本不够长 ::aru:speechless:: 确实如此！这种场景也好解决。在主控电脑安装个USB设备共享工具（服务端）就好了，主控电脑额外配一套键鼠用于共享给虚拟机使用。[button color="success" icon="glyphicon glyphicon-save" url="https://www.52pojie.cn/thread-1439589-1-1.html" type=""] USB over Network v6.0.4.3 中文版(USB设备共享工具)[/button]虚拟机也安装个USB设备共享工具（客户端），然后接入主控机服务器IP就能看到共享的鼠标键盘了。点击连接就能正常使用Q3：外网IP已经做了一机一IP，内网IP有没办法做隔离？想让虚拟机内网之间隔离不能互相通信，防止游戏因局域网关联扫号。A3：可以的，最直接办法就是将虚拟机的子网掩码设置为255.255.255.255。这样网络中就只有一个主机（即自己），无法与其他虚拟机直接通信。同时这样就无法直接使用局域网这类远程工具了，如果必须要使用局域网远程的话还需要将虚拟机IP在路由器做端口映射，通过网关IP+端口进行连接；最简单还是用走外网的远程软件比如Todesk，向日葵，UU远程等等还有一种办法就是在PVE上建立个NAT网络，让虚拟机都跑在nat网络下并做端口隔离。有兴趣可以看看这个[post cid="2290" /][/scode]学习|致谢NVIDIA Virtual GPU Software v19.0vgpu-unlock-rsFastAPI-DLSNVLTSpatched-nvidia-grid-driverNVIDIA Local Trusted Storepve-anti-detection
为啥浏览器登录PVE管理后台，没2分钟就要我重新验证登录？
为啥浏览器登录PVE管理后台，没2分钟就要我重新验证登录？这是由于PVE时间不对导致的，当您登录时，PVE会生成一个有时效性的令牌（通常默认是2小时）。这个令牌的有效期计算严重依赖于节点的系统时间。如果PVE主机的系统时间比实际时间慢或者快了很多（例如，慢|快了1小时），那么它生成的令牌在生成的那一刻起，对于其他时间正确的客户端（如你的浏览器）来说，可能已经“过期”了，或者很快就会过期。这就导致了“刚登录就提示需要重新验证”的现象。修正BIOS时间：这是最根本的一步。所有后续操作都建立在系统时间正确的前提下。请进入设备的BIOS设置界面，确保硬件时钟（Hardware Clock）的时间、日期和时区设置正确。删除集群状态锁文件：删除高可用相关的状态文件。时间错误可能导致这些文件内部记录的时间戳异常，删除它们可以清除错误状态。同时删除集群的锁文件，集群通过锁机制来管理多节点对共享配置的并发访问。时间混乱会破坏锁机制，导致集群服务出现异常。删除这些锁文件可以解除错误的锁定状态。rm -rf /etc/pve/ha/ rm -rf /etc/pve/priv/lock/注意：/etc/pve/ 是一个由 pve-cluster 服务维护的虚拟文件系统，它实际是集群配置的实时视图。在这些路径下执行删除操作是安全的，因为必要的文件会在服务重启后由集群重新生成。重启集群服务：systemctl restart pve-cluster重新读取认证信息stat /etc/pve/authkey.pub /etc/pve/authkey.pub.old touch /etc/pve/authkey.pub touch /etc/pve/authkey.pub.old重启Proxmox VE的集群服务。服务重启后，它会基于当前正确的系统时间，重新初始化并生成步骤2中删除的那些状态文件和锁文件，从而使集群回到一个健康的状态。
PVE直通硬件后，为啥内存不能动态调整?
PVE直通硬件后，为啥内存不能动态调整?你是不是在 Proxmox VE（PVE） 里给虚拟机直通显卡、网卡后，发现内存不能自动调整了？别慌！ 这是正常现象，今天用人话解释原因，并教你正确设置！直通硬件后，内存必须固定当你把显卡、网卡、硬盘控制器 等硬件直通给虚拟机时：1）硬件需要直接访问内存（DMA 技术），不能中途变来变去。2）动态调整内存（Ballooning） 会导致硬件找不到内存地址，可能崩溃或出错！3）所以 PVE 强制要求直通时内存必须固定！当然像ESXI及其他虚拟机平台应该都是如此。正确设置方法（超简单）打开 PVE 网页管理界面，找到你的虚拟机。点击 “硬件” → “内存” → 取消勾选 “Ballooning”。在 “内存” 输入框填写固定值（比如 8192 = 8GB）。保存！ 搞定！注意事项1）直通硬件越多，内存越要固定。（比如直通显卡+网卡，建议预留足够内存）2）如果内存不够用？ 只能关闭虚拟机，手动调大内存再启动。3）PVE外部显示的内存使用率仅供参考，具体实际使用请在虚拟机里查看。4）动态内存（Ballooning）只适合普通非直通的虚拟机。同时要想PVE外部正常显示CPU使用率、内存使用率、磁盘大小、IP地址，正常开关机。你还需要给虚拟机安装QEMU Guest Agent驱动，然后再给虚拟机启用QEMU Guest Agent。做完这2步虚拟机的概要信息和正常开关机就都正常了。总结✅ 直通硬件 = 内存固定，这是技术限制，不是 BUG！✅ 关闭 Ballooning + 手动设置内存 就能解决！✅ 内存不够？ 提前多分点，避免虚拟机卡死！
在PVE9.0下使用NVIDIA vGPU19.0显卡虚拟化拆分技术--应用于Windows/Ubuntu系统
在PVE9.0下使用NVIDIA vGPU19.0显卡虚拟化拆分技术--应用于Windows/Ubuntu系统记录6.14内核的PVE9.0.3版本配置NVIDIA vGPU19.0版本的显卡虚拟化拆分，NVIDIA vGPU是一项由 NVIDIA 开发的虚拟化技术。它允许单个物理的 NVIDIA GPU（显卡）被多个虚拟机（VM）同时、直接地共享使用。注意它不是一个免费的项目，需要购买软件许可vGPU License才能完整的使用vGPU。本文涉及的vGPU功能基于开源社区方案实现，仅限个人测试、学习及非商业用途，禁止用于商业生产环境。硬件配置演示的显卡依旧是哥布林救出来的“女生一手自用P106-100”显卡配置型号系统PVE 9.0.3内核Linux pve9 6.14.8-2-pvepve-qemu-kvm10.0.2-4CPUIntel Core CC150 @ 3.5GHz 8核16线程显卡七彩虹 P106-100 6144 MBvGPU驱动580.65.05显卡支不支持vGPU虚拟化，可以点开下边列表进行查阅。[collapse status="false" title="vGPU_Unlock支持的显卡列表 点我展开"][scode type="blue"]以下 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型号21c4TU116 GeForce GTX 1660 SUPERQuadro RTX 600021d1TU116BM GeForce GTX 1660 Ti MobileQuadro RTX 600021c2TU116Quadro RTX 60002182TU116 GeForce GTX 1660 TiQuadro RTX 60002183TU116Quadro RTX 60002184TU116 GeForce GTX 1660Quadro RTX 60002187TU116 GeForce GTX 1650 SUPERQuadro RTX 60002188TU116 GeForce GTX 1650Quadro RTX 60002191TU116M GeForce GTX 1660 Ti MobileQuadro RTX 60002192TU116M GeForce GTX 1650 Ti MobileQuadro RTX 600021aeTU116GLQuadro RTX 600021bfTU116GLQuadro RTX 60002189TU116 CMP 30HXQuadro RTX 60001fbfTU117GLQuadro RTX 60001fbbTU117GLM Quadro T500 MobileQuadro RTX 60001fd9TU117BM GeForce GTX 1650 Mobile RefreshQuadro RTX 60001ff9TU117GLM Quadro T1000 MobileQuadro RTX 60001fddTU117BM GeForce GTX 1650 Mobile RefreshQuadro RTX 60001f96TU117M GeForce GTX 1650 Mobile / Max-QQuadro RTX 60001f99TU117MQuadro RTX 60001faeTU117GLQuadro RTX 60001fb8TU117GLM Quadro T2000 Mobile / Max-QQuadro RTX 60001fb9TU117GLM Quadro T1000 MobileQuadro RTX 60001f97TU117M GeForce MX450Quadro RTX 60001f98TU117M GeForce MX450Quadro RTX 60001f9cTU117M GeForce MX450Quadro RTX 60001f9dTU117M GeForce GTX 1650 Mobile / Max-QQuadro RTX 60001fb0TU117GLM Quadro T1000 MobileQuadro RTX 60001fb1TU117GL T600Quadro RTX 60001fb2TU117GLM Quadro T400 MobileQuadro RTX 60001fbaTU117GLM T600 MobileQuadro RTX 60001f42TU106 GeForce RTX 2060 SUPERQuadro RTX 60001f47TU106 GeForce RTX 2060 SUPERQuadro RTX 60001f50TU106BM GeForce RTX 2070 Mobile / Max-QQuadro RTX 60001f51TU106BM GeForce RTX 2060 MobileQuadro RTX 60001f54TU106BM GeForce RTX 2070 MobileQuadro RTX 60001f55TU106BM GeForce RTX 2060 MobileQuadro RTX 60001f81TU117Quadro RTX 60001f82TU117 GeForce GTX 1650Quadro RTX 60001f91TU117M GeForce GTX 1650 Mobile / Max-QQuadro RTX 60001f92TU117M GeForce GTX 1650 MobileQuadro RTX 60001f94TU117M GeForce GTX 1650 MobileQuadro RTX 60001f95TU117M GeForce GTX 1650 Ti MobileQuadro RTX 60001f76TU106GLM Quadro RTX 3000 Mobile RefreshQuadro RTX 60001f07TU106 GeForce RTX 2070 Rev. AQuadro RTX 60001f08TU106 GeForce RTX 2060 Rev. AQuadro RTX 60001f09TU106 GeForce GTX 1660 SUPERQuadro RTX 60001f0aTU106 GeForce GTX 1650Quadro RTX 60001f10TU106M GeForce RTX 2070 MobileQuadro RTX 60001f11TU106M GeForce RTX 2060 MobileQuadro RTX 60001f12TU106M GeForce RTX 2060 Max-QQuadro RTX 60001f14TU106M GeForce RTX 2070 Mobile / Max-Q RefreshQuadro RTX 60001f15TU106M GeForce RTX 2060 MobileQuadro RTX 60001f2eTU106MQuadro RTX 60001f36TU106GLM Quadro RTX 3000 Mobile / Max-QQuadro RTX 60001f0bTU106 CMP 40HXQuadro RTX 60001eb5TU104GLM Quadro RTX 5000 Mobile / Max-QQuadro RTX 60001eb6TU104GLM Quadro RTX 4000 Mobile / Max-QQuadro RTX 60001eb8TU104GL Tesla T4Quadro RTX 60001eb9TU104GLQuadro RTX 60001ebeTU104GLQuadro RTX 60001ec2TU104 GeForce RTX 2070 SUPERQuadro RTX 60001ec7TU104 GeForce RTX 2070 SUPERQuadro RTX 60001ed0TU104BM GeForce RTX 2080 MobileQuadro RTX 60001ed1TU104BM GeForce RTX 2070 SUPER Mobile / Max-QQuadro RTX 60001ed3TU104BM GeForce RTX 2080 SUPER Mobile / Max-QQuadro RTX 60001f02TU106 GeForce RTX 2070Quadro RTX 60001f04TU106Quadro RTX 60001f06TU106 GeForce RTX 2060 SUPERQuadro RTX 60001ef5TU104GLM Quadro RTX 5000 Mobile RefreshQuadro RTX 60001e81TU104 GeForce RTX 2080 SUPERQuadro RTX 60001e82TU104 GeForce RTX 2080Quadro RTX 60001e84TU104 GeForce RTX 2070 SUPERQuadro RTX 60001e87TU104 GeForce RTX 2080 Rev. AQuadro RTX 60001e89TU104 GeForce RTX 2060Quadro RTX 60001e90TU104M GeForce RTX 2080 MobileQuadro RTX 60001e91TU104M GeForce RTX 2070 SUPER Mobile / Max-QQuadro RTX 60001e93TU104M GeForce RTX 2080 SUPER Mobile / Max-QQuadro RTX 60001eabTU104MQuadro RTX 60001eaeTU104MQuadro RTX 60001eb0TU104GL Quadro RTX 5000Quadro RTX 60001eb1TU104GL Quadro RTX 4000Quadro RTX 60001eb4TU104GL T4GQuadro RTX 60001e04TU102 GeForce RTX 2080 TiQuadro RTX 60001e07TU102 GeForce RTX 2080 Ti Rev. AQuadro RTX 60001e2dTU102 GeForce RTX 2080 Ti Engineering SampleQuadro RTX 60001e2eTU102 GeForce RTX 2080 Ti 12GB Engineering SampleQuadro RTX 60001e30TU102GL Quadro RTX 6000/8000Quadro RTX 60001e36TU102GL Quadro RTX 6000Quadro RTX 60001e37TU102GL GRID RTX T10-4/T10-8/T10-16Quadro RTX 60001e38TU102GLQuadro RTX 60001e3cTU102GLQuadro RTX 60001e3dTU102GLQuadro RTX 60001e3eTU102GLQuadro RTX 60001e78TU102GL Quadro RTX 6000/8000Quadro RTX 60001e09TU102 CMP 50HXQuadro RTX 60001dbaGV100GL Quadro GV100Tesla V100 32GB PCIE1e02TU102 TITAN RTXQuadro RTX 60001cfaGP107GL Quadro P2000Tesla P401cfbGP107GL Quadro P1000Tesla P401d01GP108 GeForce GT 1030Tesla P401d10GP108M GeForce MX150Tesla P401d11GP108M GeForce MX230Tesla P401d12GP108M GeForce MX150Tesla P401d13GP108M GeForce MX250Tesla P401d16GP108M GeForce MX330Tesla P401d33GP108GLM Quadro P500 MobileTesla P401d34GP108GLM Quadro P520Tesla P401d52GP108BM GeForce MX250Tesla P401d56GP108BM GeForce MX330Tesla P401d81GV100 TITAN VTesla V100 32GB PCIE1cb6GP107GL Quadro P620Tesla P401cbaGP107GLM Quadro P2000 MobileTesla P401cbbGP107GLM Quadro P1000 MobileTesla P401cbcGP107GLM Quadro P600 MobileTesla P401cbdGP107GLM Quadro P620Tesla P401cccGP107BM GeForce GTX 1050 Ti MobileTesla P401ccdGP107BM GeForce GTX 1050 MobileTesla P401ca8GP107GLTesla P401caaGP107GLTesla P401cb1GP107GL Quadro P1000Tesla P401cb2GP107GL Quadro P600Tesla P401cb3GP107GL Quadro P400Tesla P401c70GP106GLTesla P401c81GP107 GeForce GTX 1050Tesla P401c82GP107 GeForce GTX 1050 TiTesla P401c83GP107 GeForce GTX 1050 3GBTesla P401c8cGP107M GeForce GTX 1050 Ti MobileTesla P401c8dGP107M GeForce GTX 1050 MobileTesla P401c8eGP107MTesla P401c8fGP107M GeForce GTX 1050 Ti Max-QTesla P401c90GP107M GeForce MX150Tesla P401c91GP107M GeForce GTX 1050 3 GB Max-QTesla P401c92GP107M GeForce GTX 1050 MobileTesla P401c94GP107M GeForce MX350Tesla P401c96GP107M GeForce MX350Tesla P401ca7GP107GLTesla P401c36GP106 P106MTesla P401c07GP106 P106-100Tesla P401c09GP106 P106-090Tesla P401c20GP106M GeForce GTX 1060 MobileTesla P401c21GP106M GeForce GTX 1050 Ti MobileTesla P401c22GP106M GeForce GTX 1050 MobileTesla P401c23GP106M GeForce GTX 1060 Mobile Rev. 2Tesla P401c2dGP106MTesla P401c30GP106GL Quadro P2000Tesla P401c31GP106GL Quadro P2200Tesla P401c35GP106M Quadro P2000 MobileTesla P401c60GP106BM GeForce GTX 1060 Mobile 6GBTesla P401c61GP106BM GeForce GTX 1050 Ti MobileTesla P401c62GP106BM GeForce GTX 1050 MobileTesla P401bb8GP104GLM Quadro P3000 MobileTesla P401bb9GP104GLM Quadro P4200 MobileTesla P401bbbGP104GLM Quadro P3200 MobileTesla P401bc7GP104 P104-101Tesla P401be0GP104BM GeForce GTX 1080 MobileTesla P401be1GP104BM GeForce GTX 1070 MobileTesla P401c00GP106Tesla P401c01GP106Tesla P401c02GP106 GeForce GTX 1060 3GBTesla P401c03GP106 GeForce GTX 1060 6GBTesla P401c04GP106 GeForce GTX 1060 5GBTesla P401c06GP106 GeForce GTX 1060 6GB Rev. 2Tesla P401b87GP104 P104-100Tesla P401ba0GP104M GeForce GTX 1080 MobileTesla P401ba1GP104M GeForce GTX 1070 MobileTesla P401ba2GP104M GeForce GTX 1070 MobileTesla P401ba9GP104MTesla P401baaGP104MTesla P401badGP104 GeForce GTX 1070 Engineering SampleTesla P401bb0GP104GL Quadro P5000Tesla P401bb1GP104GL Quadro P4000Tesla P401bb3GP104GL Tesla P4Tesla P401bb4GP104GL Tesla P6Tesla P401bb5GP104GLM Quadro P5200 MobileTesla P401bb6GP104GLM Quadro P5000 MobileTesla P401bb7GP104GLM Quadro P4000 MobileTesla P401b06GP102 GeForce GTX 1080 TiTesla P401b07GP102 P102-100Tesla P401b30GP102GL Quadro P6000Tesla P401b38GP102GL Tesla P40Tesla P401b70GP102GLTesla P401b78GP102GLTesla P401b80GP104 GeForce GTX 1080Tesla P401b81GP104 GeForce GTX 1070Tesla P401b82GP104 GeForce GTX 1070 TiTesla P401b83GP104 GeForce GTX 1060 6GBTesla P401b84GP104 GeForce GTX 1060 3GBTesla P401b39GP102GL Tesla P10Tesla P401b00GP102 TITAN XTesla P401b01GP102 GeForce GTX 1080 Ti 10GBTesla P401b02GP102 TITAN XpTesla P401b04GP102Tesla P40179cGM107 GeForce 940MXTesla M1017c2GM200 GeForce GTX TITAN XTesla M6017c8GM200 GeForce GTX 980 TiTesla M6017f0GM200GL Quadro M6000Tesla M6017f1GM200GL Quadro M6000 24GBTesla M6017fdGM200GL Tesla M40Tesla M601617GM204M GeForce GTX 980MTesla M601618GM204M GeForce GTX 970MTesla M601619GM204M GeForce GTX 965MTesla M60161aGM204M GeForce GTX 980 MobileTesla M601667GM204M GeForce GTX 965MTesla M601725GP100Tesla P40172eGP100Tesla P40172fGP100Tesla P40174dGM108M GeForce MX130Tesla M10174eGM108M GeForce MX110Tesla M101789GM107GL GRID M3-3020Tesla M101402GM206 GeForce GTX 950Tesla M601406GM206 GeForce GTX 960 OEMTesla M601407GM206 GeForce GTX 750 v2Tesla M601427GM206M GeForce GTX 965MTesla M601430GM206GL Quadro M2000Tesla M601431GM206GL Tesla M4Tesla M601436GM206GLM Quadro M2200 MobileTesla M6015f0GP100GL Quadro GP100Tesla P4015f1GP100GLTesla P401404GM206 GeForce GTX 960 FAKETesla M6013d8GM204M GeForce GTX 970MTesla M6013d9GM204M GeForce GTX 965MTesla M6013daGM204M GeForce GTX 980 MobileTesla M6013e7GM204GL GeForce GTX 980 Engineering SampleTesla M6013f0GM204GL Quadro M5000Tesla M6013f1GM204GL Quadro M4000Tesla M6013f2GM204GL Tesla M60Tesla M6013f3GM204GL Tesla M6Tesla M6013f8GM204GLM Quadro M5000M / M5000 SETesla M6013f9GM204GLM Quadro M4000MTesla M6013faGM204GLM Quadro M3000MTesla M6013fbGM204GLM Quadro M5500Tesla M601401GM206 GeForce GTX 960Tesla M6013b3GM107GLM Quadro K2200MTesla M1013b4GM107GLM Quadro M620 MobileTesla M1013b6GM107GLM Quadro M1200 MobileTesla M1013b9GM107GL NVS 810Tesla M1013baGM107GL Quadro K2200Tesla M1013bbGM107GL Quadro K620Tesla M1013bcGM107GL Quadro K1200Tesla M1013bdGM107GL Tesla M10Tesla M1013c0GM204 GeForce GTX 980Tesla M6013c1GM204Tesla M6013c2GM204 GeForce GTX 970Tesla M6013c3GM204Tesla M6013d7GM204M GeForce GTX 980MTesla M601389GM107GL GRID M30Tesla M101390GM107M GeForce 845MTesla M101391GM107M GeForce GTX 850MTesla M101392GM107M GeForce GTX 860MTesla M101393GM107M GeForce 840MTesla M101398GM107M GeForce 845MTesla M101399GM107M GeForce 945MTesla M10139aGM107M GeForce GTX 950MTesla M10139bGM107M GeForce GTX 960MTesla M10139cGM107M GeForce 940MTesla M10139dGM107M GeForce GTX 750 TiTesla M1013b0GM107GLM Quadro M2000MTesla M1013b1GM107GLM Quadro M1000MTesla M1013b2GM107GLM Quadro M600MTesla M101347GM108M GeForce 940MTesla M101348GM108M GeForce 945M / 945ATesla M101349GM108M GeForce 930MTesla M10134bGM108M GeForce 940MXTesla M10134dGM108M GeForce 940MXTesla M10134eGM108M GeForce 930MXTesla M10134fGM108M GeForce 920MXTesla M10137aGM108GLM Quadro K620M / Quadro M500MTesla M10137bGM108GLM Quadro M520 MobileTesla M10137dGM108M GeForce 940ATesla M101380GM107 GeForce GTX 750 TiTesla M101381GM107 GeForce GTX 750Tesla M101382GM107 GeForce GTX 745Tesla M101340GM108M GeForce 830MTesla M101341GM108M GeForce 840MTesla M101344GM108M GeForce 845MTesla M101346GM108M GeForce 930MTesla M10[/scode][/collapse]资源下载百度网盘:https://pan.baidu.com/s/1rqgxvmFku6rG2Ppjq4g-cg?pwd=knrj资源说明1.PVE镜像proxmox-ve_9.0-1.iso2.写盘工具balenaEtcher-Portable-1.7.9.exe3.vGPU驱动NVIDIA vGPU 19.04.FASTAPI-DLSFASTAPI-DLS授权服务LXC还原包5.系统镜像虚拟机的系统镜像（Win11/Ubuntu/飞牛fnOS）BIOS设置[scode type="green"]提前在BIOS开启以下设置开启VT-d --必须开启，英特尔叫vt-d，AMD叫iommu开启SRIOV --如有开启Above 4G --如有关闭安全启动 --在security菜单 secure boot 改disabled[/scode]PVE的安装和基本设置PVE烧录U盘提前把balenaEtcher烧录工具和PVE安装镜像下载好，这里我用的是proxmox-ve_9.0-1.iso版本，用balenaEtcher烧录工具将镜像写入U盘或者移动硬盘，然后插到主机进行PVE的安装。安装PVE系统将U盘或者移动硬盘接入主机引导启动到PVE安装界面，采用第一种图形化界面进行安装。PVE系统我这边给了28G，20G作为PVE系统盘用于存些ISO镜像啥的，不需要太大。按自己需要设置。另外8G作为SWAP虚拟内存用。PVE图形界面手动分区安装示意图：PVE基本设置使用浏览器登录到PVE后台，需要对PVE进行硬盘挂载和一些基本设置，在PVE Shell 中执行。（以下设置将会大量使用nano文本编辑命令，至于怎么使用nano命令点我去学习）删除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才算完成。把剩余的空间挂载为PVE数据存储池最后就是把剩余的硬盘空间用作PVE数据存储池，需要做下硬盘分区。（这里要根据自己实际硬盘ID操作，我这里的是sda,用M.2硬盘的可能是nvme0n1不要盲目照抄）@零帧起手硬盘分区好后，可以到PVE控制台看到硬盘分区情况接着就是将该分区挂载为PVE数据存储池，把虚拟机安装到该存储池下就行。PVE换源更换国内源主要是为了解决网络访问问题、提升下载速度、确保系统更新的可靠性，同时避免付费订阅的要求。更换系统源中科大源# 替换 Debian 官方源和安全源为中科大源 sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources更换企业源中科大源# 关闭官方订阅企业源 sed -i '/Types:/a Enabled: false' /etc/apt/sources.list.d/pve-enterprise.sources # 新增无订阅企业源为中科大源 cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve Suites: trixie Components: pve-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF更换Ceph源中科大源# 匹配当前Ceph版本和系统版本并更换为社区无订阅的中科大源 if [ -f /etc/apt/sources.list.d/ceph.sources ]; then CEPH_CODENAME=`ceph -v | grep ceph | awk '{print $(NF-1)}'` source /etc/os-release cat > /etc/apt/sources.list.d/ceph.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME Suites: $VERSION_CODENAME Components: no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF fi执行更新# 更新软件包 apt updateLXC容器更源中科大源# 备份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.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm # 重启服务后生效 systemctl restart pvedaemon.servicePVE常用优化脚本# 一键给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开启硬件直通从Proxmox VE 8.0 开始，系统在检测到CPU和芯片组支持 IOMMU 的情况下，会自动启用内核参数，用户通常无需手动在 GRUB 中添加 intel_iommu=on 参数。只需要在主板BIOS开启IO虚拟化功能就能正常直通了。英特尔为vt-d，AMD平台是iommu。加载内核模块加载内核模块，使用nano命令加入以下信息nano /etc/modulesvfio vfio_iommu_type1 vfio_pci vfio_virqfd屏蔽设备添加设备黑名单,编辑pve-blacklist.confnano /etc/modprobe.d/pve-blacklist.conf# 屏蔽NVIDIA显卡 blacklist nouveau blacklist nvidia blacklist nvidiafb # 允许不安全的设备中断 options vfio_iommu_type1 allow_unsafe_interrupts=1执行更新initramfs# 更新initramfs update-initramfs -u -k all配置 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安装 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[scode type="yellow"]其他补充提示：如要升级|降级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[/scode]重启完成后查看相关服务状态是否正常# 查看相关服务状态 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=16Ampere架构显卡开启vGPUAmpere架构的显卡在PVE安装好vGPU HOST驱动后，还需要开启VF才能使用vGPU，开启VF前你需要在BIOS打开SR-IOV功能。（用的不是Ampere架构以上的显卡请跳过这部分@零帧起手）在PVE Shell 新建一个Systemd自启动服务，开机自启动VFcat > /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[scode type="yellow"]像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[/scode]创建vGPU资源映射如果机器的PCI设备列表有很多，或者设备里存在多张显卡又或者在用Ampere架构及以上的显卡采用的是SR-IOV拆分，会多出很多个VF设备。直接从原始设备中添加vGPU的时候很难查找。这时就可以来创建PCI设备的资源映射，这样在添加vGPU设备时能更快的选择到我们vGPU设备。A5000采用SR-IOV拆分，会多出很多个VF设备，只需要全部勾选添加PCI设备时，在映射的设备列表就能找到我们需要的vGPU设备。创建虚拟机（Win11）把Win11镜像和virtio-win-0.1.271.iso驱动上传到PVE。然后在PVE上创建一个Win11虚拟机（24h2）实例注意：vGPU19.0版本需要系统版本在22h2及以上才能正常使用，低于22h2的系统版本是没法安装驱动的。安装虚拟机（Win11）启动虚拟机，开始安装Win11配置虚拟机（Win11）安装virtio驱动安装好Win11后，把Virtio驱动给打上，进到CD光驱盘运行virtio-win-guest-tools直接下一步直至安装完成启用QemuGA服务安装好后，PVE的虚拟机概要处上可以看到ip信息，如果看不到ip信息，请在关闭虚拟机，在虚拟机的选项中，启用QEMU Guest Agent开启RDP远程桌面在系统设置开启RDP远程桌面允许RDP显卡加速RDP 支持无显卡运行，在远程桌面的时候默认是不调用显卡，可以开启它，让它支持显卡加速。首先打开虚拟机上的组策略gpedit.msc，依次找到计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境在右边选择将硬件图形适配器应用于所有远程桌面服务会话 右键编辑，选择已启用，确定保存。解除RDP 30帧限制RDP 默认的帧率限制在30帧，可以设置为60帧传输。在注册表打开该路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations在空白处右键->新建->DWORD（32位）值，命名为DWMFRAMEINTERVAL，双击刚添加的这一项，基数选择为十进制，数值数据填写15，确定保存重启生效。关闭防火墙关闭Windows防火墙,或者放行3389远程桌面端口关闭睡眠/屏幕在系统设置中，把屏幕超时改为从不配置vGPU（Guest驱动）添加vGPU设备PCI设备：选nvidia显卡（勾选ROM-Bar和PCIE在Mdev类型中选择vgpu设备230）音频设备：ich9-intel-hda/后端驱动器：无(不添加的话，串流玩游戏时是没有声音的)[scode type="blue"]其中 GRID T4-1Q (nvidia-230) 是 mdev 的名字，GRID T4--显卡名，1--1G 显存，Q 代表 vWS，nvidia-230 代表ID关于最后一位字母，如下:Q：为需要Quadro技术的性能和功能的创意和技术专业人员提供的虚拟工作站 - CUDA OpenGLC：计算密集型服务器工作负载，如人工智能、深度学习或高性能计算。- CUDA OnlyB：为业务专业人员和知识工作者提供的虚拟桌面 - 45FPS MAXA：为虚拟应用的用户，提供应用流或基于会话的解决方案 - Good for RDSH3D渲染，游戏，AI运算，请选择Q系列型号即可。[/scode]安装Guest驱动将下载下来的NVIDIA vGPU驱动进行解压,把Guest_Drivers文件夹里的580.88_grid_win10_win11_server2022_dch_64bit_international.exe上传到虚拟机安装驱动的话，一直下一步直至安装完成即可。授权驱动NVIDIA vGPU系列产品并非免费给消费者使用的，而是给企业用户专门定制的。需要对GRID驱动购买许可才能正常使用vGPU，驱动不授权的话，试用期到期将会锁住限制在15帧。这里我用开源社区nvlts项目来给驱动进行永久授权（个人测试使用，商用注意规避风险）下载nvlts,并解压放到C盘，如C:\nvlts# nvtls 1.0.3 https://dl.yangwenqing.com/webos/link/6b00d5a713984ea8beee6516adb9a6b9/nvlts_1.0.3_windows_amd64.zip打开CMD窗口执行以下命令，因为我们用的是Q系列vWS模型，所以授权的时候也要使用vWS的配置文件。# 进到nvlts目录 cd c:\nvlts # 进行授权 nvlts.exe -g -r -c configs\vWS.json之后我们可以执行nvidia-smi -q | findstr /i "license"来查看是否永久授权成功。C:\nvlts>nvidia-smi -q | findstr /i "license" vGPU Software Licensed Product License Status : Licensed (Expiry: Permanent)# 说明永久授权成功通过远程桌面工具连接虚拟机跑个鲁大师测试一下显卡是否正常工作[scode type="yellow"]想解除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是否开启cudafrl_enabled = 0 是否限制帧数，0为不限制vgpu_type = "NVS" 修复Q系列OpenGL性能异常问题[/scode]创建虚拟机（Ubuntu 2504）演示的是用最新的Ubuntu 2504 桌面版本，内核为linux-image-6.14.0-29-generic。[scode type="green"]创建Ubuntu虚拟机（2504）名称：自定义光驱挂载：Ubuntu安装ISO镜像系统中显卡：默认机型：q35BIOS：默认 (SeaBIOS)磁盘：SCSI 大小100G（按需设置，或硬盘直通）CPU：host 核心数量4（按需设置）内存：8G网络：virtIO 网卡添加PCI设备：nvidia显卡（勾选ROM-Bar和PCIE在Mdev类型中选择vgpu设备）音频设备：ich9-intel-hda/后端驱动器：无[/scode]内核知识[scode type="blue"]您需要知道的内核小知识：因为NVIDIA Driver需要对应内核才能正常安装驱动，比如535版本可能需要在6.5内核，550版本可能需要在6.8内核...；一般我们安装Ubuntu的时候，系统会默认将内核升级到最新版本，所以我们在打驱动时需要将内核指定到对应版本才能安装NVIDIA Driver。Ubuntu推荐使用mainline内核管理程序来快速切换任意版本的Linux内核`。1）查看当前系统内核版本，如果内核满足驱动安装，那么直接跳过安装内核步骤直接去安装驱动即可。uname -r2）安装 mainline 的软件包，需要添加它的软件源，然后用 apt 安装。sudo add-apt-repository ppa:cappelikan/ppa -y sudo apt update && sudo apt install mainline -y3）安装好后，可以指定想要安装的内核版本。比如要安装 6.8.12 版本：# 安装`6.8.12` 内核 sudo mainline install 6.8.12 # 以下信息是安装过程 mainline 1.4.13 Updating Kernels... Downloading 6.8.12-060812-generic ▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░ 27% 19/54 MB - file 3/44）内核安装好后，你需要知道系统里已经安装了哪些内核# 查看当前已安装的内核列表 dpkg --list | grep linux-image # 你会看到类似下面的输出： rc linux-image-6.14.0-29-generic 6.14.0-29.29~24.04.1 amd64 Signed kernel image generic hi linux-image-unsigned-6.8.12-060812-generic 6.8.12-060812.202501300202 amd64 Linux kernel image for version 6.8.12 on 64 bit x86 SMP这里linux-image-6.14.0-29-generic 和 linux-image-unsigned-6.8.12-060812-generic 就是已安装的内核包名5）修改 GRUB 配置，指定内核启动，我们将通过修改 /etc/default/grub 文件来设置默认内核# nano编辑grub文件 sudo nano /etc/default/grub # 例如，如果你想将 linux-image-unsigned-6.8.12-060812-generic 设置为默认，配置行可能看起来像这样： GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.12-060812-generic" # 配置grub读秒，让你有足够的时间在启动时看到 GRUB 菜单并进行选择 GRUB_TIMEOUT=5 # 确保这一行是 ‘menu’ 而不是 ‘hidden’ GRUB_TIMEOUT_STYLE=menu我的完整grub参数如下：# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.12-060812-generic" GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`( . /etc/os-release; echo ${NAME:-Ubuntu} ) 2>/dev/null || echo Ubuntu` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # If your computer has multiple operating systems installed, then you # probably want to run os-prober. However, if your computer is a host # for guest OSes installed via LVM or raw disk devices, running # os-prober can cause damage to those guest OSes as it mounts # filesystems to look for things. #GRUB_DISABLE_OS_PROBER=false # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"6）更新并重启系统sudo update-grub && reboot7) 重启后，系统就会自动切换到指定的内核版本# 登录进来提示 Welcome to Ubuntu 24.04.3 LTS (GNU/Linux 6.8.12-060812-generic x86_64) # uname -r 6.8.12-060812-generic8）把不需要的旧内核清除一下，腾出空间sudo apt autoremove -y[/scode]安装驱动1) 安装显卡驱动前先将需要的依赖文件打上# 安装ssh工具，使用第三方SSH工具（putty,终端）连接到Ubuntu，PVE里面控制台无法复制命令 sudo apt-get install openssh-server # 需要所需依赖 sudo apt install build-essential linux-headers-generic libglvnd-dev pkg-config -y # 安装dkms sudo apt install dkms -y # 安装32位兼容库 sudo dpkg --add-architecture i386 sudo apt update sudo apt install libc6:i386 -y2）屏蔽自带的显卡驱动# 创建blacklist-nouveau.conf文件 sudo nano /etc/modprobe.d/blacklist-nouveau.conf # 在blacklist-nouveau.conf文件添加如下内容： blacklist nouveau options nouveau modeset=0 # 重载内核initramfs sudo update-initramfs -u # 重启Ubuntu sudo reboot # 重启完成后检查nouveau是否已禁用，没有任何输出说明已经禁用 lsmod | grep nouveau # 切换到文本命令行控制台 sudo chvt 3 # 关闭图形界面服务 sudo service gdm stop3）安装显卡GRID驱动，将NVIDIA-Linux-x86_64-580.65.06-grid.run上传到/root目录下# 切换root权限 sudo -i # 给可执行权限 cd /root && chmod +x NVIDIA-Linux-x86_64-580.65.06-grid.run # 安装驱动（默认回车直至安装完成即可） ./NVIDIA-Linux-x86_64-580.65.06-grid.run --dkms4）使用nvidia-smi验证驱动是否正常ubuntu@ubuntu-Standard-PC-Q35-ICH9-2009:~$ nvidia-smi Thu Aug 28 23:02:49 2025 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 580.65.06 Driver Version: 580.65.06 CUDA Version: 13.0 | +-----------------------------------------+------------------------+----------------------+ | 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 GRID T4-1Q On | 00000000:01:00.0 Off | N/A | | N/A N/A P0 N/A / N/A | 11MiB / 4096MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 1454 G /usr/lib/xorg/Xorg 10MiB | +-----------------------------------------------------------------------------------------+启用授权下载nvlts,并解压到/opt# 创建存放nvlts mkdir /opt/nvlts && cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf && cd /opt/nvlts # 下载nvtls 1.0.3 wget -O /opt/nvlts/nvlts_1.0.3_linux_amd64.tar.gz "https://dl.yangwenqing.com/webos/link/2b88beefd12e41e3a03ce3faeae9ebdb/nvlts_1.0.3_linux_amd64.tar.gz" # 解压nvlts tar zxvf nvlts*.tar.gz # 配置自启动项 mkdir -p /etc/systemd/system/nvidia-gridd.service.d cp /opt/nvlts/systemd/vWS.conf /etc/systemd/system/nvidia-gridd.service.d/nvlts.conf systemctl daemon-reload # 执行授权 ./nvlts -g -r -c configs/vWS.json验证授权# 重启服务 sudo service nvidia-gridd restart # 验证授权获取情况 nvidia-smi -q | grep License# 看到有Licensed字样，就授权好了。 ubuntu@ubuntu-Standard-PC-Q35-ICH9-2009:~$ nvidia-smi -q | grep License vGPU Software Licensed Product License Status : Licensed (Expiry: Permanent)[scode type="green"]如果你需要用vGPU跑大模型，可能还需要安装CUDA/CuDNN，vGPU19.0支持最新的CUDA 13.0版本，当然cuda12 cuda11版本也是可以安装。安装CUDA打开官网：https://developer.nvidia.com/cuda-toolkit-archive选择CUDA 13.0，如下图选择Linux及对应的架构、系统、版本和安装形式：复制网站给我们的安装命令，依次在终端中输入：# 下载cuda 13 安装程序 wget https://developer.download.nvidia.com/compute/cuda/13.0.0/local_installers/cuda_13.0.0_580.65.06_linux.run # 执行安装cuda程序 sudo sh cuda_13.0.0_580.65.06_linux.run输入accept接受条款┌──────────────────────────────────────────────────────────────────────────────┐ │ End User License Agreement │ │ -------------------------- │ │ │ │ NVIDIA Software License Agreement and CUDA Supplement to │ │ Software License Agreement. │ │ │ │ The CUDA Toolkit End User License Agreement applies to the │ │ NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA │ │ Display Driver, NVIDIA Nsight tools (Visual Studio Edition), │ │ and the associated documentation on CUDA APIs, programming │ │ model and development tools. If you do not agree with the │ │ terms and conditions of the license agreement, then do not │ │ download or use the software. │ │ │ │ Last updated: January 12, 2025 │ │ │ │ │ │ Preface │ │ ------- │ │ │ │──────────────────────────────────────────────────────────────────────────────│ │ Do you accept the above EULA? (accept/decline/quit): │ │ accept │ └──────────────────────────────────────────────────────────────────────────────┘注意：由于之前已经安装过驱动了，这次不要再安装驱动。在Driver这里按ENTER键将勾去掉！将2项CUDA选项勾选然后选择Install┌──────────────────────────────────────────────────────────────────────────────┐ │ CUDA Installer │ │ - [ ] Driver │ │ [ ] 580.65.06 │ │ + [X] CUDA Toolkit 13.0 │ │ [X] CUDA Documentation 13.0 │ │ - [ ] Kernel Objects │ │ [ ] nvidia-fs │ │ Options │ │ Install │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │ └──────────────────────────────────────────────────────────────────────────────┘安装完成后，使用nano命令来配置环境变量：nano ~/.bashrc# 在最后添加以下变量信息 export PATH=$PATH:/usr/local/cuda-13.0/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-13.0/lib64最后，使其生效source ~/.bashrc执行nvcc -V即可查看CUDA版本root@ubuntu-Standard-PC-Q35-ICH9-2009:~# nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Wed_Jul_16_07:30:01_PM_PDT_2025 Cuda compilation tools, release 13.0, V13.0.48 Build cuda_13.0.r13.0/compiler.36260728_0安装CuDNN打开官网：https://developer.nvidia.com/cudnn-downloads选择CuDNN 9.12.0，如下图选择Linux及对应的架构、系统、版本和安装形式：复制网站给我们的安装命令，依次在终端中输入：wget https://developer.download.nvidia.com/compute/cudnn/9.12.0/local_installers/cudnn-local-repo-ubuntu2404-9.12.0_1.0-1_amd64.deb sudo dpkg -i cudnn-local-repo-ubuntu2404-9.12.0_1.0-1_amd64.deb sudo cp /var/cudnn-local-repo-ubuntu2404-9.12.0/cudnn-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cudnn9-cuda-13[/scode]总结P100-100这种小卡拉米就别指望它有啥大作为了，跑大模型还是选正经卡。这里只是演示vGPU安装过程哈哈哈。FAQ问答[scode type="green"]一、NVIDIA vGPU部分Q1: 我的显卡是Tesla P4，安装好了vGPU驱动，在Windows虚拟机看到显卡变成了T4或者RTXA6000A1: 部分NVIDIA vGPU HOST驱动是做了修补集成了vGPU unlock服务，所以你看到p4变成T4或者RTXA6000都是正常的并不会影响其性能。当然p4本身就是支持的vGPU卡，在vGPU17版本前直接用原生NVIDIA vGPU HOST驱动就行,如果你要用vGPU17版本及以上就得模拟一个受支持的显卡型号才能使用Q2：我的显卡有6GB显存，选用GRID T4-1Q（nvidia-230）模型，那显示可用数16个，我是不是能开16个？A2：错的！nvidia-230模型每开一个vgpu会占用1024M显存，6G显存理论就是1G+1G+1G+1G+1G+1G=6个。16是这个230模型最大可用数Q3：为啥我给虚拟机使用nvidia-230模型后，其他虚拟机想再使用其他模型就不让选择了可用数为0。只能用nvidia-230模型。A3：对的，默认vGPU是置于相等大小模式，一旦选了这个模型后，所有虚拟机都将采用该模型，你不能一台虚拟机使用nvidia-230模型，另一台虚拟机使用nvidia-231模型。但是从vGPU18版本后NVIDIA开始对老显卡非SRIOV的虚拟化也支持了混合模式即支持不同显存大小。打脸的是我们用的消费卡/非支持的专业卡依旧不能使用官方方法开启混合模式，卡不支持还是得用vGPU Unlock解锁修改。官方开启GPU混合大小模式1）使用nvidia-smi -q命令列出所有物理 GPU 的状态，并检查异构时间分片 vGPU 大小是否受支持。当Heterogeneous Time-Slice Sizes项如果是Supported状态，说明你的显卡支持开启混合模式.... Attached GPUs : 1 GPU 00000000:41:00.0 ... Heterogeneous Time-Slice Sizes : Supported ...2）使用以下命令开启混合大小模式。将id值改自己显卡获取到的数字# 开启混合大小模式 nvidia-smi vgpu -i id -shm 1 # 例如： nvidia-smi vgpu -i 0 -shm 1 # 输出以下信息说明开启成功 Enabled vGPU heterogeneous mode for GPU 00000000:41:00.0使用nvidia-smi -q命令检查 vGPU 异构模式是否已启用，以确认 GPU 现在处于混合大小模式。 ... vGPU Heterogeneous Mode : Enabled ...如要切换回GPU置于相等大小模式，使用-shm 0选项运行此命令即可。Q4：我显卡不支持官方方法开启GPU混合大小模式，我要怎么给每台虚拟机分配不同大小的显存？A4：可以配合vGPU Unlock，通过修改framebuffer、framebuffer_reservation这2个值就能给每台虚拟机自定义显存大小。显存大小不建议低于1GB，低于1GB将无法启用NVENC视频编解码器。由于vGPU是采用时间片轮询方式来共享算力，切分的越多虚拟机占用算力的时间就越少丢帧也越严重。虽可改512MB，384MB的显存值来达到切分10~20个虚拟机，但你的显卡算力瓶颈就在那，与其减小显存强制多开，不如多买几张卡。例如：我要使用nvidia-230模型给101虚拟机分配4G显存，102虚拟机分配2G显存，那么我就这样写即可nano命令编辑nano /etc/vgpu_unlock/profile_override.toml# 自定义nvidia-230模型 [profile.nvidia-230] # 启用cuda支持 cuda_enabled = 1 # 解除帧率限制 frl_enabled = 0 # 修复Q系列OpenGL异常问题 vgpu_type = "NVS" # 配置1GB显存的值 framebuffer = 939524096 framebuffer_reservation = 134217728 [vm.101] # 给101虚拟机设置4G显存 framebuffer = 3959422976 framebuffer_reservation = 335544320 [vm.102] # 给102虚拟机设置2G显存 framebuffer = 1946157056 framebuffer_reservation = 201326592Q5：我的显卡明明有6GB显存，用1GB显存的nvidia-230模型开了6台虚拟机，启动到第6台虚拟机发现无法启动是怎么回事？A5：总显存值剩余不足1GB，所以到第6台时就没法启动了，可以执行nvidia-smi查看剩余显存，通过改小第6台虚拟机显存大小再启动即可，或者把nvidia-230模型整体显存改小以下是些换算好的显存值，有需要可以替换到profile_override.toml文件# 设置384M显存 framebuffer = 318767104 framebuffer_reservation = 83886080 # 设置512M显存 framebuffer = 436207616 framebuffer_reservation = 100663296 # 设置896M显存 framebuffer = 822083584 framebuffer_reservation = 117440512 # 设置1GB显存 framebuffer = 939524096 framebuffer_reservation = 134217728 # 设置2GB显存 framebuffer = 1946157056 framebuffer_reservation = 201326592 # 设置3GB显存 framebuffer = 2952790016 framebuffer_reservation = 268435456 # 设置4GB显存 framebuffer = 3959422976 framebuffer_reservation = 335544320 # 设置5GB显存 framebuffer = 4966055936 framebuffer_reservation = 402653184 # 设置6GB显存 framebuffer = 5972688896 framebuffer_reservation = 469762048 # 设置8GB显存 framebuffer = 7985954816 framebuffer_reservation = 603979776 # 设置10GB显存 framebuffer = 9999220736 framebuffer_reservation = 738197504 # 设置12GB显存 framebuffer = 12012486656 framebuffer_reservation = 872415232 # 设置16GB显存 framebuffer = 16039018496 framebuffer_reservation = 1140850688 # 设置20GB显存 framebuffer = 20065550336 framebuffer_reservation = 1409286144 # 设置24GB显存 framebuffer = 24092082176 framebuffer_reservation = 1677721600 # 设置32GB显存 framebuffer = 32145145856 framebuffer_reservation = 2214592512 # 设置48GB显存 framebuffer = 48001712128 framebuffer_reservation = 3537895424Q6：为啥我在PVE网页虚拟机控制台里打完显卡驱动后，就不能操作了呢？A6：请配置好远程桌面或者安装第三方远程工具，确认能通过远程连上虚拟机再来安装显卡驱动，如果你没配置就安装了显卡驱动，则需要先删除显卡设备，配置好远程再添加上显卡设备。因为你一旦安装好显卡驱动后系统就会呈现双显示器状态，这样就会导致PVE网页虚拟机控制台黑屏，或者是副屏状态，使得无法操作虚拟机。这里推荐把PVE控制台窗口显示给关闭，即在【虚拟机→硬件→显示】改成“无”，只保留vGPU一个显示器,通过远程操作虚拟机。如果你要在PVE控制台操作虚拟机，不想借助外部的远程工具，可以用ToDesk远程到虚拟机，把显示屏设置改为仅控制台窗口显示，这样PVE的Web显示就能操作了。（注意：PVE控制台的窗口是独立的虚拟显卡并不调用VGPU；UEFI安装的虚拟机修改PVE的Web窗口分辨率需要在虚拟机BIOS修改，SeaBIOS安装的虚拟机在系统显示设置进行修改分辨率）UEFI虚拟机修改PVE Web窗口分辨率操作步骤：虚拟机开机按esc键进入BIOS → Device Manager → OVMF Platform Configuration[/scode]学习|致谢NVIDIA Virtual GPU Software v19.0vgpu-unlock-rsNVLTSpatched-nvidia-grid-driverNVIDIA Local Trusted Store
PVE8升级PVE9 在线升级｜重装还原 2 种方式今年下半年，ESXi （6月17日）和 Proxmox VE（8月5日） 两家虚拟化平台都迎来了自己的9.0正式版。此次ESXI9.0的授权模式也变为了订阅制且放弃了中文语言，不能再用【神秘代码】激活白嫖了。 ::aru:crying:: PVE9 用上了Debian 13“Trixie”来构建，默认搭载Linux 6.14内核，软件也紧跟主流，QEMU 升级到 10.0.24 LXC 用上 6.0.4 ZFS 2.3.3 Ceph Squid 19.2.3 等。下边跟着我将 PVE8 升级到 PVE9 吧。升级前准备务必做好备份！务必做好备份！务必做好备份！可以外挂个硬盘或者U盘挂载到 PVE 的/mnt/pve/media 下把 PVE 相关设置配置文件备份到外设硬盘。PVE信息备份(必须)PVE的存储信息，虚拟机信息，集群的设置比如标签、SDN、用户信息之类都存储在/var/lib/pve-cluster/路径下。一共三个文件config.db config.db-shm config.db-walcp -r /var/lib/pve-cluster /mnt/pve/mediaPVE配置备份(可选)/etc目录还是有必要存一份的，像一些硬盘挂载文件是存放在/etc/systemd/system/下的，即使你还原了PVE配置信息，也不会帮你创建回来，需要自己拷回去。备份 /etc 目录：这个目录包含了所有的系统配置（网络、存储、用户、证书等）。tar -czvf /mnt/pve/media/pve8_etc_backup_$(date +%Y%m%d).tar.gz /etc备份关键配置文件：# 主机名信息 /etc/hosts # 网络信息 /etc/network/interfaces # 存储信息 /etc/pve/storage.cfg # 用户信息 /etc/pve/user.cfg # 集群信息 /etc/pve/corosync.conf[scode type="green"]如何还原？PVE升级失败了，进不了系统，也别灰心。只需要重装好PVE，将前面备份的PVE信息进行还原即可。备份之前的PVE主机名必须和重装后的PVE主机名一致，比如你原来的主机名叫做PVE，那你新装了之后也要叫PVE。在新装的PVE上，挂载U盘到/mnt/pve/media，将3个文件拷贝回去即可。cp /mnt/pve/media/config.db /var/lib/pve-cluster cp /mnt/pve/media/config.db-shm /var/lib/pve-cluster cp /mnt/pve/media/config.db-wal /var/lib/pve-cluster然后重启pve即可。如果你前后的主机名不一样。则会在Web上看到2个节点，一个新的节点，一个旧的节点名称，虚拟机都在旧节点上。所以一定要确保重装前后主机名一致。[/scode]在线升级（推荐）直接从 PVE8 在线升级到 9。更换PVE8源升级前先对系统源替换为国内源，这个主要是为了解决网络访问问题、提升下载速度、确保系统更新的可靠性。# 编辑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 deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription删除不需要的 ceph 源和企业订阅源rm -rf /etc/apt/sources.list.d/执行更新执行更新，先把PVE升级到 PVE8 的最新版本号，再来升级 PVE9# 更新软件包并将系统升级到最新 apt update && apt dist-upgrade -y升级检查判断系统是否满足升级条件，没有红色警告信息就可以大胆的升级了。有的话自行按提示消灭。pve8to9更换PVE9源接着把 PVE8 的源换成 PVE9 的源进行升级就好了# 编辑sources.list nano /etc/apt/sources.list # 将原有的源链接在句首加 # 注释掉，更换以下中科大源信息 deb https://mirrors.ustc.edu.cn/debian/ trixie main contrib non-free non-free-firmware deb https://mirrors.ustc.edu.cn/debian/ trixie-updates main contrib non-free non-free-firmware deb https://mirrors.ustc.edu.cn/debian/ trixie-backports main contrib non-free non-free-firmware deb https://mirrors.ustc.edu.cn/debian-security trixie-security main deb https://mirrors.ustc.edu.cn/proxmox/debian trixie pve-no-subscription执行更新执行更新，把PVE8升级到 PVE9 的最新版本号， 升级期间不得重启设备，提示选择信息时默认回车继续就行，直至更新完成。# 更新软件包并将系统升级到最新 apt update && apt dist-upgrade -y清理旧内核升级完成后，必须重启 让服务器以加载新的内核和所有更新。# 重启 reboot # 升级后，旧的内核包会保留。查看已安装的ker­nel dpkg --get-selections | grep -i 'kernel'例如：root@pve8:~# dpkg --get-selections | grep -i 'kernel' proxmox-default-kernel install proxmox-kernel-6.14 install proxmox-kernel-6.14.8-2-pve-signed install proxmox-kernel-6.8 install proxmox-kernel-6.8.12-13-pve-signed install proxmox-kernel-6.8.12-9-pve-signed install proxmox-kernel-helper install移除不需要的版本（例如 6.8系列）：apt remove --purge proxmox-kernel-6.8.12-13-pve-signed apt remove --purge proxmox-kernel-6.8.12-9-pve-signed配置 PVE9 源由于Debian13 软件源变更为DEB822格式。不再是以传统格式/etc/apt/sources.list,而是以/etc/apt/sources.list.d/debian.sources呈现。所以还需要调整一下源这块设置。# 删除sources.list文件 rm -rf /etc/apt/sources.list # 新建个sources.list.d文件夹 mkdir /etc/apt/sources.list.d/创建系统源（中科大源）cat > /etc/apt/sources.list.d/debian.sources <<EOF Types: deb URIs: http://mirrors.ustc.edu.cn/debian/ Suites: trixie trixie-updates Components: main contrib non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg Types: deb URIs: http://mirrors.ustc.edu.cn/debian-security/ Suites: trixie-security Components: main contrib non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg EOF创建无订阅企业源（中科大源）# 关闭官方订阅企业源 sed -i '/Types:/a Enabled: false' /etc/apt/sources.list.d/pve-enterprise.sources # 新增无订阅企业源为中科大源 cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve Suites: trixie Components: pve-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF创建无订阅Ceph源（中科大源）cat > /etc/apt/sources.list.d/ceph.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/ceph-squid Suites: trixie Components: no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF重装还原（100%成功）重装会清空系统盘,会导致丢失数据。请务必按上面的升级前准备步骤备份pve配置，如果你的虚拟机虚拟磁盘也是放到系统盘的，那么需要迁移到其他非系统盘的存储池。这些工作做好后，就可以重装pve9。重装好后按升级前准备步骤还原pve配置即可。顺带把PVE9的基本还原和优化设置给做了。更换系统源中科大源# 替换 Debian 官方源和安全源为中科大源 sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources更换企业源中科大源# 关闭官方订阅企业源 sed -i '/Types:/a Enabled: false' /etc/apt/sources.list.d/pve-enterprise.sources # 新增无订阅企业源为中科大源 cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve Suites: trixie Components: pve-no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF更换Ceph源# 匹配当前Ceph版本和系统版本并更换为社区无订阅的中科大源 if [ -f /etc/apt/sources.list.d/ceph.sources ]; then CEPH_CODENAME=`ceph -v | grep ceph | awk '{print $(NF-1)}'` source /etc/os-release cat > /etc/apt/sources.list.d/ceph.sources <<EOF Types: deb URIs: https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME Suites: $VERSION_CODENAME Components: no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg EOF fi执行更新# 更新软件包并将系统升级到最新 apt update && apt dist-upgrade -yLXC容器更源国内清华源# 备份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.servicePVE常用优化脚本# 一键给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删除local-lvm将空间合并到local删除local-lvm将空间合并到local目录池让空间最大化。# 使用命令删除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才算完成。总结升级流程可以简化为：备份 -> 更新 -> 换源 -> 升级 -> 重启 -> 验证。成功的关键在于 充分准备 和 完整备份。祝您升级顺利！