1、进入SHELL命令窗口下
nano /etc/default/grub
#修改行 “GRUB_CMDLINE_LINUX_DEFAULT="quiet", #使其为 “GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off",
如果是amd cpu请改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off,vesafb:off",
如果是直通网卡,直通PCI网卡以后,PCI网卡上面的各个网口不能单独直通,下述代码可以实现单独的网口直通
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream"
2、更新grud
update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-6.2.16-3-pve Found initrd image: /boot/initrd.img-6.2.16-3-pve Found memtest86+x64 image: /boot/memtest86+x64.bin done
3、新增模块。修改文件/etc/modules,加入如下的行
nano /etc/modules #内容为 vfio vfio_iommu_type1 vfio_pci vfio_virqfd #网卡直通相关的用下面这套 vfio vfio_iommu_type1 vfio_pcioptions vfio_virqfd
上述就完成了PVE层的PCI直通设置,加下来我们将PVE系统禁止加载显卡驱动,目的是不与需要显卡直通的虚拟机冲突争夺HDMI通道,找到这个路径/etc/modprobe.d/pve-blacklist.conf添加一下
nano /etc/modprobe.d/pve-blacklist.conf #内容如下 #Intel核显 blacklist snd_hda_intel blacklist snd_hda_codec_hdmi blacklist i915 #N卡 blacklist radeon blacklist nouveau blacklist nvidia N卡还需要加入下面的配置到kvm.conf(据老外说是避免一些莫名其妙的错误): echo “options kvm ignore_msrs=1” > /etc/modprobe.d/kvm.conf
其他参数
# 允许不安全的中断 echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf # 忽略异常,防止虚拟机异常导致宿主机崩溃 # ignore_msrs : 忽略异常 # report_ignored_msrs : 是否报告异常 echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf
输入命令 lspci -nn|grep Graphics,查找所有PCI总线的所有设备的供应商ID和设备ID
找到显卡的设备ID(如:[8086:591d])并复制
lspci -nn|grep Graphics #显示内容如下 00:02.0 Display controller [0380]: Intel Corporation HD Graphics P630 [8086:591d] (rev 04)
找到目录 /etc/modprobe.d/ 并在目录下新建一个vfio.conf的文件
在内容里面填入
举例:options vfio-pci ids=设备ID,设备ID
#创建并编辑 nano /etc/modprobe.d/vfio.conf options vfio-pci ids=8086:591d
完成上面的配置文件修改后, 输入命令让系统更新配置
update-initramfs -u #或者是下面的命令来更新initramfs update-initramfs -u -k all
执行后可能会出现以下提示
update-initramfs: Generating /boot/initrd.img-6.5.11-7-pve Running hook script 'zz-proxmox-boot'.. Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace.. No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync. System booted in EFI-mode but 'grub-efi-amd64' meta-package not installed! Install 'grub-efi-amd64' to get updates. #按提示安装grub-efi-amd64 apt install grub-efi-amd64
重启系统后再次更新配置可能会出现以下提示
update-initramfs: Generating /boot/initrd.img-6.5.11-7-pve Running hook script 'zz-proxmox-boot'.. Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace.. No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
4、重启系统生效
reboot
重启的过程中,我们观察一下主机输出的HDMID显示,如果看上去卡着不动,无法进入到PVE 的登陆命令行界面,表示你禁用显卡成功了, 可以继续下面的操作,如果会显示输入命令行的界面,那就表示没有成功禁用显卡,还需要回炉重来。
PVE重启后,我们来验证一下PVE层的显卡直通是否已经开启
lsmod | grep vfio
如果出现回调这样类似的信息,表示成功了
vfio_pci 16384 0 vfio_pci_core 86016 1 vfio_pci irqbypass 12288 2 vfio_pci_core,kvm vfio_iommu_type1 49152 0 vfio 57344 3 vfio_pci_core,vfio_iommu_type1,vfio_pci iommufd 77824 1 vfio
查看GPU设备ID:
lspci -nn|grep Graphics
类似的回显:
00:02.0 Display controller [0380]: Intel Corporation HD Graphics P630 [8086:591d] (rev 04)
再执行下面的命令:
lspci -vvv -s 00:02.0
看有没有Kernel driver in use这一行,正常情况下应该是没有的。
如果有那么就说明你之前肯定是哪里没配置好(一般是i915的驱动没屏蔽成功)。
题外话:
查看核显以及声卡的供应商和设备ID:
lspci -n | grep -E “0300|0403”
回显如下:
00:02.0 0300: 8086:5a85 (rev 0b) 00:0e.0 0403: 8086:5a98 (rev 0b)
其中“8086:5a85”和“8086:5a98”分别就是核显和声卡的供应商ID和设备ID,把它们绑定到vifo模块:
echo “options vfio-pci ids=8086:5a85,8086:5a98” > /etc/modprobe.d/vfio.conf
5、可以在PVE WEB界面添加需要直通的PCI设备了。