安然小屋 安然之家

安然小屋 安然之家

pve直通的一些优化
2026-01-11

虚拟机配置优化(核心修复)

  1. 机型与固件

    • 机型:必须设为 q35,i440fx 对新核显支持差,易导致无输出。

    • 固件:选择 “OVMF (UEFI)”,禁用 SeaBIOS;若需安全启动,可启用 “Secure Boot” 但需提前准备密钥。

  2. PCI 直通设置

    • 核显与音频设备同组直通:780M 核显的音频控制器(如 AMD 的 Audio Device)需与核显一起添加到虚拟机 PCI 设备,避免音频占用导致显示异常。

    • 启用 “Primary GPU”:在 PVE 虚拟机硬件→PCI 设备→编辑,勾选 “Primary GPU”,让核显作为虚拟机默认显示输出。

  3. 内核参数与 VFIO 驱动

    • 编辑/etc/default/grub,确保内核参数包含:

      bash
      GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"

      Intel 平台将amd_iommu=on改为intel_iommu=on

    • 更新 grub 并重启:

      bash
      update-grubreboot
    • 验证 IOMMU:dmesg | grep -i iommu,输出中应无错误,显示 “IOMMU enabled”。

    • 绑定核显到 VFIO:确认/etc/modprobe.d/vfio.conf中设备 ID 正确(如 AMD 780M 为1002:15bf),执行update-initramfs -k all -u并重启。


四、VBIOS / 固件与驱动修复

  1. 加载核显 VBIOS(关键)

    • 提取或下载 780M 的 VBIOS 文件(如780m_igd.rom),上传到 PVE 的/usr/share/kvm/目录。

    • 在虚拟机配置文件(/etc/pve/qemu-server/<VMID>.conf)中添加:

      bash
      args: -device vfio-pci,host=00:02.0,id=hostpci0,romfile=/usr/share/kvm/780m_igd.rom

      注:00:02.0为核显的 PCI 地址,用lspci | grep VGA查询。

  2. 安装正确驱动

    • Windows 虚拟机:安装 AMD 官方最新 780M 驱动,避免系统自带的基础驱动;安装后在 “显示设置” 中设为核显输出。

    • Linux 虚拟机:安装mesaamdgpu驱动,确保内核版本≥5.15(780M 需较新内核支持)。


五、高级修复(针对特殊问题)

  1. 解决 AMD 核显重置 bug(Radeon Reset Bug)

    • 安装radeonresetbugfix工具(GitHub 开源),修复核显直通后重启无输出的问题。

    • 命令(以 Debian/Ubuntu 为例):

      bash
      git clone https://github.com/torvalds/linux.git# 编译安装对应补丁,或使用预编译包
  2. QEMU 版本兼容

    • 若 PVE 版本≥8.3.5,QEMU 9.2 可能不支持 legacy-igd 模式,导致无输出。

    • 降级 QEMU(临时修复):

      bash
      apt install pve-qemu-kvm=9.1.2-3
    • 或在虚拟机配置中移除legacy-igd=1参数,保留args与 VBIOS 设置。

  3. IOMMU 组隔离

    • lspci -vnn检查核显的 IOMMU 组,确保核显与其他设备(如声卡、网卡)不在同一组,避免共享导致的冲突。

    • 若共享,添加pcie_acs_override=downstream,multifunction到内核参数,强制隔离 PCIe 设备。


六、总结与下一步

按以下顺序执行,多数问题可解决:
  1. 修复 BIOS 设置(开启 VT-d/Above 4G / 关闭 CSM)→ 切换 q35+OVMF → 移除 QXL 显卡。

  2. 绑定 VBIOS → 安装最新驱动 → 重启虚拟机。

  3. 仍无输出,检查 IOMMU 组隔离与 QEMU 版本,必要时用radeonresetbugfix

如果以上步骤都无效,可提供以下信息进一步排查:PVE 版本、虚拟机系统(Windows/Linux)、核显 PCI 地址(lspci | grep VGA)、虚拟机配置文件(/etc/pve/qemu-server/<VMID>.conf)、dmesg | grep vfio的输出。