使用环境说明
开启IOMMU分组功能 1 2 3 4 5 6 7 8 9 vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off,vesafb:off" update-grub
添加VFIO驱动支持 1 2 3 4 5 6 7 8 vi /etc/modules vfio vfio_iommu_type1 vfio_pci vfio_virqfd
禁用设备驱动 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 vi /etc/modprobe.d/blacklist.conf blacklist snd_hda_intel blacklist snd_soc_skl blacklist snd_hda_codec_hdmi blacklist i915 root@pve:~# lspci -nn 00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:5a85] (rev 0b) 00:0e.0 Audio device [0403]: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Audio Cluster [8086:5a98] (rev 0b) echo "options vfio-pci ids=8086:5a85,8086:5a98" > /etc/modprobe.d/vfio.confupdate-initramfs -u reboot
检查直通结果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 dmesg | grep -e DMAR -e IOMMU root@pve:~# lsmod | grep vfio vfio_pci 53248 0 vfio_virqfd 16384 1 vfio_pci irqbypass 16384 2 vfio_pci,kvm vfio_iommu_type1 32768 0 vfio 32768 2 vfio_iommu_type1,vfio_pci lspci -vvv -s 00:02.0 lspci -vvv -s 00:0e.0
设置核显直通 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso mv virtio-win.iso /var/lib/vz/template/iso/wget https://github.com/wanghuangjie/Perfect_PVE_3455/raw/master/j3455_hd500_5a85.bin mv j3455_hd500_5a85.bin /usr/share/kvm/args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=j3455_hd500_5a85.bin hostpci1: 00:0e.0,rombar=0 vga: none
无线网卡直通(可选)
NUC6CAY默认无线和有线网卡在同一组内,直接直通无线网卡会导致有线网卡掉线
PVE开启硬件PCIE直通需要开启IOMMU功能,默认Linux似乎是根据硬件所在的PCIE通道来分组的
内核源码中有个acs_override
补丁可实现分组,但我们许多的硬件过不了补丁里的判断条件,所以导致IOMMU分组打了acs_override补丁也会失败
那么我们只能把这个补丁里面的某个判断去掉来强制开启acs_override
强制开启了acs_override
后虽然IOMMU分组是完全打断了,但是如果某些功能确实硬件不支持,那么即使强制分了组使用起来也可能会有bug
强制开启acs_override
补丁需要重新编译内核,下面提供一个网友修改编译后的内核
网友修改编译后的内核来源 | 自编译pve-kernel-5.4.73-1 提取码: dcgp
安装内核重启后即可发现IOMMU分组全都打断了,每一个硬件一个分组,只要不勾选全部功能即可分开直通
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apt purge pve-kernel-5.4.73-1-pve dpkg -i *.deb vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream video=efifb:off,vesafb:off" GRUB_DEFAULT="Advanced options for Proxmox Virtual Environment GNU/Linux>Proxmox Virtual Environment GNU/Linux, with Linux 5.4.73-1-pve" update-grub
其他问题
由于addr=0x02是虚拟机默认显卡地址,编辑虚拟机配置文件添加物理显卡后再为虚拟机添加虚拟显示会造成地址重复而报错,所以设置[vga: none]
kvm: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=j3455.bin: PCI: slot 2 function 0 not available for vfio-pci, in use by VGA TASK ERROR: start failed: QEMU exited with code 1
旧点的Win10系统如果安装2020年的新版驱动可能导致设备叹号,可安装的2019年版本的驱动 26.20.100.7212
试试
PVE6.3去除订阅提醒
1 2 3 sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js systemctl restart pveproxy.service
切换国内源和添加社区源
1 2 3 4 5 6 7 8 9 rm /etc/apt/sources.list.d/pve-enterprise.listcat > /etc/apt/sources.list << EOF deb http://mirrors.ustc.edu.cn/debian buster main contrib deb http://mirrors.ustc.edu.cn/debian buster-updates main contrib deb http://mirrors.ustc.edu.cn/debian-security buster/updates main contrib deb http://mirrors.ustc.edu.cn/proxmox/debian buster pve-no-subscription EOF
VirtIO镜像中文件夹对应的驱动
1 2 3 4 5 6 7 8 9 10 11 12 NetKVM/: Virtio 网络驱动 viostor/: Virtio 块驱动 vioscsi/: Virtio SCSI驱动 viorng/: Virtio RNG驱动 vioser/: Virtio 串口驱动 Balloon/: Virtio 内存气球驱动 qxl/: 用于Windows 7及之前版本的QXL显卡驱动 qxldod/: 用于Windows 8及之后版本的QXL显卡驱动 pvpanic/: QEMU pvpanic 设备驱动 guest-agent/: QEMU Guest Agent 32bit 和 64bit 安装包 qemupciserial/: QEMU PCI 串口设备驱动