PVE 直通配置速查表
1. 开启 IOMMU(直通的前置条件)
作用:开启硬件虚拟化支持,这是所有直通(显卡、网卡、硬盘)的基础。
操作:通过 SSH 登录 PVE,或者在 PVE 界面的 Shell 中执行。
第一步:编辑 Grub 配置
如果是 Intel CPU(你之前的配置看起来像 Intel):
echo "GRUB_CMDLINE_LINUX_DEFAULT=\"quiet intel_iommu=on iommu=pt\"" >> /etc/default/grub
如果是 AMD CPU:
echo “GRUB_CMDLINE_LINUX_DEFAULT=\”quiet amd_iommu=on iommu=pt\”” >> /etc/default/grub
第二步:更新 Grub
update-grub
第三步:加载内核模块(让直通驱动生效)
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules
第四步:更新内核缓存
update-initramfs -k all -u
第五步:重启
reboot
验证:重启后输入
dmesg | grep iommu
如果看到 IOMMU enabled 就说明成功了。
2. 网卡直通 (PCIe Passthrough)
场景:如果你想把 PCIe 网卡的某个口(比如网口 3)完全独占给云虚拟机(而不是用桥接模式)。
原理:把物理网卡从 PVE 系统中“解绑”,直接插到虚拟机里。
第一步:查看网卡设备 ID
lspci -nn | grep Ethernet
输出示例:
02:00.0 Ethernet controller : Realtek Semiconductor Co., Ltd. RTL8125 [10ec:8125]
记下 ID:我们要用的是最后面的 [10ec:8125] ,或者前面的 02:00.0 。
第二步:屏蔽 PVE 原生驱动(防止 PVE 抢占网卡)
# 假设你的网卡 ID 是 10ec:8125,执行:
echo "options vfio-pci ids=10ec:8125" >> /etc/modprobe.d/vfio.conf
注意:如果是 Intel 网卡,驱动名可能不同,通常直接写 ID 即可。
第三步:更新并重启
update-initramfs -k all -u && reboot
第四步:PVE 界面操作
重启后,进入 PVE Web 界面。
选中你的锐鹏云虚拟机 -> 硬件 -> Add -> PCI Device。
在下拉菜单里找到你的网卡(比如 02:00.0 ),勾选 Primary Display(如果不是显卡直通,这个不用勾)和 All Functions(如果网卡有多个口,勾这个能一起直通)。
点击添加。
3. 硬盘直通 (NVMe 直通)
场景:你那块 2T NVMe 业务盘,不想走虚拟磁盘(VirtIO)的缓存层,想让锐鹏云直接控制硬盘(性能更好,寿命统计更准)。
第一步:查看硬盘 ID
ls /dev/disk/by-id/ | grep nvme
输出示例:
nvme-INTEL_SSDPEKKF256G8_BTLFxxGN
记下全名:比如 nvme-INTEL_SSDPEKKF256G8_BTLFxxGN 。
第二步:命令行直通(推荐,最稳)
假设你的云虚拟机 ID 是 100,执行:
qm set 100 -scsi2 /dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8_BTLFxxGN
解释: -scsi2 表示挂载到 SCSI 总线的第 2 个槽位。你也可以用 -virtio0 表示 VirtIO 总线。
第三步:或者在 PVE 界面操作
选中锐鹏云虚拟机 -> 硬件 -> Add -> Hard Disk。
Storage 选择 Local (/dev/sdX) 或者直接选择那个 NVMe 的盘。
Bus/Controller 选 VirtIO SCSI 或 SCSI。
💡 特别提醒(防坑指南)
不要直通错了盘:
在直通硬盘时,千万别把装 PVE 的 128G 盘给直通出去了,否则 PVE 会变砖。
确认方法:在
ls /dev/disk/by-id/
里,通常系统盘是 sda 或者名字里带 SAT’ ,NVMe 盘名字里带 nvme 。
网卡直通 vs 桥接:
桥接(Bridge):配置简单,PVE 和虚拟机可以共用网卡,适合新手(推荐你先用这个)。
直通(Passthrough):虚拟机独占网卡,性能损耗几乎为 0,适合追求极致跑分的场景。
备份:
在执行
update-grub
或修改 /etc/modules 之前,建议先执行
cp /etc/default/grub /etc/default/grub.bak
做个备份。