宿主机配置
- 主板: Gigabyte UG2.0
- CPU: I7 8700K
- RAM: 幻光戟 32G 3200hz
- GPU: 集显 - HD630, 独显 - 华硕 Nvidia 1060 6G
- SSD: 惠普 EX950 512G, 惠普 EX920 512G, 东芝 Q200EX 480G
- OS : ARCHLINUX
- VM : WIN10 1909u20
注意: 确保CPU支持VT-x/VT-d, BIOS开启集显并且默认为集显
安装加载相关包及加载内核模块
- 安装
QUEM
及其他需要的包
sudo pacman -S qemu libvirt virt-manager ebtables dnsmasq bridge-utils openbsd-netcat ovmf
# virt-manager 图形化管理工具
# ovmf UEFI启动需要
# 联网需要的组件
### ebtables dnsmasq 用于默认的 NAT/DHCP网络
### bridge-utils 用于桥接网络
### openbsd-netcat 通过 SSH 远程管理
sudo systemctl enable libvirtd # 守护服务自启
sudo systemctl enable virtlogd
- 加载内核模块
sudo modprobe vfio vfio_pci
virtio
模块加载配置
将以下内容添加到 /etc/modules-load.d/virtio-net.conf
# Load virtio_net.ko at boot
#网络设备
virtio_net
#块设备
virtio_blk
#控制器设备
virtio_scsi
#串行设备
#virtio_serial
设置 UEFI
启动
修改以下内容
nvram = [
"/usr/share/ovmf/x64/OVMF_CODE.fd:/usr/share/ovmf/x64/OVMF_VARS.fd:/usr/share/ovmf/x64/OVMF.fd:/usr/share/ovmf/ia32/OVMF_CODE.fd:/usr/share/ovmf/ia32/OVMF_VARS.fd:/usr/share/ovmf/ia32/OVMF.fd"
]
修改内核启动参数( systemd-boot
)
sudo vim /boot/loader/entries/arch.conf
options root=PARTLABEL=root rw intel_iommu=on iommu=pt vfio-pci.ids=10de:1b83,10de:10f0,8087:0025,8086:2526 pci=realloc
### 启用iommu支持
# intel_iommu=on Intel | amd_iommu=on Amd
# iommu=pt 防止Linux接触无法通过的设备
### vfio-pci.ids 需要直通的设备ID, 通过 lspci -nn 查看
# 10de:1b83: Nvidia 1060 6G
# 10de:10f0: Nvidia audio
# 8087:0025: Intel WIFI 9260AC
# 8086:2526: Bluetooth
# 126f:2262: Nvme ssd
### kvm中直接添加, 不需要vfio接管
# 04b4:4042: IKBC keyborad
# 046d:c08b: 罗技G502
### video=efifb:off 可选项, 当dmesg|grep vfio-pci出现下面错误时可尝试启用
## vfio-pci 0000:04:00.0: BAR 3: can't reserve [mem 0xca000000-0xcbffffff 64bit]
# pci=realloc 热插拔
# 尽早加载vfio
sudo vim /etc/mkinitcpio.conf
# MODLUES 中加入
MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd)
# HOOKS
HOOKS=(modconf)
# 更新 initramfs
mkinitcpio -p linux
# 将当前用户加入kvm组
sudo usermod -a -G kvm aeno
# 屏蔽
echo "blacklist nouveau" | sudo tee -a /etc/modprobe.d/nouveau_blacklist.conf
# 重启宿主机
systemctl reboot
# 重启后查看vfio是否正常接管对应设备
dmesg | grep --color vfio
# [ 5.551363] vfio-pci 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
# [ 5.565384] vfio_pci: add [10de:1b83[ffffffff:ffffffff]] class 0x000000/00000000
# [ 5.582035] vfio_pci: add [10de:10f0[ffffffff:ffffffff]] class 0x000000/00000000
# [ 6.763044] vfio-pci 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
virt-manager
创建虚拟机并以 UEFI
启动, 传递显卡硬件ID
处理著名的 Nvidia 43
错误码
- 配置文件
hyperv
节点最后加入:
conf <vendor_id state='on' value='whatever'/>
- 配置文件
features
节点最后加入:
```conf
// TODO 独占磁盘
// TODO 透传键鼠, 蓝牙
// sudo modprobe -r btusb rfcomm iwlwifi