一、 环境与策略
- 硬件:Intel i9-9900K (UHD 630) + NVIDIA RTX 3090 (GA102)。
- 策略:分阶段实施。先不挂卡安装 Ubuntu2204,执行
upgrade升级内核,配置好 SSH 后,再进行直通。
二、 物理机 BIOS 设置
- VT-d / VT-x:
Enabled。 - Above 4G Decoding:
Enabled(必开,否则 3090 无法在地址空间映射)。 - Primary Display: 建议设为
IGFX(核显)。
- 目的:让 PVE 宿主机使用核显,将 3090 完全释放给虚拟机。
- CSM Support:
Disabled。
三、 PVE 宿主机底层配置
1. 修改 GRUB 引导
编辑:nano /etc/default/grub
修改行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction initcall_blacklist=sysfb_init video=efifb:off,vesafb:off"
保存后执行:update-grub
2. 加载 VFIO 内核模块
编辑:nano /etc/modules
添加:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3. 配置驱动黑名单 (核心步骤)
创建并编辑文件:nano /etc/modprobe.d/pve-blacklist.conf
请务必填入以下内容(包含你提供的完整屏蔽逻辑):
# NVIDIA 显卡屏蔽
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
options nouveau modeset=0
# AMD 核/独显屏蔽
blacklist amdgpu
blacklist radeon
# Intel 核显与音频屏蔽 (确保 9900K 核显不冲突或用于直通)
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
4. 绑定硬件 ID 到 vfio
查找 ID:lspci -nn | grep -i nvidia (得到 10de:2204 和 10de:1aef)
创建文件:nano /etc/modprobe.d/vfio.conf
写入:
options vfio-pci ids=10de:2204,10de:1aef disable_vga=1
5. 应用并重启
执行:update-initramfs -u -k all && reboot
四、 宿主机端验证 (决定性步骤)
重启后,必须执行此命令验证:
lspci -vnn -s 01:00.0
检查结果:
必须看到 Kernel driver in use: vfio-pci。
如果显示为 nvidia 或 nouveau,说明黑名单或 VFIO 绑定失败,此时绝不可开启虚拟机。
五、 虚拟机 (Ubuntu 22.04) 配置流程
阶段 1:纯净安装与系统更新 (不挂载显卡)
- 虚拟机创建:BIOS 选
OVMF,Machine 选q35。 - Display:先设为
Standard VGA。 - 安装 Ubuntu:安装完成后,必须执行:
sudo apt update && sudo apt upgrade -y
原理:3090 较新,通过 upgrade 升级内核(Kernel)能提供更好的 PCIe 总线支持和硬件兼容性。
- 配置 SSH:
sudo apt install openssh-server -y。 - 禁用虚拟机内 Nouveau (推荐):
sudo bash -c "echo 'blacklist nouveau' > /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
sudo poweroff
阶段 2:挂载显卡与优化参数
- 添加 PCI 设备:选择 3090,勾选
All Functions、ROM-Bar、PCI-Express。 - CPU 设置:Type 必须选
host。 - 隐藏虚拟化身份:
在宿主机执行:nano /etc/pve/qemu-server/<VMID>.conf
在文件顶部(或cpu: host之后)添加:
args: -cpu 'host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,kvm=off'
六、 驱动安装与验证
- 启动虚拟机。如果 PVE 网页控制台(NoVNC)因显卡接管而卡住,直接通过 SSH 远程登录。
- 安装 NVIDIA 驱动:
sudo ubuntu-drivers autoinstall
- 验证直通结果:
执行:nvidia-smi
常见问题排查:
Xorg blocked再现:检查pve-blacklist.conf是否生效。- 无法读到 EDID:这是 3090 的常见问题,通常可以通过在 VM 硬件设置中暂时关闭
Primary GPU,或直接外接物理显示器解决。
Proxmox VE 集群加入失败 FAQ
Q:为什么加入 PVE 集群时报错 can't add existing node 'pve'?
A: 这是因为 PVE 集群要求每个节点的主机名(Hostname)必须唯一。如果新节点与集群内已有节点重名(通常默认都叫 pve),系统为了防止配置冲突会中止加入进程。
Q:如何修改新节点主机名以正常加入集群?
A: 请在新节点(待加入的机器)上按顺序执行以下三个步骤:
- 修改主机名配置文件:
执行nano /etc/hostname,将文件中的pve修改为互不重复的新名称(例如:pve-node2)。 - 同步修改 Hosts 映射:
执行nano /etc/hosts,找到以下两行并将旧名pve替换为新名:
127.0.0.1 localhost.localdomain localhost(确保此行后的别名正确)172.19.30.210 pve-node2.proxmox.com pve-node2(对应你的静态 IP 行)
- 重启生效:
执行reboot重启系统。重启后,再次尝试加入集群即可。
原创
Proxmox VE 显卡直通教程 (i9-9900K + RTX 3090 )
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
赞赏支持
如果觉得文章对你有帮助,可以请作者喝杯咖啡 ☕
评论交流
欢迎留下你的想法