硬件直通准备
1. 确认主板支持
主板BIOS/UEFI设置:
- 启用 VT-d(Intel CPU) 或 AMD-V(AMD CPU)。
- 禁用 CSM(仅限i440机型,需确保其他设置为UEFI模式)。
- ACS Enable(若存在,需启用,自动模式无效)。
- 启用 4G解码(4G Decoding)。
- 禁用 Resizable BAR/Smart Access Memory(AMD GPU直通时避免“代码43错误”)。
- 启用 IOMMU(AMD主板需特别注意)。
- 主显示器设置为CPU/iGPU(若CPU集成显卡)。
- 预分配内存64M。
启用IOMMU
2. 配置内核参数
编辑 /etc/default/grub
文件,修改 GRUB_CMDLINE_LINUX_DEFAULT
行:
Intel CPU:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"
AMD CPU:
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"
其他可选配置:
# GVT-g模式(共享显卡)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 video=efifb:off"
# 独占模式(无PVE控制台输出)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"
3. 参数释义
- iommu=pt:启用IOMMU,PT模式优化未直通设备性能。
- initcall_blacklist=sysfb_init:解决PVE 7.2+的核显驱动冲突。
- i915.enable_gvt=1:启用Intel GVT-g虚拟显卡技术(需支持的CPU)。
- pcie_acs_override=downstream:拆分IOMMU组,避免直通导致物理机崩溃。
- pci=nommconf:禁用PCI配置空间的内存映射,提升稳定性。
4. 更新GRUB并重启
# 更新引导配置
proxmox-boot-tool refresh
# 或
update-grub
# 重启系统
reboot
5. 验证IOMMU启用
# 检查IOMMU状态
dmesg | grep -e DMAR -e IOMMU
# 成功示例:
# [ 0.000000] DMAR: IOMMU enabled
# 验证IOMMU组
find /sys/kernel/iommu_groups/ -type l
# 检查中断重映射
dmesg | grep remapping
# 成功示例(Intel):
# [ 0.175675] DMAR-IR: Enabled IRQ remapping in x2apic mode
# 成功示例(AMD):
# AMD-Vi: Interrupt remapping enabled
显卡直通配置
1. 屏蔽显卡驱动
编辑 /etc/modprobe.d/pve-blacklist.conf
:
# NVIDIA
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
# AMD
blacklist amdgpu
blacklist radeon
# Intel
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist i915
2. 忽略显卡警告(NVIDIA专属)
编辑 /etc/modprobe.d/kvm.conf
:
options kvm ignore_msrs=1 report_ignored_msrs=0
3. 配置VFIO
获取设备ID:
# 查找显卡及音频设备ID
lspci -nn | grep VGA
lspci -n -s <设备地址>
配置vfio-pci:
编辑 /etc/modprobe.d/vfio-pci.conf
:
options vfio-pci ids=1234:5678,1234:5678 disable_vga=1
# 替换为实际设备ID,多个ID用逗号分隔
更新内核并重启:
update-initramfs -u
reboot
4. 验证显卡接管
lspci -nnk
# 成功示例:
# Kernel driver in use: vfio-pci
添加显卡到虚拟机
1. 创建虚拟机
系统选项:
- 机型:选择
q35
。 - BIOS:选择
OVMF(UEFI)
。 - CPU:选择
host
模式。 - 内存:关闭
Ballooning设备
。
- 机型:选择
2. 直通显卡
- 进入虚拟机管理界面,点击 硬件 → 添加 → PCI设备。
选择目标显卡,勾选:
- 启用所有功能。
- 主GPU(可选,可能影响启动)。
- ROM-Bar 和 PCI-Express。
Intel GVT-g虚拟化核显(Intel 5-10代CPU)
1. 配置GRUB
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 video=efifb:off"
2. 加载内核模块
编辑 /etc/modules
:
vfio
vfio_iommu_type1
vfio_pci
kvmgt
3. 验证GVT-g
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
# 成功示例:
# i915-GVTg_V5_1 i915-GVTg_V5_2 ...
注意事项
- 驱动冲突:确保所有显卡驱动被正确屏蔽。
- 内核更新:每次内核升级后需重新运行
update-initramfs -u
。 - 日志排查:使用
dmesg | tail
或journalctl
检查直通失败原因。
额外笔记:
一、开启iommu,打开编辑
nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
二、加载vfio模块,打开编辑
nano /etc/modules
加上以下内容
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
三、禁用驱动(不同PVE版本可能不同)
nano /etc/modprobe.d/pve-blacklist.conf
加入以下内容:
block AMD driver
blacklist radeon
blacklist amdgpu
block NVIDIA driver
blacklist nouveau
blacklist nvidia
block INTEL driver
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
# Nvidia
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
# AMD
blacklist amdgpu
blacklist radeon
# Intel UHD
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist i915
四、查询显卡的PCI ID
lspci|grep 570
04:00.0
查看显卡的Device ID
显卡
root@pve:~# lspci -n -s 04:00.0
04:00.0 0300: 1002:67df (rev ef)
声卡
root@pve:~# lspci -n -s 04:00.1
04:00.1 0403: 1002:aaf0
五、编辑vfio
nano /etc/modprobe.d/vfio.conf
将设备加入(两个ID就加两个)
options vfio-pci 1002:67df
options vfio-pci 1002:aaf0
或者:
options vfio-pci ids=1002:67df,1002:aaf0
六、更新grub并重启
update-grub && reboot
dmesg | grep -e DMAR -e IOMMU
从命令行运行 如果没有输出,则说明有问题。
root@pve:~# dmesg | grep -e DMAR -e IOMMU
[ 0.141371] DMAR: IOMMU enabled
root@pve:~# dmesg | grep iommu
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.8.12-4-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on video=efifb:off
[ 0.141295] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.8.12-4-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on video=efifb:off
[ 0.621854] iommu: Default domain type: Translated
[ 0.621854] iommu: DMA domain TLB invalidation policy: lazy mode
更新内核,重启
update-initramfs -u
reboot
评论 (0)