首先要确定主板和CPU都支持虚拟化技术,在BIOS将VT-d、VT-x设置成enable。
以Intel为例:
VT: Intel Virtualization Technology
VT-d: Intel VT for Directed I/O
双显卡支持,一块主机用,另一块虚拟机用(一块集显,一块独立理论可以,未测试)。
二、检查支持选项a、确认内核是否支持iommu
cat /proc/cmdline | grep iommu有输出则正常
如果没有输出,将intel_iommu=on添加到grub启动文件当中
编辑grub文件 :vim /etc/default/grub
更新grub文件:grub2-mkconfig -o /boot/grub2/grub.cfg
b、确认VT-D是否正常
dmesg | grep -e DMAR -e IOMMU有箭头标的输出则正常
c、测试是否支持虚拟化(VT)
egrep -o '(vmx|svm)' /proc/cpuinfo查看是否有输出,有输出则正常。
三、禁用虚拟机使用的显卡驱动lspci命令查看显卡有两组设备,每组两个,一个显卡一个声卡。两个显卡分别是A卡Radeon RX550和N卡GeForece GT 705。
禁用虚拟机要使用的显卡驱动,计划禁用N卡驱动,然后划给虚拟机使用。
查看显卡GeForece GT 705使用的驱动:
lspci -vv -s 07:00.0 | grep driver 可以看到GT705显卡驱动为nouveau,禁用此显卡。查看显卡所带声卡使用的驱动
lspci -vv -s 07:00.1 | grep driver 可以看到声卡驱动为snd_hda_intel,禁用此声卡驱动。编辑blacklist.conf文件,将上面两个驱动放入此文件。
vim /etc/modprobe.d/blacklist.conf
vim /usr/lib/modprobe.d/dist-blacklist.conf
去掉禁用blacklist radeonfb
加上一行options nouveau modeset=0
备份原来的 initramfs nouveau image镜像
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
创建新的 initramfs image镜像
dracut /boot/initramfs-$(uname -r).img $(uname -r)
四、显卡加载vfio驱动a、加载vfio模块
modprobe vfio
modprobe vfio-pci
b、从主机卸载两个N卡
virsh nodedev-detach pci_0000_07_00_0
virsh nodedev-detach pci_0000_07_00_1
lspci -vv -s 07:00.0 | grep driver 查看是否加载vfio
lspci -vv -s 07:00.1 | grep driver 查看是否加载vfio
五、安装ovmf1、配置firmware的yum源
wget http://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo
2、安装ovmf
yum install edk2.git-ovmf-x64
3、配置 libvirtd以启用UEFI
vim /etc/libvirt/qemu.conf
确认好ovmf安装路径。文件OVMF_CODE-pure-efi.fd和OVMF_VARS-pure-efi.fd是否存在
4、重启libvirtd
systemctl restart libvirtd
六、安装win10系统见之前博客https://blog.csdn.net/hutiewei2008/article/details/85986652
安装之后使用virt-manager,添加要透传的显卡。或者修改配置文件,或者命令。
七、编译配置跳过显卡驱动校验解决Windows中安装完显卡驱动显示驱动异常43的问题。
virsh edit win10-3
os标签中添加
<loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
<nvram template='/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd'>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
features标签中添加
hyperv 标签中<vendor_id state='on' value='0123456789ab'/>
<kvm>
<hidden state='on'/>
</kvm>