
Proxmox VE 高级配置指南
🚀 Proxmox VE 高级配置指南:SR-IOV & 硬件直通
让虚拟机直接接管硬件设备,释放物理性能极限
🔧 一、开启 IO-MMU 和 SR-IOV
1️⃣ 修改 GRUB 配置
bash
nano /etc/default/grub
在 GRUB_CMDLINE_LINUX_DEFAULT
末尾追加(按平台二选一):
bash
# Intel 平台
quiet intel_iommu=on iommu=pt pcie_aspm=off pcie_acs_override=downstream,multifunction video=efifb:off,vesafb:off,simplefb:off
# AMD 平台(替换 intel_iommu=on)
quiet amd_iommu=on iommu=pt ...
参数解析:
intel_iommu=on
/amd_iommu=on
:启用 IOMMU 硬件虚拟化iommu=pt
:直通模式提升性能pcie_acs_override=...
:强制拆分设备组(解决直通分组问题)video=...:off
:禁用帧缓冲驱动(避免资源冲突)
▶️ 更新grub:
bash
update-grub
2️⃣ 加载直通内核模块
bash
nano /etc/modules
添加以下模块:
text
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
▶️ 刷新配置:
bash
update-initramfs -u
3️⃣ 验证硬件状态
bash
# 查看网卡信息
lspci -nn | grep -i ethernet
# 检查 SR-IOV 支持(输出 >0 表示支持)
cat /sys/bus/pci/devices/0000:0c:00.0/sriov_totalvfs # 替换为您的 PCI 地址
# 查看网卡驱动
ethtool -i enp5s0f0 | grep driver
4️⃣ 自动化 VF 创建脚本
bash
nano /etc/init.d/net-sriov
脚本内容(根据网卡名修改 enp5s0f0f0
):
bash
#!/bin/sh
start() {
echo 12 > /sys/class/net/enp5s0f0f0/device/sriov_numvfs # 创建 12 个虚拟网卡
ip link set dev enp5s0f0f0 up
# 为每个 VF 设置唯一 MAC 地址
for i in {0..11}; do
ip link set dev enp5s0f0f0 vf $i mac aa:bb:cc:dd:ee:$((f1+i))
done
}
case "$1" in start) start;; *) echo "Usage: $0 start";; esac
▶️ 启用脚本并重启:
bash
chmod +x /etc/init.d/net-sriov
systemctl enable net-sriov
reboot
🎮 二、显卡直通配置
1️⃣ 屏蔽冲突驱动
bash
nano /etc/modprobe.d/pve-blacklist.conf
按显卡类型添加:
bash
# Intel 核显
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
# NVIDIA 独显
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
# AMD 显卡
blacklist radeon
blacklist amdgpu
⚠️ NVIDIA 额外配置:
bash
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
2️⃣ 绑定设备到 VFIO
bash
# 获取设备 ID
lspci -nn
# 绑定设备(替换为您的 ID)
echo "options vfio-pci ids=1e0f:0008,8086:9bc5,8086:a3f0,10de:1f82,10de:10fa disable_vga=1" > /etc/modprobe.d/vfio.conf
▶️ 刷新配置并重启:
bash
update-initramfs -u && reboot
3️⃣ 验证直通状态
bash
lspci -nnk
# 输出示例:Kernel driver in use: vfio-pci
4️⃣ 虚拟机配置优化
bash
nano /etc/pve/qemu-server/100.conf
添加以下参数(解决 NVIDIA 43 错误):args: -cpu host,kvm=off,hv_vendor_id=NV43FIX,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff
添加pcie设备时参数解析:
pcie=1
:启用 PCIe 3.0/4.0 模式rombar=0
:禁用 ROM 加载(加速启动)x-vga=0
:非主显卡时必加x-pci-sub-device-id=0x0000
:解决设备 ID 冲突
⚡ 三、IOMMU 分组优化(ACS 补丁内核)
1️⃣ 安装破解内核
bash
# 下载地址(替换实际版本)
wget https://github.com/yfdoor/PVE-Kernel/releases/xxx.deb
dpkg -i *.deb
⚠️ 如需新版proxmox-kernel-6.11.0-2内核,也可找我获取
2️⃣ 调整 GRUB 引导
bash
nano /etc/default/grub
修改为:GRUB_DEFAULT="Advanced options...>Proxmox VE, with Linux 5.13.18-1-pve"
▶️ 更新配置:
bash
update-grub && reboot
3️⃣ 验证分组效果
bash
for d in /sys/kernel/iommu_groups/*/devices/*; do
n=${d#*/iommu_groups/*}; n=${n%%/*};
echo "IOMMU Group $n: $(lspci -nns ${d##*/})";
done
理想输出:每个直通设备独立分组(如显卡单独 Group 12)
💾 四、硬盘/U 盘直通技巧
bash
# 查看磁盘 ID
ls -l /dev/disk/by-id
# SATA 直通(示例)
qm set 100 -scsi1 /dev/disk/by-id/ata-WDC-XXXXXX,discard=on,ssd=1
# USB 直通(通过 vendorID)
qm set 100 -usb0 host=13fe:3e00
# 移除直通设备
qm set 100 -delete scsi1
参数解析:
discard=on
:打通虚拟化环境下的 TRIM 指令传递通道,解决 SSD 在虚拟化中的 "写放大" 和 "性能衰减" 两大痼疾。ssd=1
:启用ssd仿真
💡 关键要点总结
安全第一:
修改
grub
前备份:cp /etc/default/grub /etc/default/grub.bak
测试参数后再持久化配置
排错工具:
dmesg | grep -i vfio
查看驱动绑定日志lsmod | grep vfio
验证模块加载
性能调优:
SR-IOV VF 数量不超过
sriov_totalvfs
限制显卡直通后关闭宿主机显示管理器(如
systemctl stop gdm
)
操作遇阻?尝试:
更新内核到最新版
apt install pve-kernel-8.4
检查 BIOS 中 VT-d/SVM 和 SR-IOV 支持是否开启
社区支持:Proxmox 论坛