安装KVM的内容不再赘述,自己百度下就行了,注意使用桥接网络要手动配置网桥,不然virt-manager创建虚拟机的时候会报错,另外创建虚拟机时可能会报权限不足,修改qemu.conf的启动用户改成root可以解决,我没深度研究权限的问题,有安全考虑的同学可以去研究下
vim /etc/libvirt/qemu.conf
user = "root"
group = "root"
##默认qemu用户
我的是intel cpu,amd cpu的同学可以参考该博客,intel cpu的同学照做即可
直通步骤(支持win11)
1、前置准备:
A:bios中必须开启vt-d
B:下载virtio驱动,最新版已经支持win11,virtio-win-0.1.221以上版本
2、配置宿主机系统
A:检查iommu
##查看启动日志是否有iommu相关日志打印,关键字有DMAR: IOMMU enabled,没有进行A1操作开启iommu,有继续看一下设备分组,并继续B
dmesg | grep -i iommu
[ 0.000000] Command line: BOOT_IMAGE=(hd1,gpt2)/vmlinuz-5.14.0-165.el9.x86_64 root=/dev/mapper/cs-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=cs/root rhgb quiet intel_iommu=on
[ 0.028299] Kernel command line: BOOT_IMAGE=(hd1,gpt2)/vmlinuz-5.14.0-165.el9.x86_64 root=/dev/mapper/cs-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rd.lvm.lv=cs/root rhgb quiet intel_iommu=on
[ 0.028443] DMAR: IOMMU enabled
[ 0.124395] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.438524] iommu: Default domain type: Translated
[ 0.438524] iommu: DMA domain TLB invalidation policy: lazy mode
[ 0.509405] DMAR: IOMMU feature fl1gp_support inconsistent
[ 0.509406] DMAR: IOMMU feature pgsel_inv inconsistent
[ 0.509413] DMAR: IOMMU feature nwfs inconsistent
[ 0.509414] DMAR: IOMMU feature pasid inconsistent
[ 0.509415] DMAR: IOMMU feature eafs inconsistent
##找到核显的硬件地址,会返回一串呆冒号的数字
lspci -nn | grep 630 | awk -F ' ' '{print $1}'
00:02.0
##将上面命令反馈结果替换下面0000\:00\:02.0,:要用\转义一下
##输入命令查看核显的iommu group下是否有其他设备,有需要一起直通到虚拟机,我这只有一个核显
ls -l /sys/bus/pci/devices/0000\:00\:02.0/iommu_group/devices/
A1:开启iommu
编辑grub启动参数,增加iommu选项,加在最后即可
vim /etc/default/grub
重新生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
重启服务器,重启之后再执行dmesg |grep -i iommu,检查是否成功,没成功百度处理一下
B:屏蔽核显默认驱动
检查下核显驱动类型,我这截图是已经屏蔽成功,显卡已经直通到虚拟机,所以驱动变成了vfio-pci,如果显示的不是vfio-pci和没有Kernel driver in use项(没有的情况下也是屏蔽成功的直接直通就可以)就需要进行屏蔽操作
lspci -nnk |grep 630 -A 5
配置blacklist文件,屏蔽内核加载核显
##没有该文件直接重新创建,有就在后面追加,我这里加了4个,应该只用加1个或者2个,可以自行尝试一下,偷懒的直接加四个都行,没有其他影响
vim /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
重新生成内核,mv备份下,dracut重新生成内核,生成完成后重启服务器
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
重启之后用 lspci -nnk | grep 630 -A 5,此时应该会出现刚才描述过的情况,集显没有了“Kernel driver in use” 选项,说明屏蔽成功了
3、创建虚拟机并添加显卡
创建时选择系统类型必须选择winnt3.1(创建虚拟机分配内存必须4G以上,否则会出问题,原因见文章最后),否则会报错(原因是因为后面选的chipset的时候会影响xml文件生成,选择其他系统xml文件生成是生成的pci设备是-root结尾的,从而导致chipset不能兼容,创建虚拟机报错,有能力的也可以手动改xml文件)
chipset选择“i440FX”,默认BIOS即可,然后添加显卡到虚拟机,添加完成后启动虚拟机进行安装系统,这里就不说系统安装步骤了,另外不用重新安装核显驱动,系统会自动识别,也不建议更新显卡驱动,可能导致显卡43报错(安装系统时要用到virtio安装驱动,安装完系统后进入系统要先把virtio驱动全部装上)
安装完成后核显会占用2G内存,导致虚拟机内存占用高,这个问题可以解决,目前还没有找到配置生效的方法,知道怎么配置的可以在文章下留言
##2022年10月14日 更新:win11会自动更新核显驱动,更新成2022年7月的驱动后核显会报43错误,在设备管理器里面右键显卡选择卸载设备并勾选尝试删除驱动会把驱动降到30.X版本,重启后核显正常
##