########################################
KVM
########################################
安装
****************************************
执行下面的代码::
dnf install -y qemu-kvm virt-manager
gpasswd -a $USER libvirt
gpasswd -a $USER kvm
VirtIO
****************************************
VirtIO 是一个增强虚拟机 IO 的工具,同时还提供了粘贴板的双向同步和屏幕自由缩放。对于虚拟机而言,Linux 需要从包管理器中安装特定的驱动,Windows 需要前往 Fedora_ 下载并安装驱动,MacOS 对 VirtIO 的支持有限。
以网卡为例,只需要进入 virt-manager 中将 NIC 的设备型号设置为 virtio 即可。对于磁盘而言,安装分区必须要在安装过程中选择为 virtio 并在安装过程中加载需要的驱动(例如 Windows)
.. _Fedora: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
GVT-g
****************************************
GVT-g 是 Intel 的一项虚拟显卡功能,可以将一个物理显卡虚拟成多个显卡并供给虚拟机使用
1. 添加内核参数 ``i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=igfx_off``
2. 创建文件 :file:`/etc/modules-load.d/kvmgt.conf` 并写入内容 *kvmgt* 后重启
3. 重启后执行 ``ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/`` 不应当为空
4. 根据 指导_ 创建 rc.local 文件并写入一下内容
::
#!/bin/bash
echo "97709d2e-39ff-11ec-bf01-54b203028f37" > "/sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/create"
5. 打开虚拟机的 xml 文件(例如使用 sudo virsh edit win10)并在 devices 字段中添加以下内容
::
之后打开虚拟机,可以看到设备管理器中有一个 Intel GPU,等待 Win10 安装完驱动即可。
.. important::
使用 GVT-g 后虚拟机会黑屏,需要使用诸如 VNC 的远程桌面
.. seealso::
- `Fedora启动时加载内核模块 `_
- `Intel_GVT-g `_
- `GVTg Setup Guide `_
- `PCI 经由 OVMF 直通 `_
.. _指导: https://www.codeleading.com/article/75563269454/
硬件加速
****************************************
开启硬件加速的完整步骤为:
#. 在显卡处选择 VirtIO,并勾选 *3D 加速*
#. 在显示协议 Spice 处设置监听类型为无,并勾选 OpenGL。之后下面的显卡选择集成显卡
#. 在虚拟机安装 VirtIO 驱动
第二步是最关键的。之所以如此设置是因为:
- Spice 只支持本地加速,不支持网络。因此监听类型需要设置为无
- 对于笔记本而言,OpenGL 的显卡两个都需要试试才行
.. important::
将显卡设置为 VirtIO 会导致鼠标漂移。解决的办法是将其设置为 QXL,但是这样就没办法使用硬件加速了
显卡直通
****************************************
显卡直通需要以下几个步骤:
#. 将 :command:`intel_iommu=on iommu=pt` 添加到内核参数
#. 编辑 :file:`/etc/modprobe.d/vfio.conf` 文件,并写入 :command:`options vfio-pci ids=10de:2560,10de:228e` 其中 ids 的值是由逗号分割的 PCI ID,可以使用 :command:`lspci -nn | grep NVIDIA` 查看
.. hint::
如果编辑文件的方式不行,那么也可以通过内核参数 :command:`pci-sub.ids=` 实现
#. 编辑 :file:`/etc/modules-load.d/vfio.conf` 并写入以下内容 ::
vfio_pci
vfio
vfio_iommu_type1
vfio_virqfd
#. 使用 dracut -f --kver \`uname -r\` 将模块写入 initramfs
.. note::
经过此步骤重启后,使用 :command:`lspci -v | grep -A30 'NVIDIA'` 查看信息可以看到 ::
01:00.0 VGA compatible controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1) (prog-if 00 [VGA controller])
...
Kernel driver in use: vfio-pci
也就是说 NVIDIA 的驱动变成了 vfio-pci。这时, **显卡已经被隔离,不能再被宿主机使用**
#. 在 KVM 的设置中直接将显卡对应的 PCI 设备分配个虚拟机即可。当然,虚拟机需要安装对应的驱动
.. seealso::
- `KVM + PCI Passthrough - 简书 `_
Spice 文件共享
****************************************
实际上,Spice 使用的是 WebDav 进行文件共享。要使用此功能,需要:
1. `下载 `_ Spice WebDav Guest 工具并在客户机上安装
2. 宿主机安安装 spice-webdavd,并启动 spice-webdavd.service 服务
3. 虚拟机的 XML 文件配置中添加以下内容:
.. code-block:: xml
......
......
4. 使用 virt-viewer -a virt_name 连接到虚拟机,并在偏好中设置需要共享的文件
.. note::
由于 WebDav 自身的局限性,要打开一个文件需要先将文件完整地下载下来