PVE 安装与 AMD 780M 核显直通配置教程(2026 最新版)
本文从零开始,手把手带你完成两件事:① 安装 Proxmox VE(PVE)虚拟化平台;② 把 AMD Radeon 780M 核显(Ryzen 7000 系列 Phoenix APU 内置)直通给虚拟机 / 容器,让 Jellyfin、Plex 硬解转码或 Windows 虚拟机用上核显加速。内容基于 2026 年最新稳定版 PVE 9.2 与 AMD Phoenix 平台实测整理,核显直通部分包含了最容易翻车的所有细节,建议先通读再动手。
一、先说结论:AMD 780M 核显,2026 年应该怎么用?
先给你 2026 年的结论,别照着 Intel 教程折腾——AMD 和 Intel 差别很大:
| 方案 | 适用场景 | 宿主还能用核显吗 | 多 VM 共享 | 难度 | 说明 |
|---|---|---|---|---|---|
| LXC 绑定 /dev/dri ⭐ | Jellyfin/Plex 硬解 | ✅ 能 | ✅ 可绑多个容器 | ⭐ 低 | 家用媒体服务器首选 |
| 完整直通给 VM(vfio) | 单台 Windows/Linux VM 要完整 GPU | ❌ 不能 | ❌ 只能给一台 | ⭐⭐ 中 | 有 AMD Reset Bug 等坑 |
| SR-IOV / GVT-g 拆分 | — | — | — | — | 780M 完全不支持,没有对应技术 |
三个重要事实(2026 年,AMD 专属):
- AMD 核显没有"拆分虚拟化":Intel 有 GVT-g(已废弃)、12 代后有 SR-IOV,但 AMD 780M(RDNA3/Phoenix)既没有 GVT-g 等价物,也不支持 SR-IOV——内核源码实锤,SR-IOV 名单只有数据中心专业卡,Phoenix 不在其中。想"一块核显多处用",只有 LXC 绑定 或 完整直通 两条路。
amd_iommu=on是无效遗留写法:大量老教程在抄这个参数,但现代内核(5.15~6.x)的 AMD IOMMU 参数解析器根本不认识 "on"(新内核会打印Unknown option - 'on'然后忽略)。AMD IOMMU 在 BIOS 开启 AMD-Vi 后默认自动启用,你只需要加iommu=pt优化性能。Intel 才需要intel_iommu=on。- AMD 没有 QSV:Intel QuickSync 是 Intel 专属技术。AMD 核显在 Linux 上硬解/硬编统一走 VA-API(Mesa 实现),Jellyfin 里选 VAAPI,设备填
/dev/dri/renderD128。
看完本文你该做的选择:新机器(Ryzen 7000/8000 系列)跑媒体服务器 → 直接看第五节(LXC 方案),四行配置 10 分钟搞定;需要把核显完整交给一台 Windows VM → 看第六节(完整直通),但要做好和 AMD Reset Bug 搏斗的心理准备。
二、安装 PVE 9.2(2026 年最新稳定版)
2.1 版本与下载
截至 2026 年,PVE 最新稳定版为 9.x 系列,当前为 9.2(ISO: proxmox-ve_9.2-1.iso,约 1.5GB,基于 Debian 13 Trixie)。PVE 8(基于 Debian 12)官方已标注 "不再是新稳定版"。
| 项目 | 内容 |
|---|---|
| 官方下载页 | https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso |
| 国内镜像(推荐) | 清华 TUNA:https://mirrors.tuna.tsinghua.edu.cn/proxmox/iso/ |
| 国内镜像(备用) | 中科大:https://mirrors.ustc.edu.cn/proxmox/iso/ |
| ISO SHA256 | 4e88fe416df9b527624a175f24c9aa07c714d3332afb1ee3dbf3879573ef2c6c |
国内下载直接走 TUNA/USTC,快很多。下载后校验:
sha256sum proxmox-ve_9.2-1.iso
# 期望输出: 4e88fe416df9b527624a175f24c9aa07c714d3332afb1ee3dbf3879573ef2c6c proxmox-ve_9.2-1.iso
2.2 硬件要求
- CPU:64 位 x86,必须支持 AMD-V(SVM)和 AMD-Vi(IOMMU,直通关键,两者不是一回事)
- 内存:系统至少 2GB + 虚拟机内存;用 ZFS 时每 TB 存储额外约 1GB 内存
- 存储:建议 SSD;若用 ZFS/Ceph 不要叠加在硬 RAID 上(官方明示可能丢数据)
- 网卡:至少一块;推荐可预测命名(eno1、enp3s0 等,PVE 没有 eth0)
2.3 制作 U 盘启动盘
Windows:用 Rufus(写入模式选 DD 镜像)或 balenaEtcher。
Linux:
# 先 lsblk 确认 U 盘设备名(比如 /dev/sdb,是整盘不是 sdb1!)
lsblk
sudo dd bs=1M conv=fdatasync if=./proxmox-ve_9.2-1.iso of=/dev/sdb
⚠️ 不要用 UNetbootin——官方明确说明它不支持 PVE 镜像。dd 目标必须是整个磁盘设备(/dev/sdb),写成分区会导致无法启动。
2.4 BIOS 设置(安装前)
- Secure Boot:PVE 8.1+ 安装器已支持,9.2 可保持开启
- 开启 从 U 盘启动,把 U 盘调到第一启动项
- 安装过程黑屏/卡死的话,启动菜单按
e编辑,在linux行末尾加nomodeset,再按Ctrl-X启动
2.5 安装界面逐步操作
启动后选第一项 Install Proxmox VE (Graphical)(图形向导;黑屏就用 Terminal UI 版)。
- EULA → 拉到最底点 Agree
- 选择目标磁盘 → 勾选安装盘(会清空整盘数据!),文件系统新手选 ext4 最稳(ZFS 留给懂的人)
- 时区 → 中国大陆选
Country: China / Time zone: Asia/Shanghai - Root 密码 → 至少 8 字符,强烈建议 12+ 位混合;Email 必填(更新通知会发这里)
- 网络配置(最容易错的一步):
- 网卡选插了网线的那个口(实心圆点 = UP 状态)
- Hostname 填pve或pve.example.com
- IP 必须带 CIDR:192.168.1.100/24(只填 IP 不写/24会报错!)
- Gateway 填路由器地址如192.168.1.1,DNS 填223.5.5.5(阿里) - Summary 复查 → 无误点 Install
- 装完自动重启时拔掉 U 盘
2.6 首次登录 Web 界面
浏览器访问 https://<你的IP>:8006(注意是 https + 8006 端口):
- 自签名证书警告 → 点"高级 → 继续前往"
- 用户名
root,Realm 必须选PAM(新手最常在这翻车),密码是安装时设置的 - 登录后看左侧 Datacenter → 你的节点,检查 CPU/内存/存储正常;右上角"无订阅"提示可忽略,不影响使用
三、安装后必做:换国内源(PVE 9 的坑!)
PVE 9 基于 Debian 13,仓库配置改成了 deb822 多行格式(/etc/apt/sources.list.d/*.sources 文件),不是老的单行 sources.list 格式。换源请直接编辑 .sources 文件。
第 1 步:Debian 基础源换清华,编辑 /etc/apt/sources.list.d/debian.sources,把 URIs 改成:
Types: deb deb-src
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian/
Suites: trixie trixie-updates
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian-security/
Suites: trixie-security
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
第 2 步:禁用企业源(没有订阅 key 的话 apt update 必报 401):
rm /etc/apt/sources.list.d/pve-enterprise.sources
第 3 步:启用免费 no-subscription 源(走国内镜像),新建 /etc/apt/sources.list.d/proxmox.sources:
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-release-*.gpg
⚠️ 注意路径是
/proxmox/debian/pve,不是/proxmox/pve;Suite 用trixie,Component 用pve-no-subscription。改完apt update && apt dist-upgrade -y更新系统。
四、核显直通前的通用准备
4.1 确认 780M 设备 ID 与驱动(⚠️ 必须以你的机器实测为准!)
先说重点:PCI 设备 ID 和总线地址每台机器都不一样,教程里写死的值只是 "常见值",千万别照抄。下面教你自己查。
📖 先补一个基础概念:PCI ID 是什么?
每个 PCI 设备都有两个 ID,格式是 厂商ID:设备ID(都是 16 进制):
| 部分 | 含义 | 会变吗? |
|---|---|---|
| 厂商 ID(vendor ID) | 谁造的芯片,1002 = AMD/ATI |
❌ 永远不变(所有 AMD 显卡都是 1002) |
| 设备 ID(device ID) | 具体是哪款芯片 | ⚠️ 会变! 不同型号、不同代、甚至不同 BIOS/平台都可能不同 |
所以教程里说的 "PCI ID 会变",准确说是 device ID 会变,厂商 ID 1002 是不会变的。你要绑定的正是 "厂商 ID: 设备 ID" 这个组合。
常见值参考(仅作对照,不一定是你机器上的值):
- 780M(Phoenix1)常见 device ID:1002:15BF(官方 PCI ID 库确认;780M/760M/740M 共用此 ID,靠子系统区分)
- Phoenix2 低配变体:1002:15C8
- 音频功能常见 ID:1002:1640
- 总线地址:本文示例用 07:00.0,你的机器可能是 06:00.0、0d:00.0 等任意值
真机上自查(必须做!):
# 列出所有 AMD/ATI 设备(GPU + 音频),记下你机器上实际的 地址 和 ID
lspci -nn | grep -i "AMD/ATI"
# 示例输出(你的机器数值可能不同):
# 07:00.0 VGA compatible controller: AMD/ATI Phoenix1 [1002:15bf] (rev c7)
# 07:00.1 Audio device: AMD/ATI Radeon High Definition Audio Controller [1002:1640]
# 用你查到的实际地址确认驱动(把 07:00.0 换成你的)
lspci -nnk -s <你的地址>
# 期望: Kernel driver in use: amdgpu
# 确认 /dev/dri 节点
ls -l /dev/dri
# crw-rw----+ 1 root video 226, 0 /dev/dri/card0
# crw-rw----+ 1 root render 226, 128 /dev/dri/renderD128
# (renderD128 是 Jellyfin 要用的节点)
若 lspci 看不到 780M 或 /dev/dri 为空:① BIOS 里把核显设为 Force/Enabled(Auto 模式下插了独显可能把核显藏起来);② 检查 AMD APU 固件(见 4.2)。
4.2 ⚠️ 最大暗坑:PVE 可能缺 AMD APU 固件
PVE 自带的 pve-firmware 包不含部分 AMD APU 的 GPU 固件(论坛已确认),症状:
amdgpu 0000:30:00.0: amdgpu: Unable to locate a BIOS ROM
amdgpu 0000:30:00.0: amdgpu: Fatal error during GPU init
amdgpu: probe of 0000:30:00.0 failed with error -22
解决办法(⚠️ 不要 apt install firmware-amd-graphics——它会和 pve-firmware 冲突,把 Proxmox 内核包一并卸载!),要下载 deb 解包拷贝:
wget http://ftp.debian.org/debian/pool/non-free-firmware/f/firmware-nonfree/firmware-amd-graphics_20230515-3_all.deb
dpkg -x firmware-amd-graphics_*.deb firmware-amd-graphics
cp -r firmware-amd-graphics/lib/firmware/* /lib/firmware/
update-initramfs -u -k all
reboot
4.3 BIOS 里 AMD 虚拟化相关开关
各主板叫法不一(ASUS/MSI/ 技嘉 / 迷你主机 OEM),按功能对照:
| 开关 | 常见名称 | 设置 |
|---|---|---|
| CPU 虚拟化 | SVM Mode / SVM / AMD-V | Enabled(不开 VM 起不来) |
| IOMMU | IOMMU / AMD-Vi | Enabled(⚠️ Auto ≠ Enabled!) |
| 大 BAR | Above 4G Decoding | 建议 Enabled(Windows 直通 Code 43 时可尝试关 Re-Size BAR/SAM) |
| 核显显存 | UMA Frame Buffer Size | 直通时调大(512MB 起,建议 4GB+) |
| 核显开关 | Integrated Graphics | Force / Enabled(不要 Auto) |
迷你主机(零刻 / 铭凡 /UM773 等)BIOS 选项通常很少,一般只需 SVM + IOMMU 两项,没有的选项跳过即可。
4.4 AMD IOMMU 内核参数(重点纠错!)
AMD 只需要 iommu=pt,不要加 amd_iommu=on:
| 参数 | 真实行为 |
|---|---|
amd_iommu=on |
❌ 无效遗留写法。现代内核的解析器不认识 "on"(打印 Unknown option - 'on' 后忽略)。可用值只有 off/force_enable/force_isolation 等 |
iommu=pt |
✅ 推荐加。IOMMU passthrough 模式,VM 的 DMA 直达硬件,性能更好(PVE 官方推荐) |
AMD IOMMU 为什么默认就开? 内核检测到 BIOS 暴露的 AMD-Vi(ACPI IVRS 表)后自动初始化,amd_iommu=off 才能关掉。只有极少数 BIOS 有 bug 不暴露 IVRS 时才需要 amd_iommu=force_enable 强开。
GRUB 方式:编辑 /etc/default/grub,改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt"
# 直通核显常用完整组合(可选):
# GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt pcie_acs_override=downstream initcall_blacklist=sysfb_init"
update-grub
reboot
systemd-boot 方式:编辑 /etc/kernel/cmdline 写入 iommu=pt,然后:
proxmox-boot-tool refresh
reboot
验证 IOMMU 生效:
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
# 期望看到: AMD-Vi: Interrupt remapping enabled / AMD-Vi: Found IOMMU cap 0x40
五、方案 A:LXC 绑定 /dev/dri(家用媒体服务器首选 ⭐)
适合:Jellyfin / Plex / Emby 硬解转码。不需要 IOMMU、不需要直通、宿主核显照常工作。
5.1 创建 LXC 容器
PVE Web 界面:右上角 Create CT,按向导创建(模板需先在本地存储 → CT Templates 里下载 Debian/Ubuntu 模板)。记下容器 ID(如 101)。
5.2 编辑容器配置(核心!四行搞定)
编辑 /etc/pve/lxc/101.conf(101 换成你的容器 ID),追加:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.cgroup2.devices.allow: c 29:0 rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
226 是 DRM 设备主设备号(card/render),29 是 fb 设备。更省事的写法:
lxc.cgroup2.devices.allow: c 226:* rwm直接放行全部 DRM 节点。⚠️ PVE 7/8/9 必须用
lxc.cgroup2.*,写成老的lxc.cgroup.*会被静默忽略,容器里照样没权限。
改完 重启容器(不是只重启服务)。
5.3 容器内安装 Jellyfin + 配置硬解
# 容器内确认设备进来了
ls -l /dev/dri
# 期望看到 renderD128(主设备号 226)
# 安装 Jellyfin(官方推荐 jellyfin-ffmpeg7,自带全套 Mesa,无需再装)
apt update && apt install -y jellyfin-server jellyfin-web jellyfin-ffmpeg7
# 给 jellyfin 用户加权限
usermod -aG render,video jellyfin
systemctl restart jellyfin
# 验证 VAAPI 能力(应看到 gfx1103 和 H264/HEVC/AV1 等 profile)
/usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128
Jellyfin 面板设置:Dashboard → Playback → Transcoding:
- 硬件加速选 VAAPI(⚠️ AMD 没有 QSV,别选 Intel QuickSync)
- VA API Device 填
/dev/dri/renderD128 - 勾选 H264 / HEVC / MPEG2 / VC1 / VP8 / VP9 / AV1 及 10bit 变体(780M 的 VCN 4.0 支持 H.264/HEVC/VP9/AV1 硬解+硬编)
- HDR/DV tone-mapping 方法选 Vulkan
验证生效:播放视频时看转码日志是否含 -vaapi_device /dev/dri/renderD128,Jellyfin 播放页显示 hw: yes。
优点:不用开 IOMMU、宿主显示正常、配置只有几行、回滚容易。这是家用媒体服务器的首选方案。
六、方案 B:核显完整直通给 VM(vfio-pci)
适合:把 780M 完整交给一台 Windows/Linux 虚拟机。社区已确认 7840HS / 8845HS / 7940HS(780M)在 PVE 上直通成功。
⚠️ 直通后宿主机就不能再用这块核显了(显示会黑屏,只能 SSH/WebUI 管理)。直通前先把 PVE 的 SSH 和 WebUI 确认可用,否则黑屏后你还有 SSH 这条命。
6.1 内核参数 + vfio 模块
# 内核参数:iommu=pt(见 4.4),可选加 pcie_acs_override=downstream
# 加载 vfio 模块
echo -e "vfio\nvfio_iommu_type1\nvfio_pci" >> /etc/modules
update-initramfs -u -k all
reboot
6.2 vfio-pci 绑定设备
核心命令:⚠️ 把 1002:15bf,1002:1640 替换成 你在 4.1 节 lspci -nn 查到的实际 ID(不同平台可能不同,别照抄):
cat > /etc/modprobe.d/vfio.conf << 'EOF'
options vfio-pci ids=<你的GPU_ID>,<你的音频_ID>
softdep amdgpu pre: vfio-pci
softdep radeon pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
EOF
update-initramfs -u -k all
reboot
⚠️ 常见错误:把 blacklist amdgpu 当成 "设备黑名单"——blacklist/softdep 后面跟的是驱动模块名,不是 vendor:device ID。设备 ID 绑定用 options vfio-pci ids=。
验证绑定成功(把地址换成你机器实际的):
lspci -nnk -s <你的地址> | grep "Kernel driver"
# 期望: Kernel driver in use: vfio-pci
6.3 创建虚拟机(每个参数都是"必须",少一个就翻车)
直通核显的虚拟机,创建参数一个都不能错。下面逐项说明,每个都说清楚 "不这样会怎样":
| 参数 | 必须值 | 不设的后果 |
|---|---|---|
--machine q35 |
q35(不是默认的 i440fx) | i440fx 不支持 PCIe 直通,核显根本加不进去 |
--bios ovmf |
ovmf(UEFI) | SeaBIOS + 核显直通兼容性极差,黑屏/认不出是常态 |
--cpu host |
host | 不暴露完整 CPU 特性,Windows 驱动可能识别异常(Code 12) |
--ostype win10 |
按系统选:Win10 填 win10,Win11 填 win11,Linux 填 l26 |
影响 QEMU 对系统的兼容性设置,选错可能导致启动异常 |
💡 ostype 对照表(照着你装的系统选):
win10= Windows 10/2016/2019/2022,win11= Windows 11/2025,win8= Windows 8/8.1,win7= Windows 7,l26= 各类 Linux。本文示例用 win11,你装 Win10 就把命令里的win11换成win10。
|--scsihw virtio-scsi| virtio-scsi | 磁盘性能,非直通关键但推荐 |
|--net0 virtio,bridge=vmbr0| 网卡 | 必须有网络才能装驱动 / 远程桌面 |💡 记忆口诀:
q35 + ovmf + host是 GPU 直通的 "铁三角",缺一不可。
# VMID=100 示例(照抄,改内存/核心数即可;装 Win10 就把 --ostype win11 改成 --ostype win10)
qm create 100 --name win-gpu --machine q35 --bios ovmf --cpu host \
--cores 8 --memory 16384 --net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi --ostype win11
创建后还要加一块 EFI 磁盘(OVMF 必须,否则虚拟机无法启动):
qm set 100 --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=0
参考:PVE 官方文档 - PCI 直通(q35/OVMF 要求出处)
6.4 添加核显 PCI 设备(hostpci0)
# 核心命令!把 <你的GPU地址> 换成 4.1 节 lspci 查到的实际值(如 07:00 或 0d:00)
# 省略功能号 = GPU + 音频一起传,等价于 Web 界面勾选 "All Functions"
qm set 100 --hostpci0 <你的GPU地址>,pcie=1
参数说明:
- pcie=1:把设备以 PCIe 方式挂载(q35 下更规范,Windows 驱动更认)
- 务必带上音频功能(省略功能号的简写或两条 hostpci 都行)——部分 Windows 驱动要求同组设备完整,只传 GPU 可能 Code 43
- 对应配置文件 /etc/pve/qemu-server/100.conf 里会多一行 hostpci0: <你的GPU地址>,pcie=1
想确认 GPU 和音频是不是同一个地址段?
lspci -nn | grep -i amd看两行开头的地址(如07:00.0/07:00.1)——是的话用07:00这种简写一把梭(换成你查到的实际值)。
6.5 vBIOS 提取与指定(AMD 核显直通的关键一步!)
为什么需要 vBIOS? AMD 核显的 vBIOS 不在显卡上、而在主板固件(BIOS)里。OVMF 虚拟机启动时找不到 vBIOS,Windows 就会黑屏或报 Code 43。这是 AMD 核显直通和 Intel 最大的区别之一(Intel 核显一般不用管 ROM)。
步骤一:提取 vBIOS(从主板 ACPI 表的 VFCT 提取)
现成工具在社区仓库 isc30/ryzen-gpu-passthrough-proxmox(GitHub 地址),仓库里有 vbios.c 源码:
# 在 PVE 宿主机上(需要 gcc)
git clone https://github.com/isc30/ryzen-gpu-passthrough-proxmox.git
cd ryzen-gpu-passthrough-proxmox
gcc -o vbios vbios.c
# 从系统 ACPI 表提取(部分主板才有 VFCT 表)
./vbios
# 成功会生成类似: vbios_1002_15bf.bin
步骤二:把 vBIOS 放到 PVE 的 ROM 目录
# PVE 默认从 /usr/share/kvm/ 读取 romfile
mv vbios_1002_15bf.bin /usr/share/kvm/vbios_780m.bin
chmod 644 /usr/share/kvm/vbios_780m.bin # 权限必须对!
步骤三:给虚拟机指定 vBIOS
qm set 100 --hostpci0 <你的GPU地址>,pcie=1,romfile=vbios_780m.bin
⚠️ 三个容易翻车的点:
1. 用错型号的 ROM 会直接 Code 43(论坛帖 143044 实测)——780M 必须用 Phoenix 的 ROM,别拿 680M/ 老 APU 的凑
2. 文件权限:romfile 权限不对(比如 600)QEMU 会拒绝读取,表现为虚拟机无法启动
3. 没有 VFCT 表的主板:./vbios跑不出来是正常的,这时候去你主板品牌的 BIOS 更新包里提取,或用社区仓库现成的 ROM(仓库 releases 页面有各 APU 的 ROM 合集)
步骤四(可选但强烈建议):音频设备挂 AMDGopDriver.rom
OVMF 下 Raphael/Phoenix 核显的音频功能(1002:1640)常导致 Code 43,Arch Wiki 明确记载的解法是给它挂 GOP 驱动 ROM:
# 下载 AMDGopDriver.rom 放到 /usr/share/kvm/(论坛/社区仓库有)
qm set 100 --hostpci1 <你的音频地址>,pcie=1,romfile=AMDGopDriver.rom
参考:Arch Wiki - PCI passthrough via OVMF(vBIOS 与 GOP ROM 章节)
6.6 Windows 虚拟机安装顺序(避免蓝屏的黄金顺序)
- 先用默认显示设备装好 Windows(先不要加 hostpci0,装了 GPU 装系统容易黑屏)
- 装好 VirtIO 驱动、开远程桌面,能 RDP 登录
- 关机 →
qm set 100 --hostpci0 <你的GPU地址>,pcie=1,romfile=vbios_780m.bin加核显(带 vBIOS) - 开机 → RDP 登录 → Windows 发现核显 → 装 AMD 官网 Ryzen 7000 APU 离线驱动包(⚠️ 必须用 OFFLINE 离线安装包,在线安装器会报"非 AMD 官方电脑")
- 驱动下载:AMD 驱动下载页,选 Ryzen 7000 系列 APU 的显卡驱动,勾选"仅下载离线安装包" - 设备管理器确认核显无感叹号、无 Code 43
- 关机 → 删虚拟显卡 →
--display none:
bash qm set 100 --delete vga qm set 100 --display none
若 Code 43 一直不消(按顺序排查):① 确认 vBIOS 是 780M 的正确 ROM(6.5);② 音频挂了 AMDGopDriver.rom(6.5 步骤四);③ 加隐藏 hypervisor 参数;④ 关 BIOS 的 Re-Size BAR/SAM;⑤ 装 RadeonResetBugFix。
隐藏 hypervisor 标志(个别 Windows 老驱动需要):编辑 /etc/pve/qemu-server/100.conf,加一行:
args: -cpu 'host,-hypervisor,kvm=off'
参考:Proxmox 论坛 - AMD APU 核显直通讨论帖(7840HS/8845HS 等 Phoenix 平台的直通案例)与 AMD iGPU 直通 Code 43 解决帖(vBIOS/ROM 问题的实战讨论)
6.7 验证直通成功
宿主机侧:
lspci -nnk -s <你的地址> | grep "Kernel driver" # vfio-pci
qm status 100 # running
Windows 客户机侧:设备管理器显示 AMD Radeon 780M,无感叹号无 Code 43;任务管理器性能页能看到 GPU;用 DXVA Checker 或播放软件确认硬解生效。
七、AMD 780M 直通常见坑(翻车手册)
| # | 坑 | 症状 | 解决 |
|---|---|---|---|
| 1 | amd_iommu=on 误导 |
以为没开 IOMMU | 只用 iommu=pt;dmesg \| grep AMD-Vi 验证 |
| 2 | BIOS IOMMU 设 Auto | dmesg 无 AMD-Vi | 改为 Enabled |
| 3 | SVM 没开 | VM 起不来 | BIOS 开 SVM Mode |
| 4 | pve-firmware 缺 APU 固件 | amdgpu: Unable to locate a BIOS ROM / probe failed -22 |
解包 firmware-amd-graphics 拷贝到 /lib/firmware(勿 apt install,会卸 pve 内核包) |
| 5 | 内核太老(PVE 8.0 / 6.2) | 780M 不稳定/崩溃 | 升级 PVE 8.1+(kernel ≥6.5)或 PVE 9 |
| 6 | LXC 用旧 cgroup 写法 | 容器里没 /dev/dri | 用 lxc.cgroup2.devices.allow |
| 7 | Jellyfin 选错加速器 | 找不到 QSV | AMD 选 VAAPI,设备填 /dev/dri/renderD128 |
| 8 | 容器内无权限 | 转码报权限错误 | usermod -aG render,video jellyfin |
| 9 | vfio 没绑上 | lspci 显示还是 amdgpu | 检查 ids 是否是你机器实测的 ID(格式 厂商ID:设备ID,如 1002:15bf)、softdep、重建 initramfs |
| 10 | 黑名单写错对象 | 以为黑名单设备 ID | blacklist/softdep 只跟驱动模块名;设备 ID 用 options vfio-pci ids= |
| 11 | AMD Reset Bug | 停 VM 后再启动,GPU 卡死/黑屏,直到重启宿主机 | Windows 侧装 RadeonResetBugFix;或 echo device_specific > /sys/bus/pci/devices/0000:<你的地址>/reset_method;兜底重启宿主机 |
| 12 | 启动 VM 宿主机重启 | 开机整个宿主机掉电重启(Raphael/Phoenix 常见失败模式) | 核显是控制台 GPU 时最易触发:先备好 SSH/WebUI;加 initcall_blacklist=sysfb_init |
| 13 | DMA mapping failed | VM 起不来 | args: -cpu host,phys-bits=host |
| 14 | 无 GPU 画面 | NoVNC/SPICE 黑屏 | 正常现象:直通 GPU 帧缓冲不出现在 Web 控制台;用 RDP 或物理显示器 |
| 15 | 直通后想分给多个 VM | 一个核显不够用 | 780M 无 SR-IOV/mdev:LXC 共享 or 单 VM 独占,二选一 |
AMD vs Intel 核显直通关键差异
| 维度 | AMD 780M | Intel iGPU |
|---|---|---|
| IOMMU 参数 | 无需 amd_iommu=on(默认开);iommu=pt |
intel_iommu=on(6.8 前必需) |
| 驱动 | amdgpu(无 QSV,走 VAAPI) | i915(QSV/VAAPI) |
| 虚拟化拆分 | 无(无 GVT-g/mdev,无 SR-IOV) | 5~10 代有 GVT-g;12 代+ 有 i915 SR-IOV |
| vBIOS | 需从 VFCT/BIOS 提取,Code 43 高发 | 一般不用 ROM |
| 音频设备 | 独立功能 1002:1640,OVMF 下挂 AMDGopDriver.rom |
6~9 代 00:03.0;10 代+ 走 PCH 声卡 |
| 显存 | UMA Frame Buffer(系统内存预分配) | DVMT 预分配(≥64MB) |
| Reset | AMD Reset Bug(VM 重启后卡死) | 相对干净(FLR 支持好) |
八、总结
安装 PVE:下载 9.2 ISO(走清华镜像)→ Rufus DD 模式做启动盘 → 界面安装(IP 记得带 CIDR)→ 登录 https://IP:8006(Realm 选 PAM)→ 换国内源(注意 deb822 格式 + 删企业源)。
AMD 780M 核显加速:家用媒体服务器 → LXC 绑 /dev/dri(四行配置,最简单,Jellyfin 选 VAAPI);完整 GPU 给一台 VM → vfio 完整直通(BIOS SVM+IOMMU → iommu=pt → vfio 模块 → hostpci0 → 验证);别加 amd_iommu=on,别指望 SR-IOV/GVT-g。
最后送你三句话:
1. 直通前确认 SSH/WebUI 可用——核显没了你还有 SSH 这条命
2. AMD 的坑集中在 Reset Bug 和 固件缺失,先看第七节翻车手册再动手
3. 黑屏先别慌——直通 GPU 的画面本来就不走 NoVNC,用 RDP 或物理显示器
本文基于 PVE 9.2 官方文档、Arch Wiki(PCI passthrough via OVMF / AMDGPU)、Proxmox 官方 Wiki、官方 PCI ID 数据库、Linux 内核源码、Jellyfin 官方文档与 Proxmox 论坛实际案例整理。硬件差异可能导致个别行为不同,遇到问题先在 Proxmox 论坛按 "主板型号 + 780M passthrough" 搜索。
