Linux宿主+Windows虚拟机使用物理显卡
===
这不是一个通用教程,这是我用了几年Virtualbox饱受经常性系统间复制黏贴失效,虚拟机性能低下之后,自己电脑尝试使用Qemu虚拟化操作的备忘录。发现这几年Qemu变化好大,早些年全命令行操作现在也有图形界面了,鼠标定位问题也不存在了。文档记录和我的软件硬件有紧密联系,你要按自己实际情况调整。文档有参考 [github repository](https://github.com/xiyizi/kvm-config).
**比windows宿主+Linux虚拟机好在哪?**
- 可以切换多个不同windows版本, Linux 使用物理显卡
- 方便对windows做镜像备份
- 共享文件是以Linux为主,开发中可以做软链. 文件共享比samba共享效率高
- 方便SSH连接宿主机
# 硬件要求
- CPU要支持硬件虚拟化(为了使用 kvm)和 IOMMU(为了使用 VGA 直通)
- 主板要支持IOMMU
- 分给虚拟机的显卡要支持UEFI (正常2012年之后的显卡都可以)
# 环境清单
- 宿主机系统: Archlinux 2023
- 系统内核: 6.2.6
- 主板: 华硕
- 处理器: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
- 内存: 32 G
- 集显: Intel Corporation HD Graphics 630
- 独显: Nvidia GeForce RTX 2060
- 显示器: 2个
- 键盘: 2个
- 鼠标: 1个
- 虚拟机系统: Windows 10 64bit
# 开机按F2进入BIOS设置
- 高级->cpu设置->Intel Virtualization Technology -> 开启
- 高级->北桥->VT-d->开启
- 高级->北桥->显示设置->首选显卡->Cpu Graphics
- 启动->安全启动菜单->安全启动状态->关闭(如果是开启且不可点击看下一步)
- 启动->安全启动菜单->密钥管理->清除安全启动密钥
# 安装宿主机系统
- 制作启动U盘
- 使用 [小工具](https://github.com/keminar/linux-tools/tree/master/arch) 协助安装系统
- 以下命令可验证虚拟化支持情况
```
sudo egrep -o '(vmx|svm)' /proc/cpuinfo
sudo lsmod | grep kvm
sudo ls /dev/vfio/
```
# 宿主机启用IOMMU
1. 编辑GRUB文件
```shell
sudo vim /etc/default/grub
```
2. 在GRUB_CMDLINE_LINUX_DEFAULT 这行加入核心参数启动IOMMU, 对于 Intel CPU(VT-d),使用 intel_iommu=on iommu=pt, 对于 AMD CPU(AMD-Vi),加 iommu=pt
```shell
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt loglevel=3 quiet"
```
3. 重新生成GRUB,并重启
```shell
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo reboot
```
4. 使用如下命令之一验证是否生效
```shell
sudo dmesg | grep -e "Directed I/O"
sudo dmesg | grep -e DMAR -e IOMMU
sudo cat /proc/cmdline | grep iommu
```
# 宿主机启用VFIO
提示:这一步最开始会无法正常重启,排查是因为独显接了2显示器,同时又被禁用,修改为集显一个显示器,独显一个显示器,启动成功
1. IOMMU开启以后执行下面的脚本
```shell
#!/bin/bash
shopt -s nullglob
for d in /sys/kernel/iommu_groups/*/devices/*; do
n=${d#*/iommu_groups/*}; n=${n%%/*}
printf 'IOMMU Group %s ' "$n"
lspci -nns "${d##*/}"
done;
```
我的电脑含有独立显卡信息的一组输出
```
IOMMU Group 2:
00:01.0 PCI bridge [0604]: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 05)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU104 [GeForce RTX 2060] [10de:1e89] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation TU104 HD Audio Controller [10de:10f8] (rev a1)
01:00.2 USB controller [0c03]: NVIDIA Corporation TU104 USB 3.1 Host Controller [10de:1ad8] (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU104 USB Type-C UCSI Controller [10de:1ad9] (rev a1)
```
有文章说要一整个组是直通的最小单位,所以将上面的设备ID **8086:1901,10de:1e89,10de:10f8,10de:1ad8,10de:1ad9** 加到 _/etc/default/grub_ ,修改后如下
```shell
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt loglevel=3 quiet vfio-pci.ids=8086:1901,10de:1e89,10de:10f8,10de:1ad8,10de:1ad9"
```
重新生成GRUB,并重启
```shell
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo reboot
```
2. 提前加载vfio-pci模块
修改 _/etc/mkinitcpio.conf_(从内核 6.2 版本开始,vfio_virqfd 的功能已经并入 vfio 模块,所以不用加)
```shell
MODULES=(vfio_pci vfio vfio_iommu_type1)
```
重新生成 initramfs 并重启
```
sudo mkinitcpio -p linux
sudo reboot
```
3. 验证vfio-pci是否已经正确加载并绑定到正确的设备
```
$ sudo dmesg | grep -i vfio
[ 1.074592] VFIO - User Level meta-driver version: 0.3
[ 1.085109] vfio_pci: add [8086:1901[ffffffff:ffffffff]] class 0x000000/00000000
[ 1.085182] vfio-pci 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[ 1.085226] vfio_pci: add [10de:1e89[ffffffff:ffffffff]] class 0x000000/00000000
[ 1.085268] vfio_pci: add [10de:10f8[ffffffff:ffffffff]] class 0x000000/00000000
[ 1.085310] vfio_pci: add [10de:1ad8[ffffffff:ffffffff]] class 0x000000/00000000
[ 1.085349] vfio_pci: add [10de:1ad9[ffffffff:ffffffff]] class 0x000000/00000000
```
也可以用lspci -nnk检查
```shell
$ lspci -nnk -d 10de:1e89
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU104 [GeForce RTX 2060] [10de:1e89] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device [1043:8732]
Kernel driver in use: vfio-pci
Kernel modules: nouveau
```
# 安装qemu组件
`````shell
sudo pacman -S qemu libvirt edk2-ovmf virt-manager dnsmasq ebtables iptables bridge-utils gnu-netcat
`````
注: 安装iptables和ebtables会问是否要替换掉iptables-nft,y 确定
把自己用户加到对应组,开虚拟机不需要输入密码
```shell
sudo usermod -a -G libvirt $(whoami)
sudo usermod -a -G kvm $(whoami)
```
编辑 _/etc/libvirt/qemu.conf_ 将您的 OVMF 固件映像和运行时变量模板添加到 libvirt 配置
```shell
nvram = [
"/usr/share/ovmf/x64/OVMF_CODE.fd:/usr/share/ovmf/x64/OVMF_VARS.fd"
]
```
安装好后, 开始libvirtd服务,和自动启动nat网卡
```shell
sudo systemctl enable --now libvirtd
sudo virsh net-start default
sudo virsh net-autostart default
```
# 创建虚拟机
使用 **virt-manager** 配置虚拟机的大部分过程都无需指导,只要按照屏幕上的提示即可
特别注意如下步骤:
- 在虚拟机创建向导要求您命名虚拟机时(点击“完成”前的最后一步),勾选“在安装前自定义配置”
- 在“概况”屏幕,将“固件”选为"UEFI"
- 在“CPUs”屏幕,将CPU型号改为"host-passthrough"
- 如果要最小化IO开销,请点击“添加硬件”,并在“控制器:中选择“SCSI”类型,型号为 "VirtIO SCSI"
- Windows 不包含VirtIO驱动程序,所以你需要从[这里](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso)下载包含驱动程序的 ISO 并且添加一个IDE CDROM(Windows 7之后可以使用SATA)并且连接到刚才的 ISO 。否则在安装过程中 Windows 无法识别 VirtIO 控制器。当 Windows 安装程序要求您选择要安装的磁盘时,加载 CD-ROM 下 visscsi 目录下的驱动程序。
- 虚拟机在开始安装时您还可能会直接进入UEFI菜单,是因为虚拟机在启动的时候可能并未检测到正确的ISO文件,您需要手动指定引导顺序。输入“exit”并选择“boot manager”,您将会进入一个选择引导设备的菜单。
- 至少为宿主机留下一个鼠标和/或键盘,防止客户机出现问题的时候无法操作宿主机
- 刚装好的系统-设备管理器里会有2个没有驱动,安装virtio-win后即可正常
# 虚拟机优化
安装完系统后关闭虚拟机,备份当前配置先运行
```shell
sudo virsh dumpxml win10 >
普通网友
- 粉丝: 1126
- 资源: 5294
最新资源
- 边缘检测及其理论与应用解析
- 3DMAX路径变形插件PathDeform下载
- 100kw模块式三相光伏并网逆变器方案 提供原理图,pcb,源码以及元器件明细表 如下: 1) 功率接口板原理图和pcb,元器件明细表 2) 主控DSP板原理图(pdf);元器件明细表以及
- 4工位芯片视觉打标x_t全套技术资料100%好用.zip
- ABAQUS动,静力学模型;车辆-轨道耦合动力学;钢轨不平顺程序;批量非线性弹簧;单向弹簧(收拉不受压或受压不受拉),温度耦合等 轨道检算(超高,超限,出报告);土木建筑有限元建模分析
- 单相三电平逆变器 离网 闭环控制,SVPWM调制,中点电位平衡算法 附带参考文献
- 若依前后端分离版集成Mybatis-Plus代码生成器
- Servlet笔记练习源码
- 2万风量双级混合气旋喷淋塔sw20可编辑全套技术资料100%好用.zip
- 基于单张注册图像的会议社交人脸识别框架
- 《Internet程序开发基础》课程大作业
- 基于轮廓段和椭圆拟合的谷物籽粒分离新算法及其应用
- 结合孪生网络和Transformer提升单目标跟踪准确性的方法研究与实现(含代码、解释和2.5G的数据集)
- comsol仿真 PEM电解槽三维两相流模拟,包括电化学,两相流传质,析氢析氧,化学反应热等多物理场耦合,软件comsol,可分析多孔介质传质,析氢析氧过程对电解槽电流密度分布,氢气体积分数,氧气
- 复制Excel表格进CAD图纸中
- Abaqus轮轨瞬态动力学分析 考虑簧上质量-全轮对-轨道的轮轨瞬态滚动显式动力学模型 考虑计算区域网格细化,提供inp文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈