配置和管理 Windows 虚拟机
大约 226 分钟
配置和管理 Windows 虚拟机
来源:官方文档 原始多页入口:配置和管理 Windows 虚拟机 内容规模:约 224,314 字符,223 个章节标题,530 个命令/代码块,106 条提示框
阅读提要
- 副标题:设置主机、创建和管理虚拟机并了解虚拟化功能
- 摘要:Red Hat Enterprise Linux (RHEL)的虚拟化功能允许您将主机配置为运行虚拟机(VM)。使用虚拟机,您可以使用不同的操作系统,并在本地主机上拥有独立的计算环境。
- 主要章节:设置主机、创建和管理虚拟机并了解虚拟化功能;对红帽文档提供反馈;第 1 章 RHEL 中虚拟化的基本概念;第 2 章 准备 RHEL 来托管虚拟机;第 3 章 创建虚拟机;第 4 章 优化 Windows 虚拟机;第 5 章 启动虚拟机;第 6 章 将虚拟机转换为 Q35 机器类型;第 7 章 连接至虚拟机;第 8 章 关闭和重启虚拟机;第 9 章 删除虚拟机;第 10 章 查看有关虚拟机的信息
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
设置主机、创建和管理虚拟机并了解虚拟化功能
- 要点:摘要
对红帽文档提供反馈
- 要点:我们感谢您对我们文档的反馈。让我们了解如何改进它。
- 要点:通过 Jira 提交反馈(需要帐户)
- 列表:登录到 Jira 网站。
- 列表:在顶部导航栏中点 Create
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点对话框底部的 Create。
第 1 章 RHEL 中虚拟化的基本概念
- 要点:如果您对虚拟化的概念或其在 Linux 中的实现不熟悉,以下小节提供了 RHEL 10 虚拟化的一般概述:红帽提供的基本知识、优势、组件和其他可能的虚拟化解决方案。
1.1. 什么是虚拟化?
- 要点:RHEL 10 提供 虚拟化功能,它允许运行 RHEL 10 的机器 托管 多个虚拟机(VM),也称为 客户机。VM 使用主机的物理硬件和计算资源,在主机操作系统中作为用户空间进程运行一个独立的虚拟操作系统(客户机操作系统)。
- 要点:也就是说,虚拟化可以在操作系统内拥有操作系统。
- 列表:要在 RHEL 10 中使用虚拟化,请参阅 准备 RHEL 来托管虚拟机。
- 列表:除了 RHEL 10 虚拟化外,红帽还提供多个特殊的虚拟化解决方案,每个解决方案都有不同的用户重点和功能。如需更多信息,请参阅 Red Hat Virtualization 解决方案。
1.2. 虚拟化的优点
- 要点:与使用物理机器相比,使用虚拟机(VM)有以下优点:
- 要点:灵活精细的资源分配
- 列表:灵活精细的资源分配 一个虚拟机在主机机器(通常是物理机器)上运行,主机的硬件也可以分配给客户机操作系统使用。但是,物理资源分配是在软件级别上完成的,因此非常灵活。虚拟机使用的主机内存、CPU 或存储空间的比例是可以配置的,可以指定非常精细的资源请求。 例如:客户机操作系统的磁盘可以在主机的文件系统中以一个文件代表,且该磁盘的大小限制比物理磁盘的限制要小。
- 列表:软件控制的配置 虚拟机的整个配置都作为数据保存在主机上,并由软件控制。因此,虚拟机可轻松创建、删除、克隆、迁移、远程操作或连接到远程存储。 另外,虚拟机的当前状态可以随时备份为快照。然后,可以加载快照,将系统恢复到保存的状态。
- 列表:与主机分离 在虚拟内核中运行的客户机操作系统与主机操作系统分开。这意味着可在虚拟机中安装任何操作系统,即使虚拟机操作系统不稳定或受损,主机也不会受到任何影响。
- 列表:空间及成本效率 单个物理机器可以托管大量虚拟机。因此,无需多个物理机器执行同样的任务,因此降低了与物理硬件关联的空间、电源和维护的要求。
- 列表:软件兼容性 因为虚拟机可以使用不同于其主机的操作系统,所以通过虚拟化,可以运行最初没有为主机操作系统发布的应用程序。例如,使用 RHEL 8 客户机操作系统,您可以在 RHEL 10 主机系统上运行为 RHEL 8 发布的应用程序。 注意 不是所有操作系统都作为 RHEL 10 主机中的客户机操作系统被支持。详情请查看 RHEL 10 虚拟化中的推荐功能。
- 注意:注意 不是所有操作系统都作为 RHEL 10 主机中的客户机操作系统被支持。详情请查看 RHEL 10 虚拟化中的推荐功能。
1.3. 虚拟机组件及其交互
- 要点:RHEL 10 中的虚拟化由以下主要软件组件组成:
- 要点:虚拟机监控程序(Hypervisor)
- 列表:元数据,如虚拟机名称、时区和其他有关虚拟机的信息。
- 列表:对虚拟机中的设备的描述,包括虚拟 CPU(vCPUS)、存储设备、输入/输出设备、网络接口卡及其他真实和虚拟硬件。
- 列表:虚拟机设置,如它可以使用的最大内存量、重启设置和其他有关虚拟机行为的设置。有关 XML 配置内容的更多信息,请参阅示例虚拟机 XML 配置。
- 注意:注意 尽管 QEMU 是架构的基本组件,但由于安全问题,它并不适用于直接在 RHEL 10 系统中使用。因此,红帽不支持 qemu-* 命令,强烈建议您使用 libvirt 与 QEMU 进行交互。
1.4. 用于虚拟化管理的工具和界面
- 要点:您可以使用命令行(CLI)或多个图形用户界面(GUI)管理 RHEL 10 中的虚拟化。
- 要点:命令行界面
- 列表:virsh - 一个多用途的虚拟化命令行工具程序和 shell,根据提供的参数,可以实现不同功能。例如: 启动和关闭虚拟机 - virsh start 和 virsh shutdown 列出可用的虚拟机 - virsh list 从配置文件创建虚拟机 - virsh create 进入虚拟化 shell - virsh 如需更多信息,请参阅您系统上的 virsh (1) 手册页。
- 列表:启动和关闭虚拟机 - virsh start 和 virsh shutdown
- 列表:列出可用的虚拟机 - virsh list
- 列表:从配置文件创建虚拟机 - virsh create
- 列表:进入虚拟化 shell - virsh
- 列表:virt-install - 用于创建新虚拟机的 CLI 工具。如需更多信息,请参阅您系统上的 virt-install (1) 手册页。
1.5. 用于虚拟化的用户空间连接类型
- 要点:主机上的虚拟机(VM)使用以下 libvirt 连接类型之一到 RHEL 10 用户空间:
- 要点:另外,会话连接中的虚拟机无法使用需要 root 权限的功能,例如:
- 列表:高级网络 - 您不能设置系统网桥或 tap 设备。您仅限于 user-mode (passt)网络,且无法配置虚拟机的完整外部可见性。
- 列表:PCI 设备直通 修改虚拟机的 PCI 主机硬件的设备分配是不可能的。
- 列表:会话 连接中的自动启动虚拟机无法在系统引导时自动启动。
- 列表:系统级存储池和虚拟机日志 - 在系统 连接中,存储池和虚拟机日志文件保存在系统目录中,如 /etc/libvirt 和 /var/lib/libvirt。在 会话连接 中,用户仅限于保存在其 主目录中的文件。这样可防止管理主机范围内的存储或集中查看日志。
- 注意:注意 除非另有明确说明,否则本文档中的信息将假定您有 root 特权并可使用 libvirt 的系统连接。
1.6. 红帽虚拟化解决方案
- 要点:以下红帽产品基于 RHEL 10 虚拟化功能构建,并扩展了 RHEL 10 中的 KVM 虚拟化功能。另外,RHEL 10 虚拟化的许多限制 不适用于这些产品:
- 要点:OpenShift Virtualization 基于 KubeVirt 技术,作为 Red Hat OpenShift Container Platform 的一部分,并可在容器中运行虚拟机。
第 2 章 准备 RHEL 来托管虚拟机
- 要点:要在 RHEL 10 中使用虚拟化,您必须安装虚拟化软件包并确保将您的系统配置为托管虚拟机(VM)。
2.1. 准备 AMD64 或 Intel 64 系统以托管虚拟机
- 要点:要在运行 RHEL 10 的 AMD64 或 Intel 64 系统中设置 KVM 管理程序并创建虚拟机(VM),请启动必要的服务。
- 要点:先决条件
- 列表:在您的主机上 已安装并注册了 Red Hat Enterprise Linux 10。
- 列表:您的系统满足以下硬件要求以作为虚拟主机工作: 主机的构架支持 KVM 虚拟化。 有以下最小系统资源可用: 主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。 主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。
- 列表:主机的构架支持 KVM 虚拟化。
- 列表:有以下最小系统资源可用: 主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。 主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。
- 列表:主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。
- 列表:主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。
- 命令/配置摘录:
# dnf install qemu-kvm libvirt virt-install virt-viewer
# for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done2.2. 在虚拟机上启用 QEMU 客户机代理功能
- 要点:要在 RHEL 10 系统上托管的虚拟机(VM)中使用某些功能,您必须首先将虚拟机配置为使用 QEMU 客户机代理(GA)。
- 要点:有关这些功能的完整列表,请参阅 需要 QEMU 客户机代理 的虚拟化功能。
2.2.1. 在 Windows 客户机上启用 QEMU 客户机代理
- 要点:要允许 RHEL 主机在 Windows 虚拟机(VM)上 执行某些操作子集,您必须启用 QEMU 客户机代理(GA)。为此,请将包含 QEMU 客户机代理安装程序的存储设备添加到现有虚拟机或者在创建新虚拟机时,在 Windows 客户机操作系统上安装驱动程序。
- 要点:要使用图形界面安装客户机代理(GA),请参阅以下流程 。要在命令行上安装 GA,请使用 Microsoft Windows 安装程序(MSI)。
- 列表:带有客户机代理的安装介质被附加到虚拟机。有关准备该介质的步骤,请参考在主机中准备 virtio 驱动程序安装介质。
- 列表:在 Windows 客户机操作系统中,打开 File Explorer 应用程序。
- 列表:单击 This PC。
- 列表:在 Devices and drives 窗格中,打开 virtio-win 介质。
- 列表:打开 guest-agent 文件夹。
- 列表:根据安装在虚拟机上的操作系统,运行以下一个安装程序: 如果使用 32 位操作系统,请运行 qemu-ga-i386.msi 安装程序。 如果使用 64 位操作系统,请运行 qemu-ga-x86_64.msi 安装程序。
2.2.2. 需要 QEMU 客户机代理的虚拟化功能
- 要点:如果您在虚拟机(VM)上启用了 QEMU 客户机代理(GA),您可以在主机上使用以下命令来管理虚拟机:
- 要点:指示客户机修剪其文件系统,这有助于减少迁移期间需要传输的数据。
- 列表:在 Windows 客户机上启用 QEMU 客户机代理
- 命令/配置摘录:
# setsebool virt_qemu_ga_read_nonsecurity_files on
# setsebool virt_qemu_ga_manage_ssh on- 注意:重要 如果要使用这个命令管理 Linux 虚拟机,您还必须在客户机操作系统中设置以下 SELinux 布尔值: # setsebool virt_qemu_ga_read_nonsecurity_files on
- 注意:重要 如果要使用这个命令管理 Linux 虚拟机,您还必须在客户机操作系统中设置以下 SELinux 布尔值: # setsebool virt_qemu_ga_manage_ssh on
2.3. 设置 web 控制台以管理虚拟机
- 要点:在使用 RHEL 10 web 控制台管理虚拟机(VM)之前,您必须在主机上安装 web 控制台虚拟机插件。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:安装 cockpit-machines 插件。 # dnf install cockpit-machines
- 列表:登录到 RHEL 10 web 控制台。
- 列表:如果安装成功,则 Virtual Machines 会显示在 web 控制台侧菜单中。
- 列表:使用 RHEL 10 web 控制台管理系统
- 命令/配置摘录:
# dnf install cockpit-machines第 3 章 创建虚拟机
- 要点:要在 RHEL 10 中创建虚拟机(VM),您可以使用命令行或 RHEL 10 web 控制台。
3.1. 使用命令行创建虚拟机
- 要点:您可以使用 virt-install 工具在 RHEL 10 主机上创建虚拟机(VM)。
- 要点:先决条件
- 列表:虚拟化已在您的主机系统中启用。
- 列表:您有足够的系统资源来分配给虚拟机,如磁盘空间、RAM 或 CPU。根据虚拟机的预期任务和工作负载,推荐的值可能会有很大不同。
- 列表:操作系统(OS)安装源可存在于本地或者网络中。可以是以下之一: 安装介质的 ISO 镜像 现有虚拟机安装的磁盘镜像 警告 在 RHEL 10 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库。 另请注意,红帽只对 一组有限的客户机操作系统提供支持。
- 列表:安装介质的 ISO 镜像
- 列表:现有虚拟机安装的磁盘镜像 警告 在 RHEL 10 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库。 另请注意,红帽只对 一组有限的客户机操作系统提供支持。
- 列表:要创建使用 libvirt 系统 连接的虚拟机,您必须具有 root 权限,或者位于主机上的 libvirt 用户组中。如需更多信息,请参阅 虚拟化 的用户空间连接类型。
- 命令/配置摘录:
# virt-install \ --name demo-guest1 --memory 2048 \ --vcpus 2 --disk size=80 --osinfo win10 \ --cdrom /home/username/Downloads/Win10install.iso
# virt-install \ --name demo-guest2 --memory 4096 --vcpus 4 \ --disk none --livecd --osinfo rhel10.0 \ --cdrom /home/username/Downloads/rhel10.iso- 注意:警告 在 RHEL 10 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库。
- 注意:注意 要列出--osinfo 参数的所有可用值,请运行 virt-install --osinfo list 命令。 如需更多详细信息,您还可以运行 osinfo-query os 命令。但是,您可能需要先安装 libosinfo-bin 软件包。
3.2. 使用 web 控制台创建虚拟机
- 要点:您可以使用 web 控制台在 RHEL 10 主机上的 GUI 中创建虚拟机(VM)。
3.2.1. 使用 web 控制台创建新虚拟机
- 要点:您可以使用 RHEL 10 web 控制台在之前准备好的主机上创建新虚拟机。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:虚拟化已在您的主机系统中启用。
- 列表:Web 控制台 VM 插件安装在主机系统上。
- 列表:要创建使用 libvirt 系统 连接的虚拟机,您必须具有 root 权限,或者位于主机上的 libvirt 用户组中。如需更多信息,请参阅 虚拟化 的用户空间连接类型。
- 列表:您有足够的系统资源来分配给虚拟机,如磁盘空间、RAM 或 CPU。根据虚拟机的预期任务和工作负载,推荐的值可能会有很大不同。
- 列表:在 web 控制台的 Virtual Machines 界面中,点 Create VM。 此时会出现 Create new virtual machine 对话框。
- 注意:注意 要从 web 控制台直接下载并安装 Red Hat Enterprise Linux,您必须在 Offline token 字段中添加一个离线令牌。
- 注意:注意 如果您不想在创建虚拟机后立即安装操作系统,您可以在虚拟机界面中选择虚拟机并单击 Install 按钮来实现它。
3.2.2. 使用 web 控制台导入磁盘镜像来创建虚拟机
- 要点:您可以通过在 RHEL 10 web 控制台中导入现有虚拟机安装的磁盘镜像来创建虚拟机(VM)。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件安装在您的系统上。
- 列表:您有足够的系统资源来分配给虚拟机,如磁盘空间、RAM 或 CPU。根据虚拟机的预期任务和工作负载,推荐的值可能会有很大不同。
- 列表:您已下载了现有虚拟机安装的磁盘镜像。
- 列表:在 web 控制台的 Virtual Machines 界面中,单击 Import VM。 此时会出现 Import a virtual machine 对话框。
- 列表:输入您要创建的虚拟机的基本配置: Name - 虚拟机的名称。 Disk image - 主机系统上虚拟机现有磁盘映像的路径。 Operating system - 在 VM 磁盘上运行的操作系统。请注意,红帽只对一组有限的客户机操作系统提供支持。 Memory - 分配给虚拟机使用的内存量。
3.2.3. 使用 web 控制台,使用云镜像身份验证创建虚拟机
- 要点:默认情况下,发行版云镜像没有登录帐户。但是,通过使用 RHEL web 控制台,您现在可以创建虚拟机(VM),并指定 root 和用户帐户登录凭证,然后传给 cloud-init。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:虚拟化已在您的主机系统中启用。
- 列表:您有足够的系统资源来分配给虚拟机,如磁盘空间、RAM 或 CPU。根据虚拟机的预期任务和工作负载,推荐的值可能会有很大不同。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 web 控制台的 Virtual Machines 界面中,点 Create VM。 此时会出现 Create new virtual machine 对话框。
3.3. 创建 Windows 虚拟机
- 要点:您可以在 RHEL 10 主机上创建完全虚拟化的 Windows 机器,在虚拟机(VM)中启动图形 Windows 安装程序,并优化已安装的 Windows 客户机操作系统(OS)。
- 要点:要创建虚拟机并安装 Windows 客户机操作系统,请使用 virt-install 命令或 RHEL 10 web 控制台。
- 列表:Windows OS 安装源可以是以下之一,并在本地或网络上可用: 安装介质的 ISO 镜像 现有虚拟机安装的磁盘镜像
- 列表:安装介质的 ISO 镜像
- 列表:现有虚拟机安装的磁盘镜像
- 列表:带有 KVM virtio 驱动程序的存储介质. 要创建此介质,请参阅在主机中准备 virtio 驱动程序安装介质。
- 列表:如果要安装 Windows 11,必须在主机上安装 edk2-ovmf、swtpm 和 libtpms 软件包。
- 列表:创建虚拟机。具体步骤请参阅创建虚拟机,但请注意以下具体信息。 如果您使用 virt-install 工具创建虚拟机,请在命令中添加以下选项: 带有 KVM virtio 驱动程序的存储介质.例如: --disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom 要安装的 Windows 版本。例如,对于 Windows 10 和 11: --os-variant win10 要获得可用 Windows 版本列表以及相应的选项,请使用以下命令: # osinfo-query os 如果您要安装 Windows 11,启用 统一可扩展固件接口 (UEFI) 和虚拟信任平台模块…
- 命令/配置摘录:
--disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom
--os-variant win10第 4 章 优化 Windows 虚拟机
- 要点:当在 RHEL 10 中托管的虚拟机(VM)中使用 Microsoft Windows 作为客户机操作系统时,客户机的性能可能会受到负面影响。
- 要点:因此,您可以通过执行以下操作的任意组合来优化 Windows 虚拟机的性能:
- 列表:使用半虚拟驱动程序。如需更多信息,请参阅为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:启用 Hyper-V enlightenments。如需更多信息,请参阅启用 Hyper-Vlightenments。
- 列表:配置 NetKVM 驱动程序参数。如需更多信息,请参阅配置 NetKVM 驱动程序参数。
- 列表:优化或禁用 Windows 后台进程。如需更多信息,请参阅优化 Windows 虚拟机上的后台进程。
4.1. 为 Windows 虚拟机安装 KVM 半虚拟驱动程序
- 要点:提高 Windows 虚拟机(VM)性能的主要方法是为客户机操作系统上的 Windows 安装 KVM 半虚拟化(virtio)驱动程序。
- 要点:要在 Windows 虚拟机上安装驱动程序,请执行以下操作:
- 列表:在主机机器上准备安装介质。如需更多信息,请参阅在主机中准备 virtio 驱动程序安装介质。
- 列表:将安装介质附加到现有 Windows 虚拟机,或者在创建新 Windows 虚拟机时附加该介质。如需更多信息,请参阅在 RHEL 上安装 Windows 虚拟机。
- 列表:在 Windows 客户机操作系统上安装 virtio 驱动程序。如需更多信息,请参阅在 Windows 客户端中安装 virtio 驱动程序。
- 列表:在 Windows 客户机操作系统上启用 QEMU 客户机代理。如需更多信息,请参阅在 Windows 客户机 上安装 QEMU 客户机代理。
- 注意:注意 virtio-win 驱动程序针对 Windows 10 和 11 的最新版本进行了认证(WHQL),可在相应的 virtio-win 发布时提供。但是,virtio-win 驱动程序通常经过了测试,并可望在 Windows 10 和 11 之前的构建中正常工作。
4.1.1. Windows virtio 驱动程序如何工作
- 要点:半虚拟化驱动程序通过降低 I/O 延迟并提高几乎裸机级别的吞吐量来提高虚拟机(VM)的性能。您可以将半虚拟化驱动程序用于运行 I/O 密集型任务和应用程序的虚拟机。
- 要点:VirtIO 驱动程序是 KVM 的半虚拟化设备驱动程序,适用于在 KVM 主机上运行的虚拟机。这些驱动程序由 virtio-win 软件包提供,其中包括用于以下目的的驱动程序:
- 列表:块(存储)设备
- 列表:网络接口控制器
- 列表:视频控制器
- 列表:内存 ballooning 设备
- 列表:半虚拟串口设备
- 列表:熵源设备
- 注意:注意 有关模拟、virtio 和分配设备的更多信息,请参阅 将主机设备附加到虚拟机。
4.1.2. 在主机中准备 virtio 驱动程序安装介质
- 要点:要在 Windows 虚拟机(VM)中安装或更新 KVM virtio 驱动程序,您必须首先在主机上准备 virtio 驱动程序安装介质。为此,请将 virtio-win 软件包提供的 .iso 文件作为存储设备附加到 Windows 虚拟机。
- 要点:先决条件
- 列表:确定在 RHEL 10 主机系统中启用了虚拟化。如需更多信息,请参阅准备 RHEL 来托管虚拟机。
- 列表:确保具有虚拟机的 root 访问权限。
- 列表:刷新您的订阅数据: # subscription-manager refresh All local data refreshed
- 列表:获取 virtio-win 软件包的最新版本。 如果没有安装 virtio-win : # dnf install -y virtio-win 如果安装了 virtio-win : # dnf upgrade -y virtio-win 如果安装成功,则 virtio-win 驱动程序文件位于 /usr/share/virtio-win/ 目录中。这包括 ISO 文件和包含驱动程序文件的 drivers 目录,每个体系结构和支持 Windows 版本对应一个。 # ls /usr/share/virtio-win/ agents.json drivers/ guest-agent/ info.json /installer /qx…
- 列表:如果没有安装 virtio-win : # dnf install -y virtio-win
- 列表:如果安装了 virtio-win : # dnf upgrade -y virtio-win 如果安装成功,则 virtio-win 驱动程序文件位于 /usr/share/virtio-win/ 目录中。这包括 ISO 文件和包含驱动程序文件的 drivers 目录,每个体系结构和支持 Windows 版本对应一个。 # ls /usr/share/virtio-win/ agents.json drivers/ guest-agent/ info.json /installer /qxl-wddm-dod release-drivers-versions.txt /spice-vdagent /tools virtio-win…
- 命令/配置摘录:
# subscription-manager refresh All local data refreshed
# dnf install -y virtio-win4.1.3. 在 Windows 客户端中安装 virtio 驱动程序
- 要点:要在 Windows 客户机操作系统上安装 KVM virtio 驱动程序,您必须添加一个包含驱动程序(在创建虚拟机(VM)之前或之后)的存储设备,并在 Windows 客户机操作系统中安装驱动程序。
- 要点:此流程提供了使用图形界面安装驱动程序的说明。您还可以使用 Microsoft Windows Installer (MSI) 命令行界面。
- 列表:带有 KVM virtio 驱动程序的安装介质必须附加到虚拟机。有关准备该介质的步骤,请参考在主机中准备 virtio 驱动程序安装介质。
- 列表:带有 KVM virtio 驱动程序的存储介质必须附加到 Windows 虚拟机中。
- 列表:在 Windows 客户机操作系统中,打开 File Explorer 应用程序。
- 列表:单击 This PC。
- 列表:在 Devices and drives 窗格中,打开 virtio-win 介质。
- 列表:根据安装在虚拟机上的操作系统,运行其中一个安装程序: 如果使用 32 位操作系统,请运行 virtio-win-gt-x86.msi 安装程序。 如果使用 64 位操作系统,请运行 virtio-win-gt-x64.msi 安装程序。
4.1.4. 更新 Windows 客户机上的 virtio 驱动程序
- 要点:要更新 Windows 客户机操作系统(OS)上的 KVM virtio 驱动程序,如果 Windows OS 版本支持,您可以使用 Windows Update 服务。如果不支持,请从附加到 Windows 虚拟机(VM)的 virtio 驱动程序安装介质中重新安装驱动程序。
- 要点:先决条件
- 列表:安装了 virtio 驱动程序的 Windows 客户机操作系统。
- 列表:如果没有使用 Windows Update,则必须将带有最新 KVM virtio 驱动程序的安装介质附加到 Windows 虚拟机上。有关准备该介质的步骤,请参考在主机中准备 virtio 驱动程序安装介质。
- 列表:启动 Windows 虚拟机,并登录到其客户机操作系统。
- 列表:进入dao Optional updates 页面: Settings → Windows Update → Advanced options → Optional updates
- 列表:从 Red Hat, Inc. 安装所有更新。
- 列表:打开 Windows 命令提示符: 使用 Super+R 键盘快捷键。 在显示的窗口中,输入 cmd 并按 Ctrl+Shift+Enter 以管理员身份运行。
- 命令/配置摘录:
C:\WINDOWS\system32\netsh dump > backup.txt
C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart4.2. 启用 Hyper-V enlightenments
- 要点:Hyper-V enlightenments 为 KVM 提供了一个模拟 Microsoft Hyper-V hypervisor 的方法,这可以提高 Windows 虚拟机的性能。
4.2.1. 在 Windows 虚拟机上启用 Hyper-V enlightenments
- 要点:您可以启用 Hyper-V enlightenments,它在 RHEL 10 主机中运行的 Windows 虚拟机(VM)中提供更好的性能。
- 要点:流程
- 列表:使用 virsh edit 命令打开虚拟机的 XML 配置。例如: # virsh edit windows-vm
- 列表:将以下 <hyperv> 子部分添加到 XML 的 <features> 部分: <features> [...] <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <fr…
- 列表:按如下方式更改配置的 clock 部分: <clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
- 列表:保存并退出 XML 配置。
- 列表:如果虚拟机正在运行,请重新启动它。
- 列表:使用 virsh dumpxml 命令显示正在运行的虚拟机的 XML 配置。如果包括以下段,则虚拟机上启用了 Hyper-V enlightenments 。 <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <frequencies state='on'/> <reset sta…
- 命令/配置摘录:
# virsh edit windows-vm
<features> [...] <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='KVM Hv'/> <vpindex state='on'/> <runtime state='on' /> <synic state='on'/> <stimer state='on'> <direct state='on'/> </stimer> <frequencies state='on'/> <reset state='on'/> <tlbflush state='on'/> <reenlightenment state='on'/> <ipi state='on'/> <evmcs state='on'/> </hyperv> [...] </features>4.2.2. 可配置 Hyper-V enlightenments
- 要点:您可以配置特定的 Hyper-V 功能来优化 Windows 虚拟机。下表提供了有关这些可配置 Hyper-V 功能及其值的信息。
- 注意:注意 这个功能只供 Intel 处理器使用。
- 表格样本(共 16 行):
- Enlightenment | 描述 | 值
- evmcs | 在 L0(KVM)和 L1(Hyper-V) hypervisor 之间实施半虚拟化协议,从而使 L2 更快地退出到 hypervisor 。 注意 这个功能只供 Intel 处理器使用。 | on, off
- frequencies | 启用 Hyper-V frequency Machine Specific Registers (MSR)。 | on, off
- ipi | 启用半虚拟化处理器间中断(IPI)支持。 | on, off
4.3. 配置 NetKVM 驱动程序参数
- 要点:安装 NetKVM 驱动程序后,您可以对其进行配置以更好地适合您的环境。您可以使用 Windows 设备管理器(devmgmt.msc)配置驱动程序参数。
- 要点:先决条件
- 列表:NetKVM 驱动程序安装在虚拟机上。 如需更多信息,请参阅为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:打开 Windows Device Manager。 有关打开设备管理器的详情,请参考 Windows 文档。
- 列表:找到 Red Hat VirtIO Ethernet Adapter。 在 Device Manager 窗口中,点 Network adapters 旁边的 +。 在网络适配器列表中,双击 Red Hat VirtIO Ethernet Adapter。 该设备的 Properties 窗口将打开。
- 列表:在 Device Manager 窗口中,点 Network adapters 旁边的 +。
- 列表:在网络适配器列表中,双击 Red Hat VirtIO Ethernet Adapter。 该设备的 Properties 窗口将打开。
- 列表:查看设备参数。 在 Properties 窗口中,点击 Advanced 选项卡。
- 注意:重要 修改驱动程序的参数会导致 Windows 重新加载该驱动程序。这会中断现有的网络活动。
4.4. NetKVM 驱动程序参数
- 要点:下表提供了有关可配置的 NetKVM 驱动程序日志记录参数的信息。
- 要点:下表提供了有关可配置的 NetKVM 驱动程序初始参数的信息。
- 列表:INF 枚举关键字
- 列表:可编辑的 INF 关键字
- 注意:注意 高日志级别会减慢您的虚拟机速度。
- 表格样本(共 3 行):
- 参数 | 描述 2
- Logging.Enable | 确定是否启用日志记录的布尔值。默认值为 Enabled。
- Logging.Level | 定义日志级别的整数。当整数增加时,日志的详细程度也会增加。 默认值为 0(仅错误)。 1-2 添加配置信息。 3-4 添加数据包流信息。 5-6 添加中断以及 DPC 级别追踪信息。 注意 高日志级别会减慢您的虚拟机速度。
4.5. 在 Windows 虚拟机中优化后台进程
- 要点:要优化运行 Windows OS 的虚拟机(VM)的性能,您可以配置或禁用各种 Windows 进程。
- 要点:流程
- 列表:删除未使用的设备,如 USB 或 CD-ROM,并禁用端口。
- 列表:禁用后台服务,如 SuperFetch 和 Windows Search。有关停止服务的详情,请参考禁用系统服务或 Stop-Service。
- 列表:禁用 useplatformclock。为此,请运行以下命令: # bcdedit /set useplatformclock No
- 列表:检查和禁用不必要的调度任务,如调度的磁盘清除。有关如何操作的更多信息,请参阅 禁用已调度的任务。
- 列表:确定磁盘没有加密。
- 列表:减少服务器应用程序的周期性活动。您可以编辑对应的计时器。如需更多信息,请参阅多媒体计时器。
- 命令/配置摘录:
# bcdedit /set useplatformclock No- 注意:警告 如果您更改配置,某些进程可能无法按预期工作。
第 5 章 启动虚拟机
- 要点:要在 RHEL 10 中启动虚拟机(VM),您可以使用 命令行界面 或 web 控制台 GUI。
- 要点:先决条件
- 列表:在启动虚拟机前,它必须被创建,理想情况下,还要使用操作系统进行安装。请参阅 创建虚拟机。
5.1. 使用命令行启动虚拟机
- 要点:您可以使用命令行界面(CLI)启动关闭的虚拟机(VM)或恢复保存的虚拟机。通过使用 CLI,您可以启动本地和远程虚拟机。
- 要点:先决条件
- 列表:已定义的一个不活跃地虚拟机。
- 列表:虚拟机的名称。
- 列表:对于远程虚拟机: 虚拟机所在主机的 IP 地址。 对主机的 root 访问权限。
- 列表:虚拟机所在主机的 IP 地址。
- 列表:对主机的 root 访问权限。
- 列表:如果要启动使用 libvirt 系统连接的虚拟机,则必须具有 root 特权或主机上的 libvirt 用户组中。如需更多信息,请参阅 虚拟化 的用户空间连接类型。
- 命令/配置摘录:
# virsh start demo-guest1 Domain 'demo-guest1' started
# virsh -c qemu+ssh://root@192.0.2.1/system start demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' started5.2. 使用 web 控制台启动虚拟机
- 要点:如果虚拟机(VM) 处于关闭状态,您可以使用 RHEL 10 web 控制台启动它。您还可以将虚拟机配置为在主机启动时自动启动。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:已定义的一个不活跃地虚拟机。
- 列表:虚拟机的名称。
- 列表:如果要启动使用 libvirt 系统连接的虚拟机,则必须具有 root 特权或主机上的 libvirt 用户组中。如需更多信息,请参阅 虚拟化 的用户空间连接类型。
- 列表:在 Virtual Machines 界面中,点击您要启动的虚拟机。 此时将打开一个新页面,其中包含有关所选虚拟机的详细信息,以及关闭和删除虚拟机的控制。
5.3. 当主机启动时自动启动虚拟机
- 要点:当一个带有运行的虚拟机(VM)的主机重启时,虚拟机将关闭,默认必须手动启动。要确保虚拟机在其主机运行时处于活跃状态,您可以将虚拟机配置为自动启动。
- 要点:先决条件
- 列表:已创建了虚拟机
- 列表:使用 virsh autostart 工具将虚拟机配置为在主机启动时自动启动。 例如,以下命令将 demo-guest1 虚拟机配置为自动启动: # virsh autostart demo-guest1 Domain 'demo-guest1' marked as autostarted
- 列表:如果您使用不是由 libvirt 管理的网络接口,则也必须对 systemd 配置进行额外的更改。否则,受影响的虚拟机可能无法启动。 注意 例如,这些接口包括: NetworkManager 创建的网桥设备 网络配置为使用 <forward mode='bridge'/> 在 systemd 配置目录树中,如果 virtqemud.service.d 目录尚不存在,则创建该目录。 # mkdir -p /etc/systemd/system/virtqemud.service.d/ 在之前创建的目录中创建一个 10-network-online.conf systemd 单元覆盖文件。此文件的内容覆盖 virtqemud 服务的默…
- 列表:在 systemd 配置目录树中,如果 virtqemud.service.d 目录尚不存在,则创建该目录。 # mkdir -p /etc/systemd/system/virtqemud.service.d/
- 列表:在之前创建的目录中创建一个 10-network-online.conf systemd 单元覆盖文件。此文件的内容覆盖 virtqemud 服务的默认 systemd 配置。 # touch /etc/systemd/system/virtqemud.service.d/10-network-online.conf
- 列表:将以下行添加到 10-network-online.conf 文件中:这个配置更改可确保 systemd 仅在主机上的网络就绪后启动 virtqemud 服务。 [Unit] After=network-online.target
- 命令/配置摘录:
# virsh autostart demo-guest1 Domain 'demo-guest1' marked as autostarted
# mkdir -p /etc/systemd/system/virtqemud.service.d/- 注意:注意 例如,这些接口包括: NetworkManager 创建的网桥设备 网络配置为使用 <forward mode='bridge'/>
第 6 章 将虚拟机转换为 Q35 机器类型
- 要点:在 RHEL 10 中,i440fx 机器类型已弃用,并将在以后的 RHEL 主版本中删除。另外,使用 q35 计算机类型与 i440fx 相比,如高级主机控制器接口(AHCI)和虚拟输入输出内存管理单元(vIOMMU)模拟。
- 要点:因此,红帽建议转换使用 i440fx 的虚拟机(VM)以使用 q35。请注意,您还可以转换尚未定义的虚拟机配置。
- 列表:RHEL 10 主机上的虚拟机使用 i440fx 机器类型。要确认这一点,请使用以下命令: # virsh dumpxml <vm-name> | grep machine <type arch='x86_64' machine='pc-i440fx-10.0.0'>hvm</type>
- 列表:您已备份了虚拟机的原始配置,以便在需要时使用它来转换和灾难恢复。 # virsh dumpxml <vm-name> > <vm-name>-backup.xml
- 列表:调整虚拟机的配置以使用 Q35。作为源配置,使用之前创建的备份文件。 # cat <vm-name>-backup.xml | virt-xml --edit --convert-to-q35 > <vm-name-q35>.xml
- 列表:定义虚拟机。 # virsh define <vm-name-q35>.xml
- 列表:调整虚拟机的配置以使用 Q35。 # virt-xml <vm-name> --edit --convert-to-q35
- 列表:如果虚拟机正在运行,请将其关闭。 # virsh shutdown <vm-name>
- 命令/配置摘录:
# virsh dumpxml <vm-name> | grep machine <type arch='x86_64' machine='pc-i440fx-10.0.0'>hvm</type>
# virsh dumpxml <vm-name> > <vm-name>-backup.xml第 7 章 连接至虚拟机
- 要点:要在 RHEL 10 中与虚拟机(VM)交互,您需要执行以下操作之一来连接它:
- 要点:如果您要连接的虚拟机位于远程主机而不是本地主机,您可以选择配置您的系统以更方便地访问远程主机。
- 列表:如果您需要在不使用 Web 控制台的情况下与虚拟机图形显示交互,请使用 Virt Viewer 应用程序。详情请参阅 使用命令行打开虚拟机图形控制台。
- 列表:如果不需要图形显示,请使用 SSH 终端连接。
- 列表:当使用网络无法从您的系统访问虚拟机时,请使用 virsh 控制台。
- 列表:已安装并启动您要与之交互的虚拟机。
7.1. 使用 web 控制台连接至虚拟机
- 要点:您可以使用 web 控制台界面连接到运行 KVM 虚拟机。
7.1.1. 在 web 控制台中打开虚拟机图形控制台
- 要点:通过使用虚拟机(VM)控制台界面,您可以在 RHEL 10 web 控制台中查看所选虚拟机的图形输出。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:确保主机和虚拟机支持图形界面。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,单击您要查看其图形控制台的虚拟机。 此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
- 列表:在控制台下拉菜单中选择 VNC 控制台。 VNC 控制台在 Web 界面中的菜单下方显示。 图形控制台会出现在 web 界面中。
- 注意:注意 运行 web 控制台的主机可能会截获特定的组合键,如 Ctrl+Alt+Del,阻止它们发送到虚拟机。 要发送此类组合键,请单击 Send key 菜单并选择要发送的键序列。 例如,要将 Ctrl+Alt+Del 组合发送给虚拟机,请单击 Send key 并选择 Ctrl+Alt+Del 菜单条目。
- 注意:注意 您可以在 web 控制台中启动 Virt Viewer。其他 VNC 远程查看器可以被手动启动。
7.1.2. 在 web 控制台中打开虚拟机串口控制台
- 要点:您可以在 RHEL 10 web 控制台中查看所选虚拟机(VM)的串行控制台。这在主机机器或者虚拟机没有使用图形界面配置时很有用。
- 要点:有关串行控制台的更多信息 ,请参阅使用命令行界面打开虚拟机串行控制台。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 窗格中,单击您要查看其串行控制台的虚拟机。 此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
- 列表:在控制台下拉菜单中选择 Serial console。 图形控制台会出现在 web 界面中。
- 列表:要断开串行控制台与虚拟机的连接,请点 Disconnect。
7.2. 使用命令行打开虚拟机图形控制台
- 要点:您可以通过在 Virt Viewer 工具中打开它来连接到 KVM 虚拟机(VM)的图形控制台。
- 要点:先决条件
- 列表:您的系统以及您要连接的虚拟机必须支持图形显示。
- 列表:如果目标虚拟机位于远程主机上,则需要对主机有连接和 root 访问权限。
- 列表:可选: 如果目标虚拟机位于远程主机上,请设置 libvirt 和 SSH 以 更方便地访问远程主机。
- 列表:要连接到本地虚拟机,请使用以下命令,并将 guest-name 替换为您要连接的虚拟机的名称: # virt-viewer guest-name
- 列表:要连接到远程虚拟机,请使用 virt-viewer 命令及 SSH 协议。例如,以下命令以 root 用户身份连接到位于远程系统 192.0.2.1 上的名为 guest-name 的虚拟机。连接还需要 192.0.2.1 的 root 身份验证。 # virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name root@192.0.2.1's password:
- 列表:如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。
- 命令/配置摘录:
# virt-viewer guest-name
# virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name root@192.0.2.1's password:7.3. 使用 SSH 连接到虚拟机
- 要点:您可以使用 SSH 连接协议与虚拟机(VM)终端交互。
- 要点:先决条件
- 列表:有对目标虚拟机的网络连接和 root 访问权限。
- 列表:如果目标虚拟机位于远程主机上,您也可以拥有对该主机的连接和 root 访问权限。
- 列表:您的虚拟机网络由 libvirt 生成的 dnsmasq 分配 IP 地址。这是 libvirt NAT 网络中的示例。 值得注意的是,如果您的虚拟机使用以下网络配置之一,则无法使用 SSH 连接到虚拟机: hostdev 接口 直接接口 网桥接口
- 列表:hostdev 接口
- 列表:直接接口
- 列表:网桥接口
- 命令/配置摘录:
# dnf install libvirt-nss
... passwd: compat shadow: compat group: compat hosts: files libvirt_guest dns ...7.4. 使用命令行打开虚拟机串口控制台
- 要点:通过使用 virsh console 命令,可以连接到虚拟机(VM)的串行控制台。
- 要点:这在虚拟机中很有用:* 不提供 VNC 协议,因此没有为 GUI 工具提供视频显示。
- 列表:没有网络连接,因此无法使用 SSH 进行交互。
- 列表:主机上的 GRUB 引导装载程序必须配置为使用串口控制台。要进行验证,请检查主机上的 /etc/default/grub 文件是否包含 GRUB_TERMINAL=serial 参数。 $ sudo grep GRUB_TERMINAL /etc/default/grub GRUB_TERMINAL=serial
- 列表:虚拟机必须配有一个串口控制台设备,如 console type='pty'。要进行验证,请执行以下操作: # virsh dumpxml vm-name | grep console <console type='pty' tty='/dev/pts/2'> </console>
- 列表:虚拟机必须在内核命令行中配置串口控制台。要验证这一点,虚拟机上的 cat /proc/cmdline 命令输出应包含 console=<console-name>,其中 <console-name> 是特定的架构: 对于 AMD64 和 Intel 64: ttyS0 注意 此流程中的以下命令使用 ttyS0。 # cat /proc/cmdline BOOT_IMAGE=/vmlinuz-6.12.0-0.el10_0.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/…
- 列表:对于 AMD64 和 Intel 64: ttyS0 注意 此流程中的以下命令使用 ttyS0。 # cat /proc/cmdline BOOT_IMAGE=/vmlinuz-6.12.0-0.el10_0.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb 如果没有在虚拟机中正确设置串口控制台,请使用 virsh 控制台连接到虚拟机,请将您连接到无响应的客户端控制台。但是,您仍然可以使用 Ctrl+] 快捷键退出无响应的控制台。
- 列表:要在虚拟机上设置串行控制台,请执行以下操作: 在虚拟机上启用 console=ttyS0 内核选项: # grubby --update-kernel=ALL --args="console=ttyS0" 清除可能会阻止更改生效的内核选项。 # grub2-editenv - unset kernelopts 重启虚拟机。
- 命令/配置摘录:
$ sudo grep GRUB_TERMINAL /etc/default/grub GRUB_TERMINAL=serial
# virsh dumpxml vm-name | grep console <console type='pty' tty='/dev/pts/2'> </console>- 注意:注意 此流程中的以下命令使用 ttyS0。
7.5. 设置对远程虚拟化主机的更容易访问
- 要点:当使用 libvirt 工具在远程主机系统中管理虚拟机时,您应该使用 -c qemu+ssh://root@hostname/system 语法。例如,要在 192.0.2.1 主机上以 root 用户身份使用 virsh list 命令:
- 要点:但是,您可以通过修改 SSH 和 libvirt 配置来删除完整指定连接详情的需要。例如:
- 列表:使用以下详细信息编辑 ~/.ssh/config 文件,其中 host-alias 是与特定远程主机关联的短名称,以及 root@192.0.2.1 的别名,hosturl 是主机的 URL 地址: # vi ~/.ssh/config Host example-host-alias User root Hostname 192.0.2.1
- 列表:使用以下详情编辑 /etc/libvirt/libvirt.conf 文件,example-qemu-host-alias 是一个主机别名,QEMU 和 libvirt 工具将用来为 qemu+ssh://192.0.2.1/system 与预期主机 example-host-alias 进行关联: # vi /etc/libvirt/libvirt.conf uri_aliases = [ "example-qemu-host-alias=qemu+ssh://example-host-alias/system", ]
- 列表:确认通过在本地系统上使用基于 libvirt 的工具,并添加 -c qemu-host-alias 参数,您可以来管理远程虚拟机。这会在远程主机中使用 SSH 自动执行命令。 例如,验证以下 192.0.2.1 远程主机上列出的虚拟机,在前面的步骤中到其的连接被设置为 example-qemu-host-alias : # virsh -c example-qemu-host-alias list root@192.0.2.1's password: Id Name State ---------------------------------------- 1 example-remote-guest running 注意 除了…
- 列表:您可以编辑 /etc/libvirt/libvirt.conf 文件,并将 uri_default 参数的值设置为 example-qemu-host-alias 来作为默认 libvirt 目标。 # These can be used in cases when no URI is supplied by the application # (@uri_default also prevents probing of the hypervisor driver). # uri_default = "example-qemu-host-alias" 因此,所有基于 libvirt 的命令都会在指定的远程主机中自动执行。 $ vi…
- 列表:连接到远程主机时,您可以避免向远程系统提供 root 密码。要做到这一点,请使用以下一个或多个方法: 设置对远程主机的基于密钥的 SSH 访问 使用 SSH 连接多路复用连接到远程系统 身份管理中的 Kerberos 身份验证
- 列表:设置对远程主机的基于密钥的 SSH 访问
- 命令/配置摘录:
# virsh -c qemu+ssh://root@192.0.2.1/system list root@192.0.2.1's password: Id Name State --------------------------------- 1 remote-guest running
# virsh -c remote-host list root@192.0.2.1's password: Id Name State --------------------------------- 1 remote-guest running- 注意:注意 除了 virsh 之外,-c (或 --connect)选项以及上述远程主机访问配置也可以由以下工具使用: virt-install virt-viewer
第 8 章 关闭和重启虚拟机
- 要点:在 RHEL 10 中,您可以使用命令行或使用 web 控制台 GUI 关闭或重启虚拟机。
8.1. 使用命令行关闭虚拟机
- 要点:关闭虚拟机(VM)是否需要根据虚拟机响应的不同步骤。
- 要点:关闭有响应的虚拟机
- 列表:如果您 连接到 guest,请使用 shutdown 命令或适合客户机操作系统的 GUI 元素。 注意 在某些环境中,比如使用 GNOME 桌面的 Linux 客户机,使用 GUI 电源按钮暂停或休眠客户机可能会关闭虚拟机。
- 列表:或者,在主机上使用 virsh shutdown 命令: 如果虚拟机位于本地主机上: # virsh shutdown demo-guest1 Domain 'demo-guest1' is being shutdown 如果虚拟机在远程主机上,如本例中 192.0.2.1 : # virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being shutdown
- 列表:如果虚拟机位于本地主机上: # virsh shutdown demo-guest1 Domain 'demo-guest1' is being shutdown
- 列表:如果虚拟机在远程主机上,如本例中 192.0.2.1 : # virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being shutdown
- 列表:在主机上,显示虚拟机的列表,以查看其状态。 # virsh list --all Id Name State ------------------------------------------ 1 demo-guest1 shut off
- 命令/配置摘录:
# virsh shutdown demo-guest1 Domain 'demo-guest1' is being shutdown
# virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being shutdown- 注意:注意 在某些环境中,比如使用 GNOME 桌面的 Linux 客户机,使用 GUI 电源按钮暂停或休眠客户机可能会关闭虚拟机。
- 注意:注意 virsh destroy 命令实际上不会删除虚拟机配置或磁盘镜像。它只会终止虚拟机的运行实例,类似于从物理机中拔掉电源。 在个别情况下,virsh destroy 可能会导致虚拟机文件系统崩溃,因此只有在所有其他关闭方法都失败时才使用这个命令。
8.2. 使用 web 控制台关闭虚拟机
- 要点:如果虚拟机(VM)处于 running 状态,您可以使用 RHEL 10 web 控制台关闭它。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:在 Virtual Machines 接口中,找到您要关闭的虚拟机行。
- 列表:在行的右侧,点击 Shut Down。 虚拟机关机。
- 列表:如果虚拟机没有关闭,请点 Shut Down 按钮旁边的 Menu ⋮ 按钮,然后选择 Force Shut Down。
- 列表:要关闭无响应虚拟机,您还可以通过点击菜单中的 Send non-maskable interrupt 按钮来发送不可屏蔽中断。
8.3. 使用命令行重启虚拟机
- 要点:根据虚拟机响应,重启虚拟机(VM)需要不同的步骤。
- 要点:重启一个响应的虚拟机
- 列表:如果您 连接到 guest,请使用 restart 命令或适合客户机操作系统的 GUI 元素。
- 列表:或者,在主机上使用 virsh reboot 命令: 如果虚拟机位于本地主机上: # virsh reboot demo-guest1 Domain 'demo-guest1' is being rebooted 如果虚拟机在远程主机上,如本例中 192.0.2.1 : # virsh -c qemu+ssh://root@192.0.2.1/system reboot demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being rebooted
- 列表:如果虚拟机位于本地主机上: # virsh reboot demo-guest1 Domain 'demo-guest1' is being rebooted
- 列表:如果虚拟机在远程主机上,如本例中 192.0.2.1 : # virsh -c qemu+ssh://root@192.0.2.1/system reboot demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being rebooted
- 列表:强制虚拟机关闭。 # virsh destroy demo-guest1 Domain 'demo-guest1' destroyed 注意 virsh destroy 命令实际上不会删除虚拟机配置或磁盘镜像。它只会终止虚拟机的运行实例,类似于从物理机中拔掉电源。 在个别情况下,virsh destroy 可能会导致虚拟机文件系统崩溃,因此只有在所有其他关闭方法都失败时才使用这个命令。
- 列表:再次启动虚拟机。 # virsh start demo-guest1 Domain 'demo-guest1' started
- 命令/配置摘录:
# virsh reboot demo-guest1 Domain 'demo-guest1' is being rebooted
# virsh -c qemu+ssh://root@192.0.2.1/system reboot demo-guest1 root@192.0.2.1's password: Domain 'demo-guest1' is being rebooted- 注意:注意 virsh destroy 命令实际上不会删除虚拟机配置或磁盘镜像。它只会终止虚拟机的运行实例,类似于从物理机中拔掉电源。 在个别情况下,virsh destroy 可能会导致虚拟机文件系统崩溃,因此只有在所有其他关闭方法都失败时才使用这个命令。
8.4. 使用 web 控制台重启虚拟机
- 要点:如果虚拟机(VM)处于 running 状态,您可以使用 RHEL 10 web 控制台重启它。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:在 Virtual Machines 接口中,找到您要重启的虚拟机行。
- 列表:在行的右侧,点击菜单按钮 ⋮。 此时会显示一个下拉操作菜单。
- 列表:在下拉菜单中,单击 Reboot。 虚拟机将关机并重启。
- 列表:如果虚拟机没有重启,点 Reboot 按钮旁边的 Menu ⋮ 按钮,然后选择 Force Reboot。
第 9 章 删除虚拟机
- 要点:要删除 RHEL 10 中的虚拟机,请使用 命令行界面 或 web 控制台 GUI。
9.1. 使用命令行删除虚拟机
- 要点:要删除虚拟机(VM),您可以使用命令行从主机中删除其 XML 配置和相关存储文件。
- 要点:先决条件
- 列表:备份虚拟机中的重要数据。
- 列表:关闭虚拟机。
- 列表:确保没有其他虚拟机使用相同的关联的存储。
- 列表:使用 virsh undefine 工具。 例如:以下命令删除 guest1 虚拟机、与其关联的存储卷以及非电压 RAM(若有)。 # virsh undefine guest1 --remove-all-storage --nvram Domain 'guest1' has been undefined Volume 'vda'(/home/images/guest1.qcow2) removed.
- 列表:virsh undefine --help 命令
- 列表:您系统上的 virsh 手册页
- 命令/配置摘录:
# virsh undefine guest1 --remove-all-storage --nvram Domain 'guest1' has been undefined Volume 'vda'(/home/images/guest1.qcow2) removed.9.2. 使用 web 控制台删除虚拟机
- 要点:您可以使用 RHEL 10 web 控制台从主机中删除虚拟机(VM)及其关联的存储文件。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:备份虚拟机中的重要数据。
- 列表:确保没有其他虚拟机使用相同的关联存储。
- 列表:可选:关闭虚拟机。
- 列表:登录到 RHEL 10 web 控制台。
第 10 章 查看有关虚拟机的信息
- 要点:当您需要调整或排除 RHEL 10 上虚拟化部署的任何方面时,您需要执行的第一个步骤通常是查看有关虚拟机(VM)的当前状态和配置的信息。为此,您可以使用命令行 或 Web 控制台。您还可以查看虚拟机 XML 配置中的信息。
10.1. 使用命令行查看虚拟机信息
- 要点:要检索主机上虚拟机(VM)的信息,您可以使用 virsh 命令行工具。
- 要点:流程
- 列表:获取主机上的虚拟机列表: # virsh list --all Id Name State ---------------------------------- 1 testguest1 running - testguest2 shut off - testguest3 shut off - testguest4 shut off
- 列表:要获取有关特定虚拟机的基本信息: # virsh dominfo _testguest1 Id: 1 Name: testguest1 UUID: a973666f-2f6e-415a-8949-75a7a98569e1 OS Type: hvm State: running CPU(s): 2 CPU time: 188.3s Max memory: 4194304 KiB Used memory: 4194304 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security lab…
- 列表:要获得特定虚拟机的完整 XML 配置: # virsh dumpxml testguest2 <domain type='kvm' id='1'> <name>testguest2</name> <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid> <metadata> [...] 有关虚拟机 XML 配置的注解示例,请参阅示例虚拟机 XML 配置
- 列表:有关虚拟机磁盘和其它块设备的详情: # virsh domblklist testguest3 Target Source --------------------------------------------------------------- vda /var/lib/libvirt/images/testguest3.qcow2 sda - sdb /home/username/Downloads/virt-p2v-1.36.10-1.el7.iso 有关管理虚拟机存储的说明,请参阅 管理虚拟机的存储。
- 列表:要获取有关虚拟机文件系统及其挂载点的信息: # virsh domfsinfo testguest3 Mountpoint Name Type Target ------------------------------------ / dm-0 xfs vda /boot vda2 xfs vda /boot/efi vda1 vfat vda
- 列表:要获取有关特定虚拟机 vCPU 的详细信息: # virsh vcpuinfo testguest4 VCPU: 0 CPU: 3 State: running CPU time: 103.1s CPU Affinity: yyyy VCPU: 1 CPU: 0 State: running CPU time: 88.6s CPU Affinity: yyyy 要在虚拟机中配置和优化 vCPU,请参阅优化虚拟机 CPU 性能。
- 命令/配置摘录:
# virsh list --all Id Name State ---------------------------------- 1 testguest1 running - testguest2 shut off - testguest3 shut off - testguest4 shut off
# virsh dominfo _testguest1 Id: 1 Name: testguest1 UUID: a973666f-2f6e-415a-8949-75a7a98569e1 OS Type: hvm State: running CPU(s): 2 CPU time: 188.3s Max memory: 4194304 KiB Used memory: 4194304 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c486,c538 (enforcing)10.2. 使用 web 控制台查看虚拟机信息
- 要点:通过使用 web 控制台,您可以访问虚拟化概述,其中包含有关可用虚拟机(VM)、磁盘、存储池和网络的汇总信息。
- 要点:先决条件
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:在 web 控制台侧菜单中点击 Virtual Machines。 此时将显示一个对话框,其中包含有关 Web 控制台所连接的可用存储池、可用网络和虚拟机的信息。
- 列表:存储池 - 可以通过 Web 控制台及其状态访问的活动的或非活动的存储池数量。
- 列表:网络 - 可以通过 Web 控制台及其状态访问的活动的或非活动的网络数量。
- 列表:Name - 虚拟机的名称。
- 列表:Connection - libvirt 连接、系统或者会话的类型。
- 注意:注意 对虚拟网络接口设置的更改仅在重启虚拟机后生效。 此外,MAC 地址只能在虚拟机关闭时修改。
10.3. 虚拟机 XML 配置示例
- 要点:虚拟机的 XML 配置(也称为 域 XML )决定虚拟机的设置和组件。下表显示了虚拟机(VM)的 XML 配置示例并解释了其内容。
- 要点:要获取虚拟机的 XML 配置,您可以使用 virsh dumpxml 命令,后跟虚拟机的名称。
- 命令/配置摘录:
# virsh dumpxml testguest1- 表格样本(共 16 行):
- 域 XML 部分 | 描述
- <domain type='kvm'> <name>Testguest1</name> <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> | 这是一个名为 Testguest1 的 KVM 虚拟机,内存为 1024 MiB。
- <vcpu placement='static'>1</vcpu> | 虚拟机被分配为单个虚拟 CPU(vCPU)。 有关配置 vCPU 的详情,请参考优化虚拟机 CPU 性能。
- <os> <type arch='x86_64' machine='pc-q35-rhel10.0.0'>hvm</type> <boot dev='hd'/> </os> | 机器构架被设置为 AMD64 和 Intel 64 架构,并使用 Intel Q35 机器类型来决定功能兼容性。操作系统被设置为从硬盘引导。
第 11 章 克隆虚拟机
- 要点:要使用特定属性集合快速创建新虚拟机,您可以克隆现有虚拟机。
- 要点:克隆会创建一个使用其自身磁盘镜像保存存储的新虚拟机,但大多数克隆的配置和源虚拟机的数据都是一样的。这样就可以为特定的任务准备多个优化的虚拟机,而无需单独优化每一个虚拟机。
11.1. 克隆虚拟机的方式
- 要点:克隆虚拟机会复制源虚拟机及其磁盘镜像的 XML 配置,并对配置进行修改以确保新虚拟机的唯一性。这包括更改虚拟机的名称,并确保它使用磁盘镜像克隆。存储在克隆的虚拟磁盘上的数据与源虚拟机是一致的。
- 要点:这个过程比创建新虚拟机要快,并使用客户端操作系统安装它,并可用于快速生成带有特定配置和内容的虚拟机。
- 列表:唯一设置,如持久性网络 MAC 配置,这可阻止克隆正常工作。
- 列表:敏感数据,如 SSH 密钥和密码文件。
- 列表:使用命令行克隆虚拟机
- 列表:使用 web 控制台克隆虚拟机
11.2. 创建虚拟机模板
- 要点:要创建可正常工作的多个虚拟机(VM)克隆,您可以对删除源虚拟机的唯一信息和配置,如 SSH 密钥或持久性网络 MAC 配置。这将创建一个虚拟机 模板,您可以使用它来轻松且安全地创建虚拟机克隆。
- 要点:您可以使用 virt-sysprep 工具 创建虚拟机模板,或者根据您的要求 手动创建它们。
11.2.1. 使用 virt-sysprep 创建虚拟机模板
- 要点:要从现有虚拟机(VM)创建克隆模板,您可以使用 virt-sysprep 工具。这会删除某些可能导致克隆工作不正常的配置,如特定的网络设置或系统注册元数据。因此,virt-sysprep 可以更高效地创建虚拟机的克隆,并确保克隆可以更加可靠地工作。
- 要点:先决条件
- 列表:在主机上安装了包含 virt-sysprep 工具的 guestfs-tools 软件包: # dnf install guestfs-tools
- 列表:充当模板的源虚拟机已关闭。
- 列表:您知道源虚拟机的磁盘镜像所在的位置,并且您是虚拟机磁盘镜像文件的所有者。 请注意,在 libvirt 系统连接中创建的虚拟机的磁盘镜像位于 /var/lib/libvirt/images 目录中,默认由 root 用户拥有: # ls -la /var/lib/libvirt/images -rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root r…
- 列表:可选:源虚拟机磁盘上的任何重要数据都已备份。如果要保留源虚拟机,请首先克隆它,并将克隆转换为模板。???
- 列表:确保您已作为虚拟机磁盘镜像的所有者登录: # whoami root
- 列表:可选:复制虚拟机的磁盘镜像。 # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2 这用于之后验证虚拟机是否已成功转换为模板。
- 命令/配置摘录:
# dnf install guestfs-tools
# ls -la /var/lib/libvirt/images -rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 totally-not-a-fake-vm.qcow2 -rw-------. 1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow211.2.2. 手动创建虚拟机模板
- 要点:要从现有虚拟机(VM)创建模板,您可以手动重置或取消配置客户虚拟机来为克隆做好准备。
- 要点:先决条件
- 列表:确保您知道源虚拟机的磁盘镜像的位置,并且是虚拟机磁盘镜像文件的所有者。 请注意,在 libvirt 系统连接 中创建的虚拟机的磁盘镜像默认位于 /var/lib/libvirt/images 目录中,并由 root 用户拥有: # ls -la /var/lib/libvirt/images -rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root …
- 列表:确保虚拟机已关闭。
- 列表:可选:虚拟机磁盘上的任何重要数据都已备份。如果要保留源虚拟机,请首先克隆它,并编辑克隆以创建模板。
- 列表:配置虚拟机以进行克隆: 在克隆上安装任何所需的软件。 为操作系统配置任何非唯一的设置。 配置任何非唯一的应用设置。
- 列表:在克隆上安装任何所需的软件。
- 列表:为操作系统配置任何非唯一的设置。
- 命令/配置摘录:
# ls -la /var/lib/libvirt/images -rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 totally-not-a-fake-vm.qcow2 -rw-------. 1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
# rm -f /etc/udev/rules.d/70-persistent-net.rules- 注意:注意 如果没有删除 udev 规则,第一个 NIC 的名称可能是 eth1 而不是 eth0。
- 注意:注意 原始 RHSM 配置文件保留您 ID 代码的门户中。克隆后,使用以下命令重新激活虚拟机上的 RHSM 注册: # subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
11.3. 使用命令行克隆虚拟机
- 要点:为了进行测试,要创建带有特定属性集的新虚拟机(VM),您可以使用命令行克隆现有虚拟机。
- 要点:先决条件
- 列表:源虚拟机被关闭。
- 列表:确保有足够的磁盘空间来存储克隆的磁盘镜像。
- 列表:virt-install 软件包安装在主机上。
- 列表:可选:在创建多个虚拟机克隆时,从源虚拟机中删除唯一数据和设置,以确保克隆的虚拟机可以正常工作。具体步骤请参阅创建虚拟机模板。
- 列表:使用 virt-clone 工具以及适合您环境和用例的选项。 使用案例示例 以下命令克隆一个名为 example-VM-1 的本地虚拟机,并创建 example-VM-1-clone 虚拟机。它还会在与原始虚拟机的磁盘镜像相同的位置创建并分配 example-VM-1-clone.qcow2 磁盘镜像,并使用相同的数据: # virt-clone --original example-VM-1 --auto-clone Allocating 'example-VM-1-clone.qcow2' | 50.0 GB 00:05:37 Clone 'example-VM-1-clone' created successfully. 以…
- 列表:以下命令克隆一个名为 example-VM-1 的本地虚拟机,并创建 example-VM-1-clone 虚拟机。它还会在与原始虚拟机的磁盘镜像相同的位置创建并分配 example-VM-1-clone.qcow2 磁盘镜像,并使用相同的数据: # virt-clone --original example-VM-1 --auto-clone Allocating 'example-VM-1-clone.qcow2' | 50.0 GB 00:05:37 Clone 'example-VM-1-clone' created successfully.
- 命令/配置摘录:
# virt-clone --original example-VM-1 --auto-clone Allocating 'example-VM-1-clone.qcow2' | 50.0 GB 00:05:37 Clone 'example-VM-1-clone' created successfully.
# virt-clone --original example-VM-2 --name example-VM-3 --file /var/lib/libvirt/images/disk-1-example-VM-2.qcow2 --file /var/lib/libvirt/images/disk-2-example-VM-2.qcow2 Allocating 'disk-1-example-VM-2.qcow2' | 78.0 GB 00:05:37 Allocating 'disk-2-example-VM-2.qcow2' | 80.0 GB 00:05:37 Clone 'example-VM-3' created successfully.11.4. 使用 web 控制台克隆虚拟机
- 要点:要创建具有特定属性集的新虚拟机,您可以克隆之前使用 web 控制台配置的虚拟机。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:确保要克隆的虚拟机已关闭。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 web 控制台的虚拟机界面中,单击您要克隆的虚拟机的菜单按钮 ⋮。 此时会显示一个下拉菜单,控制各种虚拟机操作。
- 列表:单击 Clone。 此时会显示 Create a clone VM 对话框。
- 注意:注意 克隆虚拟机也会克隆与该虚拟机关联的磁盘。
第 12 章 迁移虚拟机
- 要点:如果虚拟机所在的当前主机变得不适合或者无法再使用,或者要重新分发托管工作负载,您可以将该虚拟机迁移到另一个 KVM 主机中。
12.1. 迁移虚拟机的工作方式
- 要点:您可以使用 实时迁移 在不中断工作负载的情况下迁移正在运行的虚拟机(VM)。默认情况下,迁移的虚拟机在目标主机上是临时的,虚拟机在源主机上仍然被定义。实时 迁移的基本部分是将虚拟机的内存和任何附加的虚拟设备的状态传输到目标主机。要使虚拟机在目标主机上正常工作,虚拟机的磁盘镜像必须仍可用。
- 要点:要迁移关闭的虚拟机,您必须使用 离线 迁移,它将虚拟机的配置复制到目标主机。详情请查看下表。
- 列表:位于 共享网络上的存储
- 列表:virsh migrate 命令的 --copy-storage-all 参数,它通过网络将磁盘镜像内容从源复制到目的地。
- 列表:存储区域网络(SAN)逻辑单元(LUN)。
- 列表:Ceph 存储集群
- 列表:迁移虚拟机的好处
- 列表:将虚拟机磁盘镜像与其他主机共享
- 注意:注意 要更轻松地管理大规模迁移,探索其他红帽产品,例如: OpenShift Virtualization Red Hat OpenStack Platform
- 表格样本(共 3 行):
- 迁移类型 | 描述 | 使用案例 | 存储要求
- 实时迁移 | VM 将继续在源主机中运行,而 KVM 会将虚拟机的内存页面传送到目标主机。当迁移接近完成后,KVM 会非常简单地挂起虚拟机,并在目标主机上恢复它。 | 对于需要一直保持运行的虚拟机,这个方法非常有用。但是,对于修改内存页的速度比 KVM 可以传输内存页的速度更快的虚拟机,如 I/O 负载较重的虚拟机,实时迁移可能会失败。(1) | VM 的磁盘镜像在迁移过程中必须可以被源主机和目标主机访问。(2)
- 离线迁移 | 将虚拟机的配置移到目标主机 | 建议用于关闭虚拟机以及关闭虚拟机不会影响您工作负载的情况。 | VM 的磁盘镜像不必在迁移过程中能被源或目标主机访问,并不必可以手动复制或移动到目标主机。
12.2. 迁移虚拟机的好处
- 要点:迁移虚拟机对以下情况非常有用:
12.3. 迁移虚拟机的限制
- 要点:在 RHEL 10 中迁移虚拟机前,请确定您了解迁移的限制。
- 要点:使用以下功能和配置的虚拟机在迁移时将无法正常工作,或者迁移失败。这些特性包括:
- 列表:使用以下功能和配置的虚拟机在迁移时将无法正常工作,或者迁移失败。这些特性包括: 设备透传 SR-IOV 设备分配(除 迁移具有 Mellanox 网络设备附加的虚拟功能的虚拟机外),该设备 可以正常工作。) 介质设备,如 vGPU ( 迁移附加 NVIDIA vGPU 的虚拟机 除外,这可以正常工作。)
- 列表:设备透传
- 列表:SR-IOV 设备分配(除 迁移具有 Mellanox 网络设备附加的虚拟功能的虚拟机外),该设备 可以正常工作。)
- 列表:介质设备,如 vGPU ( 迁移附加 NVIDIA vGPU 的虚拟机 除外,这可以正常工作。)
- 列表:使用非统一内存访问(NUMA)固定的主机之间的迁移只有在主机有类似的拓扑时才能正常工作。但是,迁移可能会对运行工作负载的性能造成负面影响。
- 列表:源和目标主机都使用虚拟机迁移支持的特定 RHEL 版本,请参阅支持的虚拟机迁移主机
12.4. 使用命令行迁移虚拟机
- 要点:如果虚拟机所在的当前主机变得不适合或者无法再使用,或者要重新分发托管工作负载,您可以将该虚拟机迁移到另一个 KVM 主机中。您可以执行 实时迁移 或 离线迁移。有关这两种情况之间的区别,请参阅如何迁移虚拟机。
- 要点:先决条件
- 列表:使用 SSH 连接到目标主机需要端口 22。
- 列表:使用 TLS 连接到目标主机需要端口 16514。
- 列表:使用 TCP 连接到目标主机需要端口 16509。
- 列表:QEMU 需要端口 49152-49215 ,来传输内存和磁盘迁移数据。
- 列表:您正在使用存储区域网络(SAN)逻辑单元(LUN)。
- 列表:正在您使用 Ceph 存储集群。
- 命令/配置摘录:
# virsh domdirtyrate-calc <example_VM> 30
# virsh domstats <example_VM> --dirtyrate Domain: 'example-VM' dirtyrate.calc_status=2 dirtyrate.calc_start_time=200942 dirtyrate.calc_period=30 dirtyrate.megabytes_per_second=2- 注意:注意 calc_period 选项的值可能因工作负载和脏页率而异。您可以使用多个 calc_period 值进行试验,以确定与您环境中脏页率一致的最合适的周期。
12.5. 使用 web 控制台实时迁移虚拟机
- 要点:如果要迁移正在执行需要持续运行的任务的虚拟机(VM),您可以将该虚拟机迁移到另一个 KVM 主机,而无需关闭它。这也称为实时迁移。您可以使用 Web 控制台来实时迁移虚拟机。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:Hypervisor : 源主机和目标主机都使用 KVM hypervisor。
- 列表:主机 : 源和目标主机都在运行。
- 列表:打开端口 : 确保以下端口在目标主机上已打开。 使用 SSH 连接到目标主机需要端口 22。 使用 TLS 连接到目标主机需要端口 16514。 使用 TCP 连接到目标主机需要端口 16509。 QEMU 需要端口 49152-49215 来传输内存和磁盘迁移数据。
- 列表:使用 SSH 连接到目标主机需要端口 22。
- 命令/配置摘录:
# virsh domdirtyrate-calc vm-name 30
# virsh domstats vm-name --dirtyrate Domain: 'vm-name' dirtyrate.calc_status=2 dirtyrate.calc_start_time=200942 dirtyrate.calc_period=30 dirtyrate.megabytes_per_second=2- 注意:注意 calc_period 选项的值可能因工作负载和脏页率而异。您可以使用多个 calc_period 值进行试验,以确定与您环境中脏页率一致的最合适的周期。
12.6. 实时迁移附加了 Mellanox 虚拟功能的虚拟机
- 要点:您可以使用支持的 Mellanox 网络设备附加的虚拟功能(VF)实时迁移虚拟机(VM)。
- 要点:红帽通过附加的 Mellanox 网络设备实现虚拟机实时迁移的一般功能。但是,该功能取决于特定的 Mellanox 设备型号和固件版本。
- 列表:计算虚拟机的脏内存页生成率。 目前,当迁移连接了 Mellanox VF 的虚拟机时,由 virsh domjobinfo 和 virsh domdirtyrate-calc 命令提供的实时迁移数据和统计信息不准确,因为计算只统计客户机 RAM ,而不包括连接的 VF 的影响。
- 列表:使用复制后实时迁移。
- 列表:在虚拟机中使用虚拟 I/O 内存管理单元(vIOMMU)设备。
- 列表:具有相同 Parameter-Set Identification (PSID)和相同的固件版本的 CX-7 设备必须在源和目标主机上同时使用。 您可以使用以下命令检查设备的 PSID: # mstflint -d <device_pci_address> query | grep -i PSID PSID: MT_1090111019
- 列表:在一个 CX-7 物理功能上,您可以同时使用最大 4 个 VF 来同时进行实时迁移。例如,您可以迁移一个具有 4 个附加的 VF 或 4 个虚拟机,并附加一个 VF 的虚拟机。
- 列表:您有一个 Mellanox CX-7 网络设备,其固件版本等于或大于 28.36.1010。 有关支持的固件版本的详情,请参考 Mellanox 文档,并确保您使用固件的最新版本。
- 命令/配置摘录:
# mstflint -d <device_pci_address> query | grep -i PSID PSID: MT_1090111019
# dnf install mstflint12.7. 使用附加的 NVIDIA vGPU 实时迁移虚拟机
- 要点:如果您在虚拟化工作负载中使用虚拟 GPU (vGPU),您可以将连接了 vGPU 的正在运行的虚拟机(VM)实时迁移到另一个 KVM 主机。目前,这只适用于 NVIDIA GPU。
- 要点:先决条件
- 列表:您有一个带有支持此功能的 NVIDIA Virtual GPU 软件驱动程序版本的 NVIDIA GPU。如需了解更多详细信息,请参阅相关的 NVIDIA vGPU 文档。
- 列表:您有一个正确配置的 NVIDIA vGPU 分配给了虚拟机。具体步骤请参阅: 设置 NVIDIA vGPU 设备
- 列表:NVIDIA 记录了所有 vGPU 迁移的先决条件。如需了解更多详细信息,请参阅相关的 NVIDIA vGPU 文档。
- 列表:所有常规虚拟机迁移的先决条件。详情请参阅 使用命令行迁移虚拟机
- 列表:某些 NVIDIA GPU 功能可以禁用迁移。如需更多信息,请参阅您的图形卡的特定 NVIDIA 文档。
- 列表:有些 GPU 工作负载与迁移期间发生的停机时间不兼容。因此,GPU 工作负载可能会停止或崩溃。建议您在尝试 vGPU 实时迁移之前测试您的工作负载是否与停机时间兼容。
- 注意:注意 也可以实时迁移连接了多个 vGPU 设备的虚拟机。
12.8. 将虚拟机磁盘镜像与其他主机共享
- 要点:要在 支持的 KVM 主机 之间执行虚拟机(VM)的实时迁移,还必须以一种方式迁移正在运行的虚拟机的存储,以便虚拟机在迁移过程中读取和写入存储。
- 要点:实现此操作的方法之一是使用共享虚拟机存储。以下流程提供了使用 NFS 协议将本地存储的虚拟机镜像与源主机和目标主机进行共享的说明。
- 列表:旨在迁移的虚拟机被关闭。
- 列表:可选:主机系统可用于托管不是源或目标主机的存储,但源和目标主机都可以通过网络访问它。这是共享存储的最佳解决方案。
- 列表:请确定 NFS 文件锁定没有被使用,因为在 KVM 中不支持它。
- 列表:已在源和目标主机上安装并启用了 NFS 协议。请参阅部署 NFS 服务器。
- 列表:virt_use_nfs SELinux 布尔值被设置为 on 。 # setsebool virt_use_nfs 1
- 列表:连接到提供共享存储的主机。在本例中,它是 example-shared-storage 主机: # ssh root@example-shared-storage root@example-shared-storage's password: Last login: Mon Sep 24 12:05:36 2019 root~#
- 命令/配置摘录:
# setsebool virt_use_nfs 1
# ssh root@example-shared-storage root@example-shared-storage's password: Last login: Mon Sep 24 12:05:36 2019 root~#12.9. 验证虚拟机迁移的主机 CPU 兼容性
- 要点:要使迁移的虚拟机 (VM) 在目标主机上正常工作,源和目标主机上的 CPU 必须兼容。要确保情况如此,请在开始迁移前计算一个常见 CPU 基准。
- 要点:先决条件
- 列表:已在您的系统中安装并启用虚拟化。
- 列表:您具有对源主机和迁移的目标主机的管理员访问权限。
- 列表:在源主机上,获取其 CPU 功能并将其粘贴到新的 XML 文件中,如 domCaps-CPUs.xml。 # virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - > domCaps-CPUs.xml
- 列表:在 XML 文件中,将 <mode> </mode> 标签替换为 <cpu> </cpu>。
- 列表:可选:验证 domCaps-CPUs.xml 文件的内容类似如下: # cat domCaps-CPUs.xml <cpu> <model fallback="forbid">Skylake-Client-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="hypervisor"/> <feature …
- 列表:在目标主机上,使用以下命令获取其 CPU 功能: # virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - <mode name="host-model" supported="yes"> <model fallback="forbid">IvyBridge-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="requi…
- 命令/配置摘录:
# virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - > domCaps-CPUs.xml
# cat domCaps-CPUs.xml <cpu> <model fallback="forbid">Skylake-Client-IBRS</model> <vendor>Intel</vendor> <feature policy="require" name="ss"/> <feature policy="require" name="vmx"/> <feature policy="require" name="pdcm"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="clflushopt"/> <feature policy="require" name="umip"/> <feature policy="require" name="md-clear"/> <feature policy="require" name="stibp"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="xsaves"/> <feature poli…- 注意:注意 本节中的说明使用了具有以下主机 CPU 的迁移示例: 源主机:Intel Core i7-8650U 目标主机:Intel Xeon CPU E5-2620 v2 另外,这个过程不适用于 64 位 ARM 系统。
12.10. 虚拟机迁移支持的主机
- 要点:要使虚拟机迁移正常工作且受红帽支持,源和目标主机必须是特定的 RHEL 版本和机器类型。下表显示了支持的虚拟机迁移路径。
- 要点:还支持在 q35 机器类型上带有相同 RHEL 版本的主机之间进行虚拟机迁移。
- 注意:注意 对红帽提供的其他虚拟化解决方案(包括 RHOSP 和 OpenShift Virtualization)的支持等级有所不同。
- 表格样本(共 3 行):
- 迁移方法 | 发行类型 | 将来的版本示例 | 支持状态
- 向前 | 次发行版本 | 10.0.1 → 10.1 | 在支持的 RHEL 10 系统上: 机器类型 q35。
- 向后 | 次发行版本 | 10.1 → 10.0.1 | 在支持的 RHEL 10 系统上: 机器类型 q35。
第 13 章 为虚拟机管理存储
- 要点:虚拟机(VM)与物理机一样,需要用于数据、程序和系统文件的存储。作为虚拟机管理员,您可以将物理或基于网络的存储分配给虚拟机作为虚拟存储。您还可以修改存储是如何呈现给虚拟机的,无论底层硬件是什么。
13.1. 将存储附加到虚拟机的可用方法
- 要点:要为在 RHEL 10 主机上运行的虚拟机(VM)提供存储,您可以使用多种存储硬件和软件。每种类型都有不同的要求、优势和使用案例。
- 要点:基于文件的虚拟磁盘是主机文件系统上的磁盘镜像文件,这些文件存储在基于目录的 libvirt 存储池中。
13.2. 使用 web 控制台查看虚拟机存储信息
- 要点:通过使用 web 控制台,您可以查看虚拟机可用的存储资源的详细信息。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:要查看主机上可用的存储池列表,请点击 Virtual Machines 接口顶部的 Storage Pools。 此时会出现存储池窗口,显示配置的存储池列表。 该信息包括: Name - 存储池的名称。 Size - 当前分配和存储池的总容量。 connection - 用于访问存储池的连接。 State - 存储池的状态。
- 列表:Name - 存储池的名称。
- 列表:Size - 当前分配和存储池的总容量。
13.3. 使用命令行查看虚拟机存储信息
- 要点:使用命令行,您可以查看虚拟机可用的存储资源的详细信息。
- 要点:流程
- 列表:要查看主机上的可用存储池,请运行 virsh pool-list 命令,并带有列表所需的粒度选项。例如,以下选项显示有关主机上所有存储池的所有可用信息: # virsh pool-list --all --details Name State Autostart Persistent Capacity Allocation Available default running yes yes 48.97 GiB 23.93 GiB 25.03 GiB Downloads running yes yes 175.62 GiB 62.02 GiB 113.60 GiB RHEL-Storage-Pool running yes …
- 列表:有关查看存储池信息的附加选项,请使用 virsh pool-list --help 命令。
- 列表:要列出指定存储池中的存储卷,请使用 virsh vol-list 命令。 # virsh vol-list --pool <RHEL-Storage-Pool> --details Name Path Type Capacity Allocation --------------------------------------------------------------------------------------------- RHEL_Volume.qcow2 /home/VirtualMachines/RHEL8_Volume.qcow2 file 60.00 GiB 13.93 GiB
- 列表:要查看附加到虚拟机的所有块设备,请使用 virsh domblklist 命令。 # *virsh domblklist --details <vm-name> Type Device Target Source ----------------------------------------------------------------------------- file disk hda /home/VirtualMachines/vm-name.qcow2 file cdrom hdb - file disk vdc /home/VirtualMachines/test-disk2.qcow2
- 列表:virsh pool-list --help
- 列表:virsh vol-list --help
- 命令/配置摘录:
# virsh pool-list --all --details Name State Autostart Persistent Capacity Allocation Available default running yes yes 48.97 GiB 23.93 GiB 25.03 GiB Downloads running yes yes 175.62 GiB 62.02 GiB 113.60 GiB RHEL-Storage-Pool running yes yes 214.62 GiB 93.02 GiB 168.60 GiB
# virsh vol-list --pool <RHEL-Storage-Pool> --details Name Path Type Capacity Allocation --------------------------------------------------------------------------------------------- RHEL_Volume.qcow2 /home/VirtualMachines/RHEL8_Volume.qcow2 file 60.00 GiB 13.93 GiB13.4. 将存储附加到虚拟机
- 要点:要将存储添加到虚拟机(VM),您可以将存储资源附加到虚拟机作为虚拟磁盘。与物理存储设备类似,虚拟磁盘与它们所附加的虚拟机无关,并可移动到其他虚拟机。
- 要点:您可以使用多种类型的存储资源向虚拟机添加虚拟磁盘。
13.4.1. 使用命令行将基于文件的虚拟磁盘附加到虚拟机
- 要点:要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2 或 .raw 格式的基于文件的虚拟磁盘。
- 要点:要在命令行中这样做,您可以使用以下方法之一:
- 列表:在由 libvirt 管理的基于目录的存储池中创建基于文件的存储卷。这需要多个步骤,但提供更好的与 hypervisor 集成。 请注意,在 RHEL 10 主机上创建第一个虚拟机时,会自动创建默认的基于目录的存储卷。此存储池的名称基于保存磁盘镜像的目录名称。例如,默认情况下,在 libvirt 的系统 会话中,磁盘镜像保存在 /var/lib/libvirt/images/ 目录中,存储池名为 images。
- 列表:使用 qemu-img 命令,将虚拟磁盘创建为主机文件系统上的文件。这是一个更快的方法,但不提供与 libvirt 的集成。 因此,在创建后,使用 qemu-img 创建的虚拟磁盘更为困难。
- 列表:可选:如果要将虚拟磁盘创建为存储卷,但您不想在主机上使用 默认镜像 存储池或另一个现有存储池,请创建和设置新的目录的存储池。 配置目录类型存储池。例如,要创建一个名为 guest_images_dir 的存储池,它使用 /guest_images 目录: # virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined 根据您之前定义的配置,为存储池创建目标路径。 # virsh pool-build guest_images_dir Pool guest_images_dir built 启动存储…
- 列表:配置目录类型存储池。例如,要创建一个名为 guest_images_dir 的存储池,它使用 /guest_images 目录: # virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined
- 列表:根据您之前定义的配置,为存储池创建目标路径。 # virsh pool-build guest_images_dir Pool guest_images_dir built
- 列表:启动存储池。 # virsh pool-start guest_images_dir Pool guest_images_dir started
- 命令/配置摘录:
# virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined
# virsh pool-build guest_images_dir Pool guest_images_dir built- 注意:注意 在命令行中创建新虚拟机时,也可以创建并附加基于文件的虚拟磁盘。要做到这一点,请在 virt-install 工具中使用- disk 选项。具体步骤请参阅创建虚拟机。
13.4.2. 使用 web 控制台将基于文件的虚拟磁盘附加到虚拟机
- 要点:要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2 或 .raw 格式的基于文件的虚拟磁盘。
- 要点:为此,请在由 libvirt 管理的基于目录的存储池中创建基于文件的存储卷。当在 RHEL 10 主机上创建第一个虚拟机时,会自动创建基于目录的默认存储卷。此存储池的名称基于保存磁盘镜像的目录名称。例如,默认情况下,在 libvirt 的系统 会话中,磁盘镜像保存在 /var/lib/libvirt/images/ 目录中,存储池名为 images。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:可选:如果您不想使用默认镜像存储池来创建新虚拟磁盘,请创建新的存储池。 点 Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool。 在 Create Storage Pool 对话框中,输入存储池的名称。 在 Type 下拉菜单中选择 Filesystem directory。 输入以下信息: Target path - 存储池的位置。 启动」 - 主机引导时是否启动存储池。 点击 Create。 创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。
- 列表:点 Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool。
- 列表:在 Create Storage Pool 对话框中,输入存储池的名称。
- 注意:注意 在 web 控制台中创建新虚拟机时,也可以创建并附加基于文件的虚拟磁盘。为此,请在 Create virtual machine 对话框中使用 Storage 选项。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
13.4.3. 使用命令行将基于磁盘的存储附加到虚拟机
- 要点:要为虚拟机(VM)提供本地存储,您可以使用基于磁盘的磁盘镜像。这种类型的磁盘镜像基于主机上的磁盘分区,并使用 .qcow2 或 .raw 格式。
- 要点:要使用命令行将基于磁盘的存储附加到虚拟机,请使用以下方法之一:
- 列表:创建新虚拟机时,使用 the-disk 选项创建并附加新磁盘作为 virt-install 命令的一部分。具体步骤请参阅创建虚拟机。
- 列表:对于现有虚拟机,创建基于磁盘的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
- 列表:确定您的管理程序支持基于磁盘的存储池: # virsh pool-capabilities | grep "'disk' supported='yes'" 如果命令显示任何输出结果,则代表支持基于磁盘的池。
- 列表:准备一个设备,以此作为存储池的基础。因此,首选分区(例如 /dev/sdb1)或 LVM 卷。如果您提供对整个磁盘或块设备(例如 /dev/sdb)的写入访问权限的虚拟机,则虚拟机可能会对其分区或创建自己的 LVM 组。这可能会导致主机上的系统错误。 但是,如果您需要为存储池使用整个块设备,红帽建议保护设备上的任何重要分区不受 os-prober 功能的影响。要做到这一点,编辑 /etc/default/grub 文件,并应用以下配置之一: 禁用 os-prober。 GRUB_DISABLE_OS_PROBER=true 防止 os-prober 发现您要使用的分区。例如: GRUB_OS_PROBER_SKIP_LIST="5…
- 列表:禁用 os-prober。 GRUB_DISABLE_OS_PROBER=true
- 列表:防止 os-prober 发现您要使用的分区。例如: GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
- 命令/配置摘录:
# virsh pool-capabilities | grep "'disk' supported='yes'"
GRUB_DISABLE_OS_PROBER=true- 注意:注意 virsh pool-start 命令只用于持久存储池。临时存储池创建时会自动启动。
13.4.4. 使用 web 控制台将基于磁盘的存储附加到虚拟机
- 要点:要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2 或 .raw 格式的基于文件的虚拟磁盘。
- 要点:要使用 Web 控制台将基于磁盘的存储附加到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建基于磁盘的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:创建并设置基于磁盘的新存储池(如果还没有池)。 点 Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool。 在 Create Storage Pool 对话框中,输入存储池的名称。 在 Type 下拉菜单中选择 物理磁盘设备。 注意 如果您在下拉菜单中选择 物理磁盘设备 选项,则您的管理程序不支持基于磁盘的存储池。 输入以下信息: 目标路径 - 指定目标设备的路径。这将是用于存储池的路径。 源路径 - 指定存储设备的路径。例如: /dev/sdb。 格式 - 分区表的类型。 启动」 - 主机引导时是否启动存储池。 点击 Create。 创建存储池时,Create St…
- 注意:注意 如果您在下拉菜单中选择 物理磁盘设备 选项,则您的管理程序不支持基于磁盘的存储池。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
13.4.5. 使用命令行将基于 LVM 的存储附加到虚拟机
- 要点:要为虚拟机(VM)提供本地存储,您可以使用基于 LVM 的存储卷。这种类型的磁盘镜像基于 LVM 卷组,并使用 .qcow2 或 .raw 格式。
- 要点:要使用命令行将基于 LVM 的存储附加到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建基于 LVM 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
- 列表:基于 LVM 的存储池不能为 LVM 提供完整的灵活性。
- 列表:基于 LVM 的存储池是卷组。您可以使用 virsh 工具创建卷组,但使用这种方法,您在创建的卷组中只能有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。
- 列表:基于 LVM 的存储池需要一个完整磁盘分区。如果您使用 virsh 命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。在这些过程中,如果您使用主机的现有卷组,则不会删除任何内容。
- 列表:确定您的管理程序支持基于 LVM 的存储池: # virsh pool-capabilities | grep "'logical' supported='yes'" 如果命令显示任何输出结果,则支持基于 LVM 的池。
- 命令/配置摘录:
# virsh pool-capabilities | grep "'logical' supported='yes'"
# virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg Pool guest_images_lvm defined- 注意:注意 virsh pool-start 命令只用于持久存储池。临时存储池创建时会自动启动。
13.4.6. 使用 web 控制台将基于 LVM 的存储附加到虚拟机
- 要点:要为虚拟机(VM)提供本地存储,您可以使用基于 LVM 的存储卷。这种类型的磁盘镜像基于 LVM 卷组,并使用 .qcow2 或 .raw 格式。
- 要点:要使用 Web 控制台将基于磁盘的存储附加到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建基于 LVM 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
- 列表:基于 LVM 的存储池不能为 LVM 提供完整的灵活性。
- 列表:基于 LVM 的存储池是卷组。您可以使用 virsh 工具创建卷组,但使用这种方法,您在创建的卷组中只能有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。
- 列表:基于 LVM 的存储池需要一个完整磁盘分区。如果您使用 virsh 命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。在这些过程中,如果您使用主机的现有卷组,则不会删除任何内容。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 注意:注意 如果您在下拉菜单中选择 LVM 卷组 选项,则您的管理程序不支持基于磁盘的存储池。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
13.4.7. 使用命令行将基于 NFS 的存储附加到虚拟机
- 要点:要为虚拟机(VM)提供网络存储,您可以根据 Network File Sytem (NFS)服务器使用存储卷。
- 要点:要使用命令行将基于 NFS 的存储附加到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建基于 NFS 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
- 列表:确定您的管理程序支持基于 NFS 的存储池: # virsh pool-capabilities | grep "<value>nfs</value>" 如果该命令显示任何输出结果,则代表支持基于 NFS 的池。
- 列表:您必须有一个可以使用的可用 NFS。详情请查看 挂载 NFS 共享
- 列表:如果还没有新的基于 NFS 的存储池,请创建和设置新的存储池。 定义并创建 NFS 类型的存储池。例如,要创建一个名为 guest_images_netfs 的存储池,它使用 IP 为 111.222.111.222 的 NFS 服务器,使用目标目录 /var/lib/libvirt/images/nfspool 挂载在服务器目录 /home/net_mount 上: # virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' -…
- 列表:定义并创建 NFS 类型的存储池。例如,要创建一个名为 guest_images_netfs 的存储池,它使用 IP 为 111.222.111.222 的 NFS 服务器,使用目标目录 /var/lib/libvirt/images/nfspool 挂载在服务器目录 /home/net_mount 上: # virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' --source-format='nfs' \ --target…
- 命令/配置摘录:
# virsh pool-capabilities | grep "<value>nfs</value>"
# virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' --source-format='nfs' \ --target='/var/lib/libvirt/images/nfspool' Pool guest_images_netfs defined13.4.8. 使用 web 控制台将基于 NFS 的存储附加到虚拟机
- 要点:要为虚拟机(VM)提供网络存储,您可以根据 Network File Sytem (NFS)服务器使用存储卷。
- 要点:要使用 Web 控制台将基于 NFS 的存储附加到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建基于 NFS 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:如果还没有新的基于 NFS 的存储池,请创建和设置新的存储池。 点 Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool。 在 Create Storage Pool 对话框中,输入存储池的名称。 在 Type 下拉菜单中选择 Network File system。 注意 如果您在下拉菜单中选择 网络文件系统 选项,则您的管理程序不支持基于 NFS 的存储池。 输入以下信息: 目标路径 - 指定目标的路径。这将是用于存储池的路径。 主机 - 挂载点所在的网络服务器的主机名。这可以是主机名或 IP 地址。 源路径 - 网络服务器中使用的目录。 启动」 - 主机引导时是…
- 注意:注意 如果您在下拉菜单中选择 网络文件系统 选项,则您的管理程序不支持基于 NFS 的存储池。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
13.5. 检查虚拟磁盘的一致性
- 要点:在将磁盘镜像附加到虚拟机(VM)之前,请确保磁盘镜像没有问题,如损坏或碎片太多。为此,您可以使用 qemu-img check 命令。
- 要点:如果需要,您还可以使用这个命令来尝试修复磁盘镜像。
- 列表:任何使用磁盘镜像的虚拟机(VM)都必须已关闭。
- 列表:对您要测试的镜像使用 qemu-img check 命令。例如: # qemu-img check <test-name.qcow2> No errors were found on the image. 327434/327680 = 99.92% allocated, 0.00% fragmented, 0.00% compressed clusters Image end offset: 21478375424 如果对磁盘镜像的检查发现问题,则命令的输出类似如下: 167 errors were found on the image. Data may be corrupted, or further writes to t…
- 列表:要尝试修复检测到的问题,请使用 qemu-img check 命令和 all 选项。但请注意,这可能只修复一些问题。 警告 修复磁盘镜像可能导致数据损坏或其他问题。在尝试修复前备份磁盘镜像。 # qemu-img check -r all <test-name.qcow2> [...] 122 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 250 internal errors have occurred during the check. Image end offset:…
- 列表:如果需要进一步的磁盘镜像修复,您可以使用 guestfish shell 中的各种 libguestfs 工具。
- 列表:您系统上的 QEMU-img 和 guestfish 手册页
- 命令/配置摘录:
# qemu-img check <test-name.qcow2> No errors were found on the image. 327434/327680 = 99.92% allocated, 0.00% fragmented, 0.00% compressed clusters Image end offset: 21478375424
167 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 453368 leaked clusters were found on the image. This means waste of disk space, but no harm to data. 259 internal errors have occurred during the check. Image end offset: 21478375424- 注意:警告 修复磁盘镜像可能导致数据损坏或其他问题。在尝试修复前备份磁盘镜像。
13.6. 调整虚拟磁盘大小
- 要点:如果现有磁盘镜像需要额外的空间,您可以使用 qemu-img resize 工具更改镜像的大小,以适合您的用例。
- 要点:先决条件
- 列表:您已创建了磁盘镜像的备份。
- 列表:任何使用磁盘镜像的虚拟机(VM)都必须关闭。 警告 调整正在运行的虚拟机的磁盘镜像大小可能会导致数据损坏或其他问题。
- 列表:主机的硬盘有足够的用于预期的磁盘镜像大小的空闲空间。
- 列表:可选: 您确保磁盘镜像没有数据损坏或类似的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
- 列表:确定您要调整大小的虚拟机的磁盘镜像文件的位置。例如: # virsh domblklist <vm-name> Target Source ---------------------------------------------------------- vda /home/username/disk-images/example-image.qcow2
- 列表:可选: 备份当前磁盘镜像。 # cp <example-image.qcow2> <example-image-backup.qcow2>
- 命令/配置摘录:
# virsh domblklist <vm-name> Target Source ---------------------------------------------------------- vda /home/username/disk-images/example-image.qcow2
# cp <example-image.qcow2> <example-image-backup.qcow2>- 注意:警告 调整正在运行的虚拟机的磁盘镜像大小可能会导致数据损坏或其他问题。
13.7. 在虚拟磁盘格式间转换
- 要点:您可以使用 qemu-img convert 命令将虚拟磁盘镜像转换为不同的格式。例如,如果要将磁盘镜像附加到在不同 hypervisor 上运行的虚拟机(VM),则可能需要在虚拟磁盘镜像格式之间进行转换。
- 要点:先决条件
- 列表:任何使用磁盘镜像的虚拟机(VM)都必须已关闭。
- 列表:QEMU 必须支持用于转换的源磁盘镜像格式。有关详细列表,请参阅 支持的磁盘镜像格式。
- 列表:使用 qemu-img convert 命令将现有虚拟磁盘镜像转换为不同的格式。例如,要将 raw 磁盘镜像转换为 QCOW2 磁盘镜像: # qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
- 列表:显示转换的镜像的信息,并查看它是否具有预期的格式和大小。 # qemu-img info <converted-image.qcow2> image: converted-image.qcow2 file format: qcow2 virtual size: 30 GiB (32212254720 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: fals…
- 列表:检查磁盘镜像是否有潜在的错误。有关说明,请参阅 检查虚拟磁盘的一致性。
- 列表:检查虚拟磁盘的一致性
- 命令/配置摘录:
# qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
# qemu-img info <converted-image.qcow2> image: converted-image.qcow2 file format: qcow2 virtual size: 30 GiB (32212254720 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false13.8. 使用命令行删除虚拟机存储
- 要点:如果您不再需要附加到虚拟机(VM)的虚拟磁盘,或者要释放主机存储资源,则可以使用命令行进行以下任一操作:
- 要点:流程
- 列表:从虚拟机中分离虚拟磁盘。
- 列表:删除虚拟磁盘及其内容。
- 列表:取消激活与虚拟磁盘相关的存储池。
- 列表:删除与虚拟磁盘相关的存储池。
- 列表:要从虚拟机中分离虚拟磁盘,请使用 virsh detach-disk 命令。 可选:列出附加到虚拟机的所有存储设备: # *virsh domblklist --details <vm-name> Type Device Target Source ----------------------------------------------------------------------------- file disk hda /home/VirtualMachines/vm-name.qcow2 file cdrom hdb - file disk vdc /home/VirtualMachines/test-disk…
- 列表:可选:列出附加到虚拟机的所有存储设备: # *virsh domblklist --details <vm-name> Type Device Target Source ----------------------------------------------------------------------------- file disk hda /home/VirtualMachines/vm-name.qcow2 file cdrom hdb - file disk vdc /home/VirtualMachines/test-disk2.qcow2
- 命令/配置摘录:
# *virsh domblklist --details <vm-name> Type Device Target Source ----------------------------------------------------------------------------- file disk hda /home/VirtualMachines/vm-name.qcow2 file cdrom hdb - file disk vdc /home/VirtualMachines/test-disk2.qcow2
# virsh detach-disk testguest vdc --persistent13.9. 使用 web 控制台删除虚拟机存储
- 要点:如果您不再需要附加到虚拟机(VM)的虚拟磁盘,或者要释放主机存储资源,您可以使用 web 控制台进行以下操作:
- 要点:先决条件
- 列表:从虚拟机中分离虚拟磁盘。
- 列表:删除虚拟磁盘及其内容。
- 列表:取消激活与虚拟磁盘相关的存储池。
- 列表:删除与虚拟磁盘相关的存储池。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 命令/配置摘录:
# virsh vol-delete --pool RHEL-storage-pool test-disk213.10. 支持的磁盘镜像格式
- 要点:要在 RHEL 上运行虚拟机(VM),您必须使用具有支持格式的磁盘镜像。您还可以将某些不支持的磁盘镜像转换为支持的格式。
- 要点:虚拟机支持的磁盘镜像格式
- 列表:qcow2 - 提供某些额外功能,如压缩。
- 列表:raw - 可以提供更好的性能。
- 列表:luks - 使用 Linux Unified Key Setup (LUKS)规范加密的磁盘镜像。
- 列表:如果需要,您可以使用 qemu-img convert 命令,在 raw 和 qcow2 格式之间转换磁盘镜像。
- 列表:如果您需要将 vmdk 磁盘镜像转换为 raw 或 qcow2 格式,请使用 virt-v2v 工具 将使用磁盘的虚拟机转换为 KVM。
- 列表:要将其他磁盘镜像格式转换为 raw 或 qcow2,您可以使用 qemu-img convert 命令。有关适用于这个命令的格式的列表,请查看 QEMU 文档。 请注意,在大多数情况下,将非 KVM 虚拟机的磁盘镜像格式转换为 qcow2 或 raw 不足以使虚拟机在 RHEL KVM 上正确运行。除了转换磁盘镜像外,还必须在虚拟机的客户机操作系统中安装和配置相应的驱动程序。对于支持的 hypervisor 转换,请使用 virt-v2v 工具。
第 14 章 使用快照保存和恢复虚拟机状态
- 要点:要保存虚拟机的当前状态,您可以创建一个虚拟机的 快照。之后,您可以恢复到快照,来将虚拟机返回到保存的状态。
- 要点:VM 快照包含虚拟机的磁盘镜像。如果您从正在运行的虚拟机(也称为实时快照 ) 创建快照,则快照 还包含虚拟机的内存状态,其中包括正在运行的进程和应用程序。
- 列表:保存客户机操作系统的干净状态
- 列表:确保您在对虚拟机执行具有潜在的破坏性操作之前有一个恢复点
14.1. 对虚拟机快照的支持限制
- 要点:红帽仅在使用 external 快照时支持对 RHEL 上虚拟机(VM)的快照功能。目前,只有在满足以下所有要求时,才能在 RHEL 上创建外部快照:
- 要点:您只能在以下场景之一创建虚拟机快照:
- 列表:虚拟机使用基于文件的存储。
- 列表:您只能在以下场景之一创建虚拟机快照: 虚拟机已关闭。 如果虚拟机正在运行,您可以使用 --disk-only --quiesce 选项或 --live --memspec 选项。
- 列表:虚拟机已关闭。
- 列表:如果虚拟机正在运行,您可以使用 --disk-only --quiesce 选项或 --live --memspec 选项。
- 列表:支持的快照的输出示例: <domainsnapshot> <name>sample-snapshot-name-1<name> <state>shutoff</state> <creationTime>1706658764</creationTime> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='external' type='file'> <driver type='qcow2'/> <source file='/var/lib/libvirt/images/vm-name.sample-snapshot-name-1'/> </disk…
- 列表:不支持的快照的输出示例: <domainsnapshot> <name>sample-snapshot-name-2</name> <state>running</state> <creationTime>1653396424</creationTime> <memory snapshot='internal'/> <disks> <disk name='vda' snapshot='internal'/> <disk name='sda' snapshot='no'/> </disks> <domain type='kvm'> [...]
- 命令/配置摘录:
# virsh snapshot-dumpxml <vm-name> <snapshot-name>
<domainsnapshot> <name>sample-snapshot-name-1<name> <state>shutoff</state> <creationTime>1706658764</creationTime> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='external' type='file'> <driver type='qcow2'/> <source file='/var/lib/libvirt/images/vm-name.sample-snapshot-name-1'/> </disk> </disks> <domain type='kvm'> [...]- 注意:警告 大多数其他配置都会创建 内部 快照,这些快照在 RHEL 10 中已被弃用。内部快照可能适用于您的用例,但红帽不提供对它们的全面测试和支持。 不要在生产环境中使用内部快照。
14.2. 使用命令行创建虚拟机快照
- 要点:要在快照中保存虚拟机(VM)的状态,您可以使用 virsh snapshot-create-as 命令。
- 要点:先决条件
- 列表:虚拟机使用基于文件的存储。要检查是否是这种情况,请使用以下命令,并确保对于 disk 设备,其 disk type 显示为 file : # virsh dumpxml <vm-name> | grep "disk type" <disk type='file' device='disk'> <disk type='file' device='cdrom'>
- 列表:如果要创建一个包含正在运行的虚拟机内存的虚拟机快照,您必须有足够的磁盘空间来存储虚拟机的内存。 保存虚拟机的内存的最少推荐空间等于虚拟机分配的 RAM。例如,保存具有 32 GB RAM 的虚拟机内存需要最多 32 GB 的磁盘空间。 如果虚拟机 I/O 负载过重,则可能需要大量额外的磁盘空间。 如果虚拟机已分配了 VFIO passthrough 设备,则可能需要额外的磁盘空间。 如果快照是在不暂停虚拟机的情况下创建的,则可能需要额外的磁盘空间。 警告 红帽建议不保存在非常高的工作负载下运行的或使用 VFIO passthrough 设备的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚…
- 列表:保存虚拟机的内存的最少推荐空间等于虚拟机分配的 RAM。例如,保存具有 32 GB RAM 的虚拟机内存需要最多 32 GB 的磁盘空间。
- 列表:如果虚拟机 I/O 负载过重,则可能需要大量额外的磁盘空间。
- 列表:如果虚拟机已分配了 VFIO passthrough 设备,则可能需要额外的磁盘空间。
- 列表:如果快照是在不暂停虚拟机的情况下创建的,则可能需要额外的磁盘空间。 警告 红帽建议不保存在非常高的工作负载下运行的或使用 VFIO passthrough 设备的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚拟机创建没有内存的快照。 另外,请注意,并非所有 VFIO 设备都能够创建具有内存的快照。目前,仅在以下情况下,创建带有内存的快照才能正常工作: 连接的 VFIO 设备是一个启用了迁移功能的 Mellanox VF。 连接的 VFIO 设备是一个启用了迁移功能的 NVIDIA vGPU。
- 命令/配置摘录:
# virsh dumpxml <vm-name> | grep "disk type" <disk type='file' device='disk'> <disk type='file' device='cdrom'>
# virsh snapshot-create-as <vm-name> <snapshot-name> <optional-description> <additional-parameters>- 注意:警告 红帽建议不保存在非常高的工作负载下运行的或使用 VFIO passthrough 设备的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚拟机创建没有内存的快照。 另外,请注意,并非所有 VFIO 设备都能够创建具有内存的快照。目前,仅在以下情况下,创建带有内存的快照才能正常工作: 连接的 VFIO 设备是一个启用了迁移功能的 Mellanox VF。 连接的 VFIO 设备是一个启用了迁移功能的 NVIDIA vGPU。
- 注意:警告 将虚拟机的内存保存到快照中会将正在运行的进程的状态保存到虚拟机的客户机操作系统中。但是,当您恢复到此类快照时,进程可能会因为各种因素而失败,如丢失网络连接或未同步的系统时间。
14.3. 使用 web 控制台创建虚拟机快照
- 要点:要将虚拟机(VM)的状态保存到快照中,您可以使用 RHEL web 控制台。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:虚拟机使用基于文件的存储。要确保情况是这种情况,请执行以下步骤: 在 web 控制台的 Virtual machines 界面中,点您要创建快照的虚拟机。 在管理概述的 Disks 窗格中,检查列出的设备的 Source 列。在所有列出源的设备中,此源必须是 File。
- 列表:在 web 控制台的 Virtual machines 界面中,点您要创建快照的虚拟机。
- 列表:在管理概述的 Disks 窗格中,检查列出的设备的 Source 列。在所有列出源的设备中,此源必须是 File。
- 列表:登录到 RHEL 10 web 控制台。
- 命令/配置摘录:
# virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external <disk name='vda' snapshot='external' type='file'>14.4. 使用命令行还原到虚拟机快照
- 要点:要将虚拟机(VM)返回到快照中保存的状态,您可以使用命令行界面(CLI)。
- 要点:先决条件
- 列表:提供了虚拟机快照,您之前已在 web 控制台中创建 或使用命令行。
- 列表:可选:您已创建虚拟机当前状态的快照。如果您恢复到以前没有保存当前状态的快照,则自上次快照以来在虚拟机上执行的更改将丢失。
- 列表:使用 virsh snapshot-revert 工具,并指定虚拟机的名称以及您要恢复到的快照的名称。例如,以下命令将 Testguest2 虚拟机恢复到 clean-install 快照。 # virsh snapshot-revert Testguest2 clean-install Domain snapshot clean-install reverted
- 列表:显示恢复的虚拟机的当前活跃的快照: # virsh snapshot-current Testguest2 --name clean-install
- 命令/配置摘录:
# virsh snapshot-revert Testguest2 clean-install Domain snapshot clean-install reverted
# virsh snapshot-current Testguest2 --name clean-install14.5. 使用 web 控制台恢复到虚拟机快照
- 要点:要将虚拟机(VM)返回到快照中保存的状态,您可以使用 RHEL web 控制台。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:提供了虚拟机快照,您之前已在 web 控制台中创建 或使用命令行。
- 列表:可选:您已创建虚拟机当前状态的快照。如果您恢复到以前没有保存当前状态的快照,则自上次快照以来在虚拟机上执行的更改将丢失。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 web 控制台的 Virtual machines 界面中,点您要恢复其状态的虚拟机。 此时会打开虚拟机的管理概述。
14.6. 使用命令行删除虚拟机快照
- 要点:当虚拟机(VM)快照不再对您有用时,您可以在命令行上删除它,以释放其使用的磁盘空间。
- 要点:先决条件
- 列表:可选:存在您要删除的快照的子快照。 当您有一个活跃的快照并创建一个新快照时,会自动创建一个子快照。如果您删除了没有子快照的快照,则在从其父快照创建后,您将丢失快照中保存的任何更改。 要查看虚拟机中快照的父子结构,请使用 virsh snapshot-list --tree 命令。以下示例显示 Latest-snapshot 为 Redundant-snapshot 的一个子快照。 # virsh snapshot-list --tree <vm-name> Clean-install-snapshot | +- Redundant-snapshot | +- Latest-snapshot
- 列表:使用 virsh snapshot-delete 命令删除快照。例如,以下命令从 Testguest1 虚拟机中删除 Redundant-snapshot : # virsh snapshot-delete Testguest1 Redundant-snapshot Domain snapshot Redundant-snapshot deleted
- 列表:要确保您删除的快照不再存在,请显示受影响的虚拟机的现有快照及其父-子结构: # virsh snapshot-list --tree <Testguest1> Clean-install-snapshot | +- Latest-snapshot 在本例中,Redundant-snapshot 已被删除,Latest-snapshot 已变为 Clean-install-snapshot 的子快照。
- 命令/配置摘录:
# virsh snapshot-list --tree <vm-name> Clean-install-snapshot | +- Redundant-snapshot | +- Latest-snapshot
# virsh snapshot-delete Testguest1 Redundant-snapshot Domain snapshot Redundant-snapshot deleted14.7. 使用 web 控制台删除虚拟机快照
- 要点:当虚拟机(VM)快照不再对您有用时,您可以在 web 控制台中删除它,来释放其使用的磁盘空间。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:可选:存在您要删除的快照的子快照。 当您有一个活跃的快照并创建一个新快照时,会自动创建一个子快照。如果您删除了没有子快照的快照,则在从其父快照创建后,您将丢失快照中保存的任何更改。 要检查快照是否有子快照,请在虚拟机的 Web 控制台概述中 Snapshots 的 Parent snapshot 列中列出的快照中进行确认。
- 列表:在 web 控制台的 Virtual machines 界面中,点击您要删除其快照的虚拟机。 此时会打开虚拟机的管理概述。
- 列表:在管理概述的 Snapshots 窗格中,单击您要删除的快照旁边的 Delete 按钮。
- 列表:等待删除操作完成。根据快照的大小,这可能需要最多几分钟时间。
第 15 章 将主机设备附加到虚拟机
- 要点:您可以通过将主机设备附加到虚拟机来扩展虚拟机的功能。将主机设备附加到虚拟机时,虚拟设备 用于此目的,这是硬件设备的软件抽象。
15.1. 虚拟设备的工作原理
- 要点:与物理机一样,虚拟机(VM)也要求专门的设备来为系统提供功能,如处理能力、内存、存储、网络或图形。物理系统通常将硬件设备用于这些目的。但是,由于虚拟机作为软件进程运行,因此需要使用此类设备的软件抽象,称为 虚拟设备。
- 要点:虚拟设备的基础知识
- 列表:CPU
- 列表:内存
- 列表:键盘
- 列表:网络接口控制器(NIC)
- 列表:各种设备控制器
- 列表:一个视频卡
15.2. 虚拟设备类型
- 要点:RHEL 10 中的虚拟化可显示可附加到虚拟机的几种不同类型的虚拟设备:
- 要点:模拟设备是广泛使用的物理设备的软件实现。为物理设备设计的驱动程序还与模拟设备兼容。因此可非常灵活地使用模拟设备。
- 列表:虚拟 CPU(vCPU),有大量 CPU 型号可供选择。模拟的性能影响显著取决于主机 CPU 和模拟 vCPU 之间的差异。
- 列表:模拟系统组件,如 PCI 总线控制器。
- 列表:模拟存储控制器,如 SATA、SCSI 甚至 IDE。
- 列表:模拟声音设备,如 ICH9、ICH6 或 AC97。
- 列表:模拟图形卡,如 VGA 卡。
- 列表:模拟网络设备,如 rtl8139。
- 注意:注意 这些类型的某些设备可能不被支持,或者与 RHEL 不兼容。如果您需要帮助设置虚拟设备,请咨询红帽支持。
15.3. 使用命令行将 USB 设备附加到虚拟机
- 要点:使用虚拟机(VM)时,您可以访问并控制 USB 设备,如附加到主机系统的如闪存驱动器或 Web 相机。在这种情况下,主机系统会将设备的控制权传递给虚拟机。这也被称为 USB-passthrough。
- 要点:要将 USB 设备附加到虚拟机,您可以在虚拟机 XML 配置文件中包含 USB 设备信息。
- 列表:确定您要传递给虚拟机的设备已附加到主机。
- 列表:找到您要附加到虚拟机的 USB 总线和设备值。 例如:以下命令显示附加到该主机的 USB 设备列表。在这个示例中,使用的设备作为设备 005 总线附加到总线 001 中。 # lsusb [...] Bus 001 Device 003: ID 2567:0a2b Intel Corp. Bus 001 Device 005: ID 0407:6252 Kingston River 2.0 [...]
- 列表:使用 virt-xml 工具及 --add-device 参数。 例如,以下命令将 USB 闪存驱动器附加到 example-VM-1 虚拟机。 # virt-xml example-VM-1 --add-device --hostdev 001.005 Domain 'example-VM-1' defined successfully. 注意 要将 USB 设备附加到正在运行的虚拟机,请在命令中添加- -update 参数。
- 列表:使用 virsh dumpxml 命令查看设备的 XML 定义是否已添加到虚拟机 XML 配置文件中的 <devices> 部分。 # virsh dumpxml example-VM-1 [...] <hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x0407'/> <product id='0x6252'/> <address bus='1' device='5'/> </source> <alias name='hostdev0'/> <address type='usb' bus='0' port='3'/> <…
- 列表:运行虚拟机并测试该设备是否存在并正常工作。
- 列表:您系统上的 virt-xml (1) 手册页
- 命令/配置摘录:
# lsusb [...] Bus 001 Device 003: ID 2567:0a2b Intel Corp. Bus 001 Device 005: ID 0407:6252 Kingston River 2.0 [...]
# virt-xml example-VM-1 --add-device --hostdev 001.005 Domain 'example-VM-1' defined successfully.- 注意:注意 要将 USB 设备附加到正在运行的虚拟机,请在命令中添加- -update 参数。
15.4. 使用命令行将 PCI 设备附加到虚拟机
- 要点:使用虚拟机(VM)时,您可以访问和控制附加到主机系统的 PCI 设备(如存储或网络控制器)。在这种情况下,主机系统会将设备的控制权传递给虚拟机。这也被称为 PCI 设备分配或 PCI 透传。
- 要点:要使用附加到虚拟机(VM)中主机的 PCI 硬件设备,您可以从主机中分离该设备并将其分配给虚拟机。
- 列表:如果您的主机使用 IBM Z 架构,则必须在主机上载入 vfio 内核模块。要验证,请使用以下命令: # lsmod | grep vfio 输出必须包含以下模块: vfio_pci vfio_pci_core vfio_iommu_type1
- 列表:vfio_pci
- 列表:vfio_pci_core
- 列表:vfio_iommu_type1
- 列表:将 SR-IOV 网络设备附加到虚拟机
- 列表:为虚拟机分配 GPU
- 命令/配置摘录:
# lsmod | grep vfio
# lspci -nkD 0000:00:00.0 0600: 8086:a708 (rev 01) Subsystem: 17aa:230e Kernel driver in use: igen6_edac Kernel modules: igen6_edac 0000:00:02.0 0300: 8086:a7a1 (rev 04) Subsystem: 17aa:230e Kernel driver in use: i915 Kernel modules: i915, xe 0000:00:04.0 1180: 8086:a71d (rev 01) Subsystem: 17aa:230e Kernel driver in use: thermal_pci Kernel modules: processor_thermal_device_pci 0000:00:05.0 0604: 8086:a74d (rev 01) Subsystem: 17aa:230e Kernel driver in use: pcieport 0000:00:07.0 0604: 8086:a76e (rev 01) Subsystem: 17aa:230e Kernel driver in use: pcieport 0000:65:00.0 0108: 144d:a822 (rev 01) DeviceName: PCIe SSD in Slot 0 Bay 2…15.5. 使用 web 控制台将主机设备附加到虚拟机
- 要点:要为虚拟机添加特定的功能,您可以使用 web 控制台将主机设备附加到虚拟机。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:如果要附加 PCI 设备,请确保 hostdev 元素的 managed 属性的状态被设为 yes。 注意 将 PCI 设备附加到虚拟机时,请不要省略 hostdev 元素的 managed 属性,或者将其设为 no。如果您这样做了,当把 PCI 设备传给虚拟机时,会无法自动将 PCI 设备与主机分离。当您关闭虚拟机时,也不能自动将它们重新附加到主机上。 因此,主机可能会变得无响应,或意外关闭。 您可以在虚拟机的 XML 配置中找到 managed 属性的状态。以下示例打开 example-VM-1 虚拟机的 XML 配置。 # virsh edit example-VM-1
- 列表:备份虚拟机中的重要数据。
- 列表:可选:备份虚拟机的 XML 配置。例如,要备份 example-VM-1 虚拟机: # virsh dumpxml example-VM-1 > example-VM-1.xml
- 列表:Web 控制台 VM 插件安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 命令/配置摘录:
# virsh edit example-VM-1
# virsh dumpxml example-VM-1 > example-VM-1.xml- 注意:注意 将 PCI 设备附加到虚拟机时,请不要省略 hostdev 元素的 managed 属性,或者将其设为 no。如果您这样做了,当把 PCI 设备传给虚拟机时,会无法自动将 PCI 设备与主机分离。当您关闭虚拟机时,也不能自动将它们重新附加到主机上。 因此,主机可能会变得无响应,或意外关闭。
15.6. 使用命令行从虚拟机中删除 USB 设备
- 要点:要从虚拟机中删除 USB 设备,您可以从虚拟机 XML 配置中删除 USB 设备信息。
- 要点:流程
- 列表:找到您要从虚拟机中删除的 USB 的 bus 和 device 值。 例如:以下命令显示附加到该主机的 USB 设备列表。在这个示例中,使用的设备作为设备 005 总线附加到总线 001 中。 # lsusb [...] Bus 001 Device 003: ID 2567:0a2b Intel Corp. Bus 001 Device 005: ID 0407:6252 Kingston River 2.0 [...]
- 列表:使用 virt-xml 工具及 --remove-device 参数。 例如,以下命令从 example-VM-1 虚拟机中删除附加到主机作为总线 001 上设备 005 的 USB 闪存驱动器。 # virt-xml example-VM-1 --remove-device --hostdev 001.005 Domain 'example-VM-1' defined successfully.
- 列表:运行虚拟机并检查该设备是否已从设备列表中删除。
- 列表:您系统上的 virt-xml (1) 手册页
- 命令/配置摘录:
# lsusb [...] Bus 001 Device 003: ID 2567:0a2b Intel Corp. Bus 001 Device 005: ID 0407:6252 Kingston River 2.0 [...]
# virt-xml example-VM-1 --remove-device --hostdev 001.005 Domain 'example-VM-1' defined successfully.- 注意:注意 要从正在运行的虚拟机中删除 USB 设备,请将 --update 参数添加到上一命令中。
15.7. 使用命令行从虚拟机中删除 PCI 设备
- 要点:要从虚拟机(VM)中删除 PCI 设备,请从虚拟机的 XML 配置中删除设备信息。
- 要点:流程
- 列表:在附加 PCI 设备的虚拟机的 XML 配置中,使用设备的设置在 < hostdev> ; 部分找到 < address domain > 行。 # virsh dumpxml <VM-name> [...] <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x65' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0…
- 列表:使用 virsh detach-device 命令及 the-- hostdev 选项和设备地址。 例如,以下命令会永久删除上一步中的设备。 # virt detach-device <VM-name> --hostdev 0000:65:00.0 --config Domain 'VM-name' defined successfully. 注意 要从正在运行的虚拟机中删除 PCI 设备,请在上一个命令中添加 - live 参数。
- 列表:可选:将 PCI 设备重新附加到主机。例如,以下命令重新附加从上一步中虚拟机中删除的设备: # virsh nodedev-reattach pci_0000_65_00_0 Device pci_0000_65_00_0 re-attached
- 列表:再次显示虚拟机的 XML 配置,检查设备的 < hostdev& gt; 部分是否不再显示。 # virsh dumpxml <VM-name>
- 列表:您系统上的 virsh (1) 手册页
- 命令/配置摘录:
# virsh dumpxml <VM-name> [...] <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x65' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </hostdev> [...]
# virt detach-device <VM-name> --hostdev 0000:65:00.0 --config Domain 'VM-name' defined successfully.- 注意:注意 要从正在运行的虚拟机中删除 PCI 设备,请在上一个命令中添加 - live 参数。
15.8. 使用 web 控制台从虚拟机中删除主机设备
- 要点:要释放资源,修改虚拟机的功能或两个都做,您可以使用 Web 控制台来修改虚拟机,并删除不再需要的主机设备。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件安装在您的系统上。
- 列表:可选:使用 virsh dumpxml example-VM-1 备份虚拟机的 XML 配置,并将输出发送到文件。例如,以下命令将 testguest1 虚拟机的配置备份为 testguest1.xml 文件: # virsh dumpxml testguest1 > testguest1.xml # cat testguest1.xml <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>testguest1</name> <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uu…
- 列表:在 Virtual Machines 接口中,点击您要从中删除主机设备的虚拟机。 这会打开一个新页面,其中包含有关所选虚拟机基本信息的 概述,以及访问虚拟机图形界面的 控制台 部分。
- 列表:滚动到 Host devices。 Host devices 部分显示有关附加到虚拟机的设备的信息,以及 添加到 添加或删除 设备的选项。
- 列表:点击您要从虚拟机中删除设备旁边的 Remove 按钮。 此时会显示删除设备确认对话框。
- 命令/配置摘录:
# virsh dumpxml testguest1 > testguest1.xml # cat testguest1.xml <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>testguest1</name> <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid> [...] </domain>
# virsh define testguest1.xml15.9. 将 ISO 镜像附加到虚拟机
- 要点:当使用虚拟机时,您可以访问保存在主机中 ISO 镜像中的信息。要做到这一点,请将 ISO 镜像作为虚拟光驱附加到虚拟机,比如 CD 驱动器或者 DVD 驱动器。
15.9.1. 使用命令行将 ISO 镜像附加到虚拟机
- 要点:要将 ISO 镜像作为虚拟光驱附加,请编辑虚拟机的 XML 配置文件并添加新驱动器。
- 要点:先决条件
- 列表:您必须在主机机器上存储和复制 ISO 镜像的路径。
- 列表:使用带有 --add-device 参数的 virt-xml 工具: 例如,以下命令将存储在 /home/username/Downloads 目录中的 example-ISO-name ISO 镜像附加到 example-VM-name 虚拟机。 # virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom Domain 'example-VM-name' defined successfully.
- 列表:运行虚拟机并测试该设备是否存在并正常工作。
- 列表:man virt-xml 命令
- 命令/配置摘录:
# virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom Domain 'example-VM-name' defined successfully.15.9.2. 使用虚拟光驱替换 ISO 镜像
- 要点:要替换作为虚拟光驱附加到虚拟机(VM)的 ISO 镜像,请编辑虚拟机的 XML 配置文件,并指定替换。
- 要点:先决条件
- 列表:您必须将 ISO 镜像存储在主机机器上。
- 列表:您必须知道 ISO 镜像的路径。
- 列表:找到 ISO 镜像附加到虚拟机的目标设备。您可以在虚拟机 XML 配置文件中找到这些信息。 例如,以下命令显示 example-VM-name 虚拟机的 XML 配置文件,其中虚拟光驱的目标设备为 sda。 # virsh dumpxml example-VM-name ... <disk> ... <source file='$(/home/username/Downloads/example-ISO-name.iso)'/> <target dev='sda' bus='sata'/> ... </disk> ...
- 列表:使用 virt-xml 工具及 --edit 参数。 例如,以下命令使用存储在 /dev/cdrom 目录中的 example-ISO-name-2 ISO 镜像替换附加到 example-VM-name 虚拟机目标 sda 处的 example-ISO-name ISO 镜像。 # virt-xml example-VM-name --edit target=sda --disk /dev/cdrom/example-ISO-name-2.iso Domain 'example-VM-name' defined successfully.
- 列表:运行虚拟机并测试是否替换该设备并正常工作。
- 列表:man virt-xml 命令
- 命令/配置摘录:
# virsh dumpxml example-VM-name ... <disk> ... <source file='$(/home/username/Downloads/example-ISO-name.iso)'/> <target dev='sda' bus='sata'/> ... </disk> ...
# virt-xml example-VM-name --edit target=sda --disk /dev/cdrom/example-ISO-name-2.iso Domain 'example-VM-name' defined successfully.15.9.3. 使用命令行从虚拟机中删除 ISO 镜像
- 要点:要删除附加到虚拟机的 ISO 镜像,请编辑虚拟机的 XML 配置文件。
- 要点:流程
- 列表:找到 ISO 镜像附加到虚拟机的目标设备。您可以在虚拟机 XML 配置文件中找到这些信息。 例如,以下命令显示 example-VM-name 虚拟机的 XML 配置文件,其中虚拟光驱的目标设备为 sda。 # virsh dumpxml example-VM-name ... <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='sda' bus='sata'/> ... </disk> ...
- 列表:使用带 --remove-device 参数的virt-xml 工具。 例如,以下命令从 example-VM-name 虚拟机中删除作为目标 sda 附加的光驱。 # virt-xml example-VM-name --remove-device --disk target=sda Domain 'example-VM-name' defined successfully.
- 列表:确认该设备不再列在虚拟机 XML 配置文件中。
- 列表:man virt-xml 命令
- 命令/配置摘录:
# virsh dumpxml example-VM-name ... <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='sda' bus='sata'/> ... </disk> ...
# virt-xml example-VM-name --remove-device --disk target=sda Domain 'example-VM-name' defined successfully.15.10. 使用 web 控制台将 watchdog 设备附加到虚拟机
- 要点:要强制虚拟机(VM)在停止响应时执行指定的操作,您可以将虚拟 watchdog 设备附加到虚拟机。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已在系统中安装了 web 控制台 VM 插件。如需更多信息 ,请参阅设置 web 控制台来管理虚拟机。
- 列表:在命令行上安装 watchdog 服务。 # dnf install watchdog
- 列表:关闭虚拟机。
- 列表:将 watchdog 服务添加到虚拟机。 [ virt-xml vmname --add-device --watchdog action=reset --update
- 列表:运行虚拟机。
第 16 章 配置虚拟机网络连接
- 要点:要使虚拟机(VM)通过网络连接到您的主机、连接到您主机上的其他虚拟机,并且连接到外部网络上的某些位置,必须相应地配置虚拟机网络。为了提供虚拟机网络,RHEL 10 hypervisor 和新创建的虚拟机具有默认网络配置,也可以进一步修改。例如:
- 列表:您可以使主机上的虚拟机被发现并连接到主机外的位置,就如同虚拟机与主机位于同一网络中一样。
- 列表:您可以部分或完全将虚拟机与入站网络流量隔离,以提高其安全性,并将虚拟机出现任何问题而影响主机的风险降至最低。
16.1. 了解虚拟网络
- 要点:虚拟机(VM)连接到网络上的其他设备和位置由主机硬件驱动。有关虚拟机网络连接和默认虚拟机网络设置的机制的详情,请查看以下部分。
16.1.1. 虚拟网络的工作方式
- 要点:虚拟网络使用了虚拟网络交换机的概念。虚拟网络交换机是在主机机器中运行的软件构造。VM 通过虚拟网络交换机连接到网络。根据虚拟交换机的配置,虚拟机可以使用由 hypervisor 管理的现有虚拟网络或不同的网络连接方法。
- 要点:下图展示了将两个虚拟机连接到网络的虚拟网络交换机:
- 列表:路由模式
- 列表:网桥模式
- 列表:隔离模式
- 列表:开放模式
- 命令/配置摘录:
$ ip addr show virbr0 3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global virbr016.1.2. 虚拟机网络的默认配置
- 要点:当在虚拟化主机上安装 virtnetworkd 服务时,它会在网络地址转换(NAT)模式中包含初始虚拟网络配置。默认情况下,主机上的所有虚拟机都连接到同一 libvirt 虚拟网络,名为 default。这个网络上的虚拟机可以连接到主机上和主机之外的网络位置,但有以下限制:
- 要点:下图演示了默认虚拟机网络配置:
- 列表:网络上的虚拟机对主机和主机上的其他虚拟机可见,但网络流量会受到客户机操作系统网络堆栈中的防火墙以及附加到客户机接口的 libvirt 网络过滤规则的影响。
- 列表:网络上的虚拟机可以连接到主机之外但对它们不可见的位置。出站流量受 NAT 规则以及主机系统的防火墙影响。
16.2. 虚拟机的网络连接类型
- 要点:要修改虚拟机的网络属性和行为,更改虚拟机使用的虚拟网络或接口类型。您可以从 RHEL 10 中虚拟机的以下连接类型中进行选择。
16.2.1. 使用网络地址转换进行虚拟联网
- 要点:默认情况下,虚拟网络交换机运行在网络地址转换(NAT)模式下。它们使用 IP 伪装而不是源-NAT(SNAT)或目的-NAT(DNAT)。IP 伪装可让连接的虚拟机使用主机机器的 IP 地址与任何外部网络通信。当虚拟网络交换机运行在 NAT 模式时,主机外的计算机无法与主机内的虚拟机进行通信。
- 注意:警告 虚拟网络交换机使用防火墙规则配置的 NAT。不建议在交换机运行时编辑这些规则,因为不正确的规则可能会导致交换机无法通信。
16.2.2. 路由模式中的虚拟网络
- 要点:当使用 Routed 模式时,虚拟交换机会连接到连接到主机的物理 LAN 中,并在不使用 NAT 的情况下传输数据。虚拟交换机可以检查所有流量,并使用网络数据包中包含的信息来做出路由决策。使用此模式时,虚拟机(VM)都位于一个子网中,与主机是分开的。虚拟机子网通过虚拟交换机进行路由,该交换机位于主机上。这会启用传入连接,但对外部网络上的系统需要额外的路由表条目。
- 要点:路由模式使用基于 IP 地址的路由:
16.2.3. 网桥模式中的虚拟网络
- 要点:在大多数虚拟机网络模式中,虚拟机会自动创建并连接到 virbr0 虚拟网桥。相反,在桥接模式中,VM 会连接到主机上的一个已存在的 Linux 网桥。因此,虚拟机可以在物理网络中直接看到。这就可以允许进入的连接,但不需要任何额外的路由表条目。
- 要点:网桥模式使用基于 MAC 地址的连接切换:
- 列表:在现有网络中与主机机器一起部署虚拟机,但虚拟机和物理机之间对用户不可见。
- 列表:在不更改现有物理网络配置设置的情况下部署虚拟机。
- 列表:部署需要被现有物理网络轻松访问的虚拟机。将虚拟机放置到必须访问 DHCP 服务的物理网络中。
- 列表:将虚拟机连接到使用虚拟 LAN(VLAN)的现有网络。
- 列表:一个 demilitarized zone (DMZ) 网络。对于带有虚拟机的 DMZ 部署,红帽建议在物理网络路由器和交换机上设置 DMZ,并使用桥接模式将虚拟机连接到物理网络。
- 列表:使用命令行配置外部可见的虚拟机
16.2.4. 隔离模式中的虚拟网络
- 要点:通过使用 isolated 模式,连接到虚拟交换机的虚拟机可以相互通信,并与主机机器进行通信,但其流量不会通过主机外部,且不能接收来自主机外部的流量。对于基本功能,需要在这个模式中使用 dnsmasq ,如 DHCP。
16.2.5. 开放模式中的虚拟网络
- 要点:当对网络使用 开放 模式时,libvirt不会为网络生成任何防火墙规则。因此,libvirt 不会覆盖主机提供的防火墙规则,因此用户可以手动管理虚拟机的防火墙规则。
16.2.6. 虚拟机连接类型的比较
- 要点:下表提供了有关所选的虚拟机(VM)网络配置可以连接到的位置的信息,以及它们对哪些位置可见。
- 表格样本(共 6 行):
- 连接到主机 | 连接到主机上的其他虚拟机 | 连接到外部位置 | 可查看外部位置
- 网桥模式 | 是 | 是 | 是 | 是
- NAT | 是 | 是 | 是 | 否
- 路由模式 | 是 | 是 | 是 | 是
16.3. 配置外部可见虚拟机
- 要点:在很多情况下,默认的 VM 网络配置已经足够了。但是,如果您需要调整配置,您可以使用命令行(CLI)或 RHEL 10 web 控制台进行此操作。
16.3.1. 使用命令行配置外部可见的虚拟机
- 要点:默认情况下,新创建的虚拟机连接到使用 virbr0 (主机上默认的虚拟网桥)的 NAT 类型网络。这可确保虚拟机可以使用主机的网络接口控制器(NIC)来连接到外部网络,但无法从外部系统访问虚拟机。
- 要点:如果您需要虚拟机出现在与虚拟机监控程序相同的外部网络中,则必须使用桥接模式。为此,请将虚拟机连接到连接到 hypervisor 物理网络设备的网桥设备。
- 列表:带有默认 NAT 设置的现有虚拟机。
- 列表:管理程序的 IP 配置。这随着主机的网络连接而变化。例如,这个流程使用这样一种场景,其中主机使用以太网线连接到网络,主机的物理 NIC MAC 地址被分配给 DHCP 服务器上的一个静态 IP。因此,以太网接口被视为 hypervisor IP。 要获取以太网接口的 IP 配置,请使用 ip addr 工具: # ip addr [...] enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 54:ee:75:49:dc:46 brd ff:ff:ff:ff:f…
- 列表:为主机上的物理接口创建和设置网桥连接。具体步骤请参阅 配置网络桥接。 请注意,在使用静态 IP 分配的场景中,您必须将物理以太网接口的 IPv4 设置移到网桥接口。
- 列表:修改虚拟机的网络,以使用创建的桥接接口。例如,以下设置 testguest 使用 bridge0。 # virt-xml testguest --edit --network bridge=bridge0 Domain 'testguest' defined successfully.
- 列表:启动虚拟机。 # virsh start testguest
- 列表:在客户机操作系统中,调整系统网络接口的 IP 和 DHCP 设置,就好像虚拟机是与 hypervisor 位于同一网络中的另一台物理系统一样。 这的具体步骤因虚拟机使用的客户机操作系统而异。例如,如果客户机操作系统是 RHEL 10,请参阅 配置以太网连接。
- 命令/配置摘录:
# ip addr [...] enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 54:ee:75:49:dc:46 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s25
# virt-xml testguest --edit --network bridge=bridge0 Domain 'testguest' defined successfully.16.3.2. 使用 web 控制台配置外部可见的虚拟机
- 要点:默认情况下,新创建的虚拟机连接到使用 virbr0 (主机上默认的虚拟网桥)的 NAT 类型网络。这可确保虚拟机可以使用主机的网络接口控制器(NIC)来连接到外部网络,但无法从外部系统访问虚拟机。
- 要点:如果您需要虚拟机出现在与虚拟机监控程序相同的外部网络中,则必须使用桥接模式。为此,请将虚拟机连接到连接到 hypervisor 物理网络设备的网桥设备。要使用 RHEL 10 web 控制台进行此操作,请按照以下说明操作。
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:带有默认 NAT 设置的现有虚拟机。
- 列表:管理程序的 IP 配置。这随着主机的网络连接而变化。例如,这个流程使用这样一种场景,其中主机使用以太网线连接到网络,主机的物理 NIC MAC 地址被分配给 DHCP 服务器上的一个静态 IP。因此,以太网接口被视为 hypervisor IP。 要获取以太网接口的 IP 配置,请转至 web 控制台中的 Networking 选项卡,并查看 接口 部分。
- 列表:为主机上的物理接口创建和设置网桥连接。具体步骤请参阅在 web 控制台中配置网络桥接。 请注意,在使用静态 IP 分配的场景中,您必须将物理以太网接口的 IPv4 设置移到网桥接口。
- 列表:修改虚拟机的网络,以使用桥接接口。在虚拟机的 Network Interfaces 选项卡中: 点击 Add Network Interface 在 Add Virtual Network Interface 对话框中: 将 Interface Type 设成 Bridge to LAN Source 到新创建的网桥,比如 bridge0 点 Add 可选:对于连接到虚拟机的所有其他接口,点 Unplug。
- 命令/配置摘录:
# ip addr [...] enp0s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:09:15:46 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s0
# ssh root@192.0.2.1 root@192.0.2.1's password: Last login: Mon Sep 24 12:05:36 2019 root~#*16.3.3. 替换 macvtap 连接
- 要点:macvtap 是一个 Linux 网络设备驱动程序,其创建一个虚拟网络接口,虚拟机通过这个网络接口可直接访问主机上的物理网络接口。RHEL 10 中支持使用 macvtap 连接。
- 要点:但是,与其他可用的虚拟机(VM)网络配置相比,macvtap 的性能欠佳,而且更难以正确设置。因此,如果您的用例没有明确需要 macvtap,请使用不同的受支持的网络配置。
- 列表:使用 Linux 网桥配置,而不是 macvtap 网桥模式。
- 列表:使用 PCI Passthrough,而不是 macvtap passthrough 模式。
- 列表:macvtap 的上游文档
16.4. 使用 web 控制台管理虚拟机网络接口
- 要点:通过使用 RHEL 10 web 控制台,您可以管理连接 web 控制台的虚拟机的虚拟网络接口。
16.4.1. 在 web 控制台中查看和编辑虚拟网络接口信息
- 要点:通过使用 RHEL 10 web 控制台,您可以在所选虚拟机(VM)上查看和修改虚拟网络接口:
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:滚动 到网络接口 。 网络接口部分显示为虚拟机配置的虚拟网络接口的信息,以及 添加、删除、编辑 或 拔掉 网络接口的选项。 该信息包括: 类型 - 虚拟机的网络接口类型。类型包括虚拟网络、到 LAN 的桥接和直接连接。 注意 RHEL 10 及更高版本不支持通用以太网连接。 型号类型 - 虚拟网络接口的型号。 MAC 地址 - 虚拟网络接口的 MAC 地址。 IP 地址 - 虚拟网络接口的 IP 地址。 Source - 网络接口源。这取决于网络类型。 State - 虚拟网络接口的状态。
- 列表:类型 - 虚拟机的网络接口类型。类型包括虚拟网络、到 LAN 的桥接和直接连接。 注意 RHEL 10 及更高版本不支持通用以太网连接。
- 注意:注意 RHEL 10 及更高版本不支持通用以太网连接。
- 注意:注意 对虚拟网络接口设置的更改仅在重启虚拟机后生效。 此外,MAC 地址只能在虚拟机关闭时修改。
16.4.2. 在 web 控制台中添加和连接虚拟网络接口
- 要点:通过使用 RHEL 10 web 控制台,您可以创建一个虚拟网络接口并将虚拟机(VM)连接到它。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:滚动 到网络接口 。 网络接口部分显示为虚拟机配置的虚拟网络接口的信息,以及 Add、Edit 或 Plug 网络接口的选项。
- 列表:点击您要连接的虚拟网络接口所在行中的 Plug。 所选虚拟网络接口连接至虚拟机。
16.4.3. 在 web 控制台中断开连接和删除虚拟网络接口
- 要点:通过使用 RHEL 10 web 控制台,您可以断开连接到所选虚拟机(VM)的虚拟网络接口。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:滚动 到网络接口 。 网络接口部分显示为虚拟机配置的虚拟网络接口的信息,以及 添加、删除、编辑 或 拔掉 网络接口的选项。
- 列表:在您要断开连接的虚拟网络接口行中点 Unplug。 所选虚拟网络接口断开与虚拟机的连接。
16.5. 管理 SR-IOV 网络设备
- 要点:模拟虚拟设备通常使用比硬件网络设备更多的 CPU 和内存。这可能会限制虚拟机的性能。但是,如果虚拟化主机上的任何设备都支持单根 I/O 虚拟化(SR-IOV),您可以使用此功能来提高设备性能,并可能还提高虚拟机的整体性能。
16.5.1. 什么是 SR-IOV?
- 要点:单根 I/O 虚拟化(SR-IOV)是一种规范,它允许单个 PCI Express(PCIe)设备向主机系统呈现多个独立的 PCI 设备,称为 虚拟功能 (VF)。这样的每个设备:
- 要点:例如,单个具有 SR-IOV 的网络设备可以向多个虚拟机显示 VF。虽然所有 VF 都使用相同的物理卡、相同的网络连接和相同的网线,但每个虚拟机都直接控制其自己的硬件网络设备,并且不使用主机的额外资源。
- 列表:提供与原始 PCI 设备相同的或类似的服务。
- 列表:出现在主机 PCI 总线的不同地址上。
- 列表:可使用 VFIO 分配分配给不同的虚拟机。
- 列表:物理功能(PF) - 为主机提供设备(如网络)功能的 PCIe 功能,但也可以创建和管理一组 VF。每个具有 SR-IOV 功能的设备都有一个或多个 PF。
- 列表:虚拟功能(VF) - 充当独立设备的轻量级 PCIe 功能。每个 VF 都是从 PF 中派生的。一个设备可依赖于设备硬件的最大 VF 数。每个 VF 每次只能分配给一个虚拟机,但虚拟机可以分配多个 VF。
- 列表:提高的性能
16.5.2. 将 SR-IOV 网络设备附加到虚拟机
- 要点:要将 SR-IOV 网络设备附加到虚拟机(VM),您必须从主机上支持 SR-IOV 的网络接口创建一个虚拟功能(VF),并将 VF 作为设备分配给指定的虚拟机。详情请查看以下步骤。
- 要点:先决条件
- 列表:您的主机的 CPU 和固件支持 I/O 内存管理单元(IOMMU)。 如果使用 Intel CPU,它必须支持 Intel 的直接 I/O 虚拟化技术(VT-d)。 如果使用 AMD CPU,则必须支持 AMD-Vi 功能。
- 列表:如果使用 Intel CPU,它必须支持 Intel 的直接 I/O 虚拟化技术(VT-d)。
- 列表:如果使用 AMD CPU,则必须支持 AMD-Vi 功能。
- 列表:主机系统使用访问控制服务(ACS)来为 PCIe 拓扑提供直接内存访问(DMA)隔离。与系统供应商一起验证这一点。 如需更多信息,请参阅实施 SR-IOV 的硬件注意事项。
- 列表:物理网络设备支持 SR-IOV。要验证系统上的任何网络设备是否支持 SR-IOV,请使用 lspci -v 命令,并在输出中查找 单根 I/O 虚拟化(SR-IOV) 。 # lspci -v [...] 02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node…
- 列表:用于创建 VF 的主机网络接口正在运行。例如:要激活 eth1 接口并验证它正在运行: # ip link set eth1 up # ip link show eth1 8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 1 MAC 00:00:00:00:00…
- 命令/配置摘录:
# lspci -v [...] 02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0 Memory at fcba0000 (32-bit, non-prefetchable) [size=128K] [...] Capabilities: [150] Alternative Routing-ID Interpretation (ARI) Capabilities: [160] Single Root I/O Virtualization (SR-IOV) Kernel driver in use: igb Kernel modules: igb [...]
# ip link set eth1 up # ip link show eth1 8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto- 注意:警告 目前,当试图在 Broadcom NetXtreme II BCM57810 适配器上保留 VF 时,上述设置无法正常工作。另外,基于这些适配器将 VF 附加到 Windows 虚拟机当前还不可靠。
- 注意:重要 如果您通过将 SR-IOV VF 分配给虚拟机,请在虚拟机 XML 配置文件的 & lt;hostdev > 部分手动添加一个设备条目,则不会永久分配 MAC 地址,并且每个主机重启时都会重新配置网络设置。 要避免这些复杂情况,请使用 virsh attach-interface 命令,如此步骤中所述。
16.5.3. SR-IOV 分配支持的设备
- 要点:并非所有设备都可用于 SR-IOV。在 RHEL 10 中,以下设备已被测试并验证为与 SR-IOV 兼容。
- 要点:网络设备
- 列表:Intel 82599ES 10 千兆以太网控制器 - 使用 ixgbe 驱动程序
- 列表:Intel 以太网控制器 XL710 系列 - 使用 i40e 驱动程序
- 列表:Intel 以太网络适配器 XXV710 - 使用 i40e 驱动程序
- 列表:Intel 82576 千兆以太网控制器 - 使用 igb 驱动程序
- 列表:Broadcom NetXtreme II BCM57810 - 使用 bnx2x 驱动程序
- 列表:QSFP 的以太网控制器 E810-C - 使用 ice 驱动程序
16.6. 从 PXE 服务器启动虚拟机
- 要点:使用预引导执行环境(PXE)的虚拟机可以从网络引导并加载它们的配置。您可以使用 libvirt 从虚拟或桥接网络上的 PXE 服务器引导虚拟机。
- 注意:警告 这些流程仅作为示例提供。在操作之前,请确保您有足够的备份。
16.6.1. 在虚拟网络中设置 PXE 引导服务器
- 要点:您可以配置 libvirt 虚拟网络以提供预引导执行环境(PXE)。这可让主机上的虚拟机被配置为从虚拟网络上提供的引导镜像引导。
- 要点:先决条件
- 列表:本地 PXE 服务器(DHCP 和 TFTP),例如: libvirt 内部服务器 手动配置 dhcpd 和 tftpd dnsmasq Cobbler 服务器
- 列表:libvirt 内部服务器
- 列表:手动配置 dhcpd 和 tftpd
- 列表:dnsmasq
- 列表:Cobbler 服务器
- 列表:PXE 引导映像,如 Cobbler 配置的 PXELINUX 或手工进行配置。
- 命令/配置摘录:
# chmod -R a+r /var/lib/tftpboot
# chown -R nobody: /var/lib/tftpboot16.6.2. 使用 PXE 和虚拟网络引导虚拟机
- 要点:要从虚拟网络上的预引导执行环境(PXE)服务器引导虚拟机(VM),您必须启用 PXE 引导。
- 要点:先决条件
- 列表:在虚拟网络上设置 PXE 引导服务器,如在虚拟网络中设置 PXE 引导服务器所述。
- 列表:创建启用了 PXE 引导的新虚拟机。例如,若要从 default 虚拟网络上提供的 PXE 安装一个新的 10 GB QCOW2 镜像文件: # virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10 或者,您可以手动编辑现有虚拟机的 XML 配置文件。为此,请确保客户机网络被配置为使用您的虚拟网络,并且网络被配置为主引导设备: <interface type='network'> <mac address='52:54:00:66:79:14'/> <source network='default'/> <tar…
- 列表:或者,您可以手动编辑现有虚拟机的 XML 配置文件。为此,请确保客户机网络被配置为使用您的虚拟网络,并且网络被配置为主引导设备: <interface type='network'> <mac address='52:54:00:66:79:14'/> <source network='default'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>
- 列表:使用 virsh start 命令启动虚拟机。如果正确配置了 PXE,则虚拟机可以从 PXE 服务器上提供的引导镜像启动。
- 命令/配置摘录:
# virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10
<interface type='network'> <mac address='52:54:00:66:79:14'/> <source network='default'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>16.6.3. 使用 PXE 和桥接网络启动虚拟机
- 要点:要从桥接网络上提供的预引导执行环境(PXE)服务器启动虚拟机(VM),您必须启用 PXE 引导。
- 要点:先决条件
- 列表:启用了网络桥接。
- 列表:网桥网络上提供了 PXE 引导服务器。
- 列表:创建启用了 PXE 引导的新虚拟机。例如,若要从 breth0 网桥网络上提供的 PXE 安装到新的 10 GB QCOW2 镜像文件: # virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10 或者,您可以手动编辑现有虚拟机的 XML 配置文件。为此,请确保使用桥接网络配置了虚拟机,并网络被配置为主引导设备: <interface type='bridge'> <mac address='52:54:00:5a:ad:cb'/> <source bridge='breth0'/> <target dev='vnet…
- 列表:或者,您可以手动编辑现有虚拟机的 XML 配置文件。为此,请确保使用桥接网络配置了虚拟机,并网络被配置为主引导设备: <interface type='bridge'> <mac address='52:54:00:5a:ad:cb'/> <source bridge='breth0'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>
- 列表:使用 virsh start 命令启动虚拟机。如果正确配置了 PXE,则虚拟机可以从 PXE 服务器上提供的引导镜像启动。
- 列表:配置网络桥接
- 命令/配置摘录:
# virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10
<interface type='bridge'> <mac address='52:54:00:5a:ad:cb'/> <source bridge='breth0'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <boot order='1'/> </interface>16.7. 在网络绑定上配置网桥,以将虚拟机与网络连接
- 要点:网桥使用与主机相同的网络连接虚拟机。如果要将一个主机上的虚拟机连接到另一主机或另一个主机上的虚拟机,桥接会在它们之间建立通信。但是,网桥不提供故障转移机制。
- 要点:为了处理通信中的故障,网络绑定在网络接口出现故障时处理通信。要保持容错和冗余,active-backup 绑定机制决定在绑定中只有一个端口处于活跃状态,且不需要任何交换机配置。如果活动端口失败,则备用端口变为活动状态,以在网络中配置的虚拟机之间的保持通信。
16.7.1. 使用 nmcli 在网络绑定上配置网络接口
- 要点:要在命令行上配置网络绑定,请使用 nmcli 工具。
- 要点:先决条件
- 列表:在服务器上安装了两个或多个物理设备,且没有在任何 NetworkManager 连接配置文件中配置它们。
- 列表:创建绑定接口: # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup" 这个命令会创建一个使用 active-backup 模式、名为 bond0 的绑定。
- 列表:向绑定分配以太网接口: # nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0 # nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond0 这些命令为 enp7s0 和 enp8s0 创建配置文件,并将它们添加到 bond0 连接中。
- 列表:配置 IPv4 设置: 要使用 DHCP,不需要任何操作。 要为 bond0 连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入: # nmcli connection modify bond0 ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.253 ipv4.dns-search example.com ipv4.method manual
- 列表:要使用 DHCP,不需要任何操作。
- 列表:要为 bond0 连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入: # nmcli connection modify bond0 ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.253 ipv4.dns-search example.com ipv4.method manual
- 命令/配置摘录:
# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0 # nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond016.7.2. 使用 nmcli 为网络绑定配置网桥
- 要点:网络绑定的网桥涉及配置一个绑定接口,该接口组合了多个网络接口,以改善流量处理。因此,虚拟机可以使用网桥,通过绑定的网络接口访问网络。nmcli 工具从命令行创建和编辑配置所需的连接文件。
- 要点:流程
- 列表:创建网桥接口: # nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
- 列表:将 bond0 绑定添加到 br0 网桥: # nmcli connection modify bond0 master br0
- 列表:配置 Red Hat Enterprise Linux ,以便在网桥启用时自动启用所有端口: # nmcli connection modify br0 connection.autoconnect-ports 1
- 列表:重新激活桥接: # nmcli connection up br0
- 列表:使用 ip 工具来显示作为特定网桥端口的以太网设备的链接状态: # ip link show master br0 6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:38:a9:4d brd ff:ff:ff:ff:ff:ff ...
- 列表:使用 bridge 工具来显示作为任意网桥设备端口的以太网设备状态: # bridge link show 6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100 ... 要显示特定以太网设备的状态,请使用 bridge link show dev <ethernet_device_name> 命令。
- 命令/配置摘录:
# nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
# nmcli connection modify bond0 master br016.7.3. 使用现有绑定接口在 libvirt 中创建一个虚拟网络
- 要点:要使虚拟机(VM)使用带有绑定的 br0 网桥,首先将虚拟网络添加到使用此网桥的 libvirtd 服务中。
- 要点:先决条件
- 列表:您已安装了 libvirt 软件包。
- 列表:您已启动并启用了 libvirtd 服务。
- 列表:您已在 Red Hat Enterprise Linux 中使用绑定配置了 br0 设备。
- 列表:使用以下内容创建 ~/bond0-bridge.xml 文件: <network> <name>bond0-bridge</name> <forward mode="bridge" /> <bridge name="br0" /> </network>
- 列表:使用 ~/bond0-bridge.xml 文件在 libvirt 中创建一个新的虚拟网络: # virsh net-define ~/bond0-bridge.xml
- 列表:删除 ~/bond0-bridge.xml 文件: # rm ~/bond0-bridge.xml
- 命令/配置摘录:
<network> <name>bond0-bridge</name> <forward mode="bridge" /> <bridge name="br0" /> </network>
# virsh net-define ~/bond0-bridge.xml16.7.4. 将虚拟机配置为使用绑定接口
- 要点:要将虚拟机配置为使用主机上带有绑定接口的网桥设备,请创建一个使用 bond0-bridge 虚拟网络的新虚拟机,或更新现有虚拟机的设置以使用此网络。
- 要点:在 RHEL 主机上执行此流程。
- 列表:您已在 libvirtd 中配置了 bond0-bridge 虚拟网络。
- 列表:要创建新虚拟机并将其配置为使用 bond0-bridge 网络,请在创建虚拟机时将 --network network:bond0-bridge 选项传给 virt-install 工具: # virt-install ... --network network:bond0-bridge
- 列表:要更改现有虚拟机的网络设置: 将虚拟机的网络接口连接到 bond0-bridge 虚拟网络: # virt-xml <example_vm> --edit --network network=bond0-bridge
- 列表:将虚拟机的网络接口连接到 bond0-bridge 虚拟网络: # virt-xml <example_vm> --edit --network network=bond0-bridge
- 列表:关闭虚拟机,并重新启动它: # virsh shutdown <example_vm> # virsh start <example_vm>
- 列表:显示主机上虚拟机的虚拟网络接口: # virsh domiflist <example_vm> Interface Type Source Model MAC ------------------------------------------------------------------- vnet1 bridge bond0-bridge virtio 52:54:00:c5:98:1c
- 命令/配置摘录:
# virt-install ... --network network:bond0-bridge
# virt-xml <example_vm> --edit --network network=bond0-bridge16.8. 配置 passt 用户空间连接
- 要点:如果您需要对虚拟网络的非特权访问,例如当使用 libvirt 的 会话 连接时,您可以将虚拟机(VM)配置为使用 passt 网络后端。
- 要点:先决条件
- 列表:passt 软件包已安装在您的系统上。 # dnf install passt
- 列表:打开您要在其上使用 passt 连接的虚拟机的 XML 配置。例如: # virsh edit <testguest1>
- 列表:在 <devices> 部分中,添加一个使用 passt 作为其后端类型的 <interface type='user'> 元素。 例如,以下配置设置一个 passt 连接,它使用从与第一个默认路由关联的主机接口复制的地址和路由: <devices> [...] <interface type='user'> <backend type='passt'/> </interface> </devices> 另外,在使用 passt 时,您可以指定多个 <portForward> 元素,来将主机的传入网络流量转发到此虚拟机接口。您还可以自定义接口 IP 地址。例如: <devices> [...] <interface t…
- 列表:虚拟机为转发来自 eth0 主机接口的流量复制网络路由。
- 列表:接口 MAC 设置为 52:54:00:98:d8:b7。如果未设置,将生成一个随机的。
- 列表:IPv4 地址设为 192.0.2.1/24,IPv6 地址设为 ::ffff:c000:201。
- 命令/配置摘录:
# dnf install passt
# virsh edit <testguest1>16.9. 其他资源
- 列表:配置和管理网络
- 列表:将特定的网络接口卡作为 SR-IOV 设备 来提高虚拟机性能。
第 17 章 在虚拟机中管理 GPU 设备
- 要点:要在 RHEL 10 主机上增强虚拟机(VM)的图形性能,您可以将主机 GPU 分配给虚拟机。
- 列表:您可以将 GPU 从主机分离,并将 GPU 的完全控制直接传给虚拟机。
- 列表:您可以从物理 GPU 创建多个中介设备,并将这些设备作为虚拟 GPU(vGPU)分配给多个客户机。目前仅支持所选的 NVIDIA GPU,且只能为单个客户机分配一个中介设备。
- 注意:重要 目前只在 Intel 64 和 AMD64 系统上支持 GPU 分配。
17.1. 为虚拟机分配 GPU
- 要点:要访问并控制附加到主机系统的 GPU,您必须将主机系统配置为将 GPU 的直接控制传给虚拟机(VM)。
- 要点:先决条件
- 列表:您必须在主机机器内核中启用 IOMMU 支持。 在 Intel 主机上,您必须启用 VT-d: 使用 intel_iommu=on 和 iommu=pt 参数重新生成 GRUB 配置: # grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT 重启主机。 在 AMD 主机上,您必须启用 AMD-Vi。 请注意,在 AMD 主机上,默认启用 IOMMU,您可以添加 iommu=pt 将其切换到直通模式: 使用 iommu=pt 参数重新生成 GRUB 配置: # grubby --args="iommu=pt" --update-kernel DEFAULT …
- 列表:在 Intel 主机上,您必须启用 VT-d: 使用 intel_iommu=on 和 iommu=pt 参数重新生成 GRUB 配置: # grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT 重启主机。
- 列表:使用 intel_iommu=on 和 iommu=pt 参数重新生成 GRUB 配置: # grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
- 列表:重启主机。
- 列表:在 AMD 主机上,您必须启用 AMD-Vi。 请注意,在 AMD 主机上,默认启用 IOMMU,您可以添加 iommu=pt 将其切换到直通模式: 使用 iommu=pt 参数重新生成 GRUB 配置: # grubby --args="iommu=pt" --update-kernel DEFAULT 注意 pt 选项只为直通模式中使用的设备启用 IOMMU,并提供更好的主机性能。但是,并非所有硬件都支持这个选项。即使未启用这个选项,您仍然可以分配设备。 重启主机。
- 列表:使用 iommu=pt 参数重新生成 GRUB 配置: # grubby --args="iommu=pt" --update-kernel DEFAULT 注意 pt 选项只为直通模式中使用的设备启用 IOMMU,并提供更好的主机性能。但是,并非所有硬件都支持这个选项。即使未启用这个选项,您仍然可以分配设备。
- 命令/配置摘录:
# grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
# grubby --args="iommu=pt" --update-kernel DEFAULT- 注意:注意 如果您要查找有关分配虚拟 GPU 的信息,请参阅管理 NVIDIA vGPU 设备。
- 注意:注意 pt 选项只为直通模式中使用的设备启用 IOMMU,并提供更好的主机性能。但是,并非所有硬件都支持这个选项。即使未启用这个选项,您仍然可以分配设备。
17.2. 管理 NVIDIA vGPU 设备
- 要点:vGPU 功能使得可以将物理 NVIDIA GPU 设备划分为多个虚拟设备,称为 中介设备 。然后可将这些 mediated devices 分配给多个虚拟机(VM)作为虚拟 GPU。因此,这些虚拟机可以共享单个物理 GPU 的性能。
- 注意:重要 将物理 GPU 分配给使用或不使用中介设备的虚拟机,使主机无法使用 GPU。
17.2.1. 设置 NVIDIA vGPU 设备
- 要点:要设置 NVIDIA vGPU 功能,您需要为 GPU 设备下载 NVIDIA vGPU 驱动程序,创建介质设备,并将其分配给预期的虚拟机。
- 要点:先决条件
- 列表:您的 GPU 支持 vGPU 介质设备。有关支持创建 vGPU 的 NVIDIA GPU 的最新列表,请参阅 NVIDIA vGPU 软件文档。 如果您不知道主机正在使用哪个 GPU,请安装 lshw 软件包,并使用 lshw -C display 命令。以下示例显示系统使用与 vGPU 兼容的 NVIDIA Tesla P4 GPU。 # lshw -C display *-display description: 3D controller product: GP104GL [Tesla P4] vendor: NVIDIA Corporation physical id: 0 bus info: pci@0000:…
- 列表:如果您不知道主机正在使用哪个 GPU,请安装 lshw 软件包,并使用 lshw -C display 命令。以下示例显示系统使用与 vGPU 兼容的 NVIDIA Tesla P4 GPU。 # lshw -C display *-display description: 3D controller product: GP104GL [Tesla P4] vendor: NVIDIA Corporation physical id: 0 bus info: pci@0000:01:00.0 version: a1 width: 64 bits clock: 33MHz capabilities: pm msi …
- 列表:下载 NVIDIA vGPU 驱动程序并在您的系统中安装它们。具体步骤请查看 NVIDIA 文档。
- 列表:如果 NVIDIA 软件安装程序没有创建 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 文件,请在 /etc/modprobe.d/ 中创建一个任何名称的 conf 文件,并在文件中添加以下行: blacklist nouveau options nouveau modeset=0
- 列表:为当前内核重新生成初始 RAM 磁盘,然后重新启动。 # dracut --force # reboot
- 列表:检查内核是否已加载了 nvidia_vgpu_vfio 模块,nvidia-vgpu-mgr.service 服务是否正在运行。 # lsmod | grep nvidia_vgpu_vfio nvidia_vgpu_vfio 45011 0 nvidia 14333621 10 nvidia_vgpu_vfio mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1 # systemctl status nvidia-vgpu-mgr.service nvidia-vgpu-mgr.servi…
- 命令/配置摘录:
# lshw -C display *-display description: 3D controller product: GP104GL [Tesla P4] vendor: NVIDIA Corporation physical id: 0 bus info: pci@0000:01:00.0 version: a1 width: 64 bits clock: 33MHz capabilities: pm msi pciexpress cap_list configuration: driver=vfio-pci latency=0 resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff
blacklist nouveau options nouveau modeset=017.2.2. 删除 NVIDIA vGPU 设备
- 要点:要更改分配的 vGPU 介质设备 的配置,您需要从分配的虚拟机中删除现有设备。
- 要点:先决条件
- 列表:要从中删除该设备的虚拟机关闭。
- 列表:获取您要删除的介质设备的 ID。 # virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
- 列表:停止 vGPU mediated 设备的运行实例。 # virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
- 列表:可选:确保中介设备已被停用。 # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: no Persistent: yes Autostart: yes
- 列表:从虚拟机 XML 配置中删除该设备。为此,使用 virsh edit 工具编辑虚拟机的 XML 配置,并删除 mdev 的配置段。这个片段类似如下: <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev> 请注意,停止和分离 mediated 设备不会删除它,而是将其保留为 defined。因此,您可以重启并把设备附加到不同的虚拟机。
- 列表:可选:要删除已停止的介质设备,请删除其定义。 # virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
- 命令/配置摘录:
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
# virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'17.2.3. 获取有关您系统的 NVIDIA vGPU 信息
- 要点:要评估可用的 vGPU 功能,您可以获取系统上关于中介设备的其它信息,例如:
- 要点:流程
- 列表:可创建给定类型的 mediated 设备
- 列表:您的系统中已经配置了哪些介质设备。
- 列表:要查看您主机上可以支持 vGPU 介质设备的可用 GPU 设备,请使用 virsh nodedev-list --cap mdev_types 命令。例如,下面显示了有两个 NVIDIA Quadro RTX6000 设备的系统。 # virsh nodedev-list --cap mdev_types pci_0000_5b_00_0 pci_0000_9b_00_0
- 列表:要显示特定 GPU 设备支持的 vGPU 类型以及其他元数据,请使用 virsh nodedev-dumpxml 命令。 # virsh nodedev-dumpxml pci_0000_9b_00_0 <device> <name>pci_0000_9b_00_0</name> <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path> <parent>pci_0000_9a_00_0</parent> <driver> <name>nvidia</name> </driver> <capability type='pci'> <class>0x0…
- 列表:在您的系统中的 virsh (1)手册页
- 命令/配置摘录:
# virsh nodedev-list --cap mdev_types pci_0000_5b_00_0 pci_0000_9b_00_0
# virsh nodedev-dumpxml pci_0000_9b_00_0 <device> <name>pci_0000_9b_00_0</name> <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path> <parent>pci_0000_9a_00_0</parent> <driver> <name>nvidia</name> </driver> <capability type='pci'> <class>0x030000</class> <domain>0</domain> <bus>155</bus> <slot>0</slot> <function>0</function> <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <capability type='mdev_types'> <type id='nvidia-346'> <name>GRID RTX6000-12C</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>2</availableInstances> </type> <type id='nvidi…17.2.4. 用于 NVIDIA vGPU 的远程桌面流服务
- 要点:在启用了 NVIDIA vGPU 或 NVIDIA GPU passthrough 的 RHEL 10 管理程序上支持以下远程桌面流服务:
- 要点:有关支持详情请查看适当的供应商支持列表。
- 列表:HP ZCentral Remote Boost/Teradici
- 列表:NICE DCV
- 列表:Mechdyne TGX
17.2.5. 其他资源
- 列表:NVIDIA vGPU 软件文档
第 18 章 优化虚拟机性能
- 要点:与主机相比,虚拟机的性能总会有所降低。以下部分介绍了这个下降的原因,并提供了有关如何在 RHEL 10 中最小化虚拟化性能影响的说明,以便您的硬件基础架构资源可以尽可能高效地使用。
18.1. 影响虚拟机性能的因素
- 要点:虚拟机(VM)作为用户空间进程在主机上运行。因此管理程序需要转换主机的系统资源,以便虚拟机可使用它们。因此,部分资源会被转换消耗,虚拟机无法获得与主机相同的性能效率。
- 要点:体虚拟机性能损失的原因包括:
- 列表:虚拟 CPU(vCPU)是主机上的线,,由 Linux 调度程序处理。
- 列表:VM 不会自动继承主机内核的优化功能,比如 NUMA 或巨页。
- 列表:主机的磁盘和网络 I/O 设置可能会对虚拟机有显著的性能影响。
- 列表:网络流量通常通过基于软件的网桥到达虚拟机。
- 列表:根据主机设备及其型号,特定硬件的模拟可能会产生大量的开销。
- 列表:并行运行的虚拟机数量。
- 注意:重要 调优虚拟机性能会对其他虚拟化功能造成负面影响。例如,它可以使迁移修改过的虚拟机更为困难。
18.2. 使用 TuneD 优化虚拟机性能
- 要点:TuneD 工具是一种调优配置文件交付机制,能够让 RHEL 适应某些工作负载特性,如 CPU 密集型任务或存储网络吞吐量响应的需求。它提供很多预先配置的调优配置文件,以便在多个特定用例中增强性能并降低功耗。您可以编辑这些配置文件,或创建新配置文件来创建适合您的环境的性能解决方案,包括虚拟环境。
- 要点:要为虚拟化优化 RHEL 10,请使用以下配置集:
- 列表:对于 RHEL 10 虚拟机,请使用 virtual-guest 配置集。它基于通常适用的 throughput-performance 配置文件,但也会降低虚拟内存的交换性。
- 列表:对于 RHEL 10 虚拟化主机,请使用 virtual-host 配置集。这可提高脏内存页面的主动回写,这有助于主机性能。
- 列表:TuneD 服务已安装并启用。
- 列表:列出可用的 TuneD 配置文件。 # tuned-adm list Available profiles: - balanced - General non-specialized TuneD profile - desktop - Optimize for the desktop use-case [...] - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced
- 列表:可选:创建一个新的 TuneD 配置文件,或编辑现有的 TuneD 配置文件。 如需更多信息,请参阅管理 TuneD 配置集。
- 列表:激活 TuneD 配置文件。 # tuned-adm profile selected-profile 要优化虚拟化主机,请使用 virtual-host 配置文件。 # tuned-adm profile virtual-host 在 RHEL 虚拟机操作系统中,使用 virtual-guest 配置文件。 # tuned-adm profile virtual-guest
- 命令/配置摘录:
# tuned-adm list Available profiles: - balanced - General non-specialized TuneD profile - desktop - Optimize for the desktop use-case [...] - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced
# tuned-adm profile selected-profile18.3. 对特定工作负载优化虚拟机性能
- 要点:虚拟机(VM)经常专用于执行特定的工作负载。您可以通过优化针对预期工作负载的配置来提高虚拟机的性能。
- 要点:* 如果虚拟机有足够的 CPU 和 RAM 来使用多个 NUMA 节点。
- 注意:注意 虚拟机可以适合多个用例类别。在这种情况下,您应该应用所有推荐的配置。
- 表格样本(共 7 行):
- 使用案例 | IOThread | vCPU pinning | vNUMA pinning | 巨页 | 多队列
- 数据库 | 对于数据库磁盘 | 是* | 是* | 是* | 是,请查看: multi-queue virtio-blk、virtio-scsi
- 虚拟化网络功能(VNF) | 否 | 是 | 是 | 是 | 是,请参阅: multi-queue virtio-net
- 高性能计算(HPC) | 否 | 是 | 是 | 是 | 否
18.4. 配置虚拟机内存
- 要点:要提高虚拟机(VM)的性能,您可以将额外的主机 RAM 分配给虚拟机。类似地,您可以减少分配给虚拟机的内存量,从而使主机内存可以分配给其他虚拟机或任务。
18.4.1. 内存过量使用
- 要点:在 KVM hypervisor 上运行的虚拟机(VM)没有给它们分配的专用物理 RAM 块。相反,每个虚拟机都作为一个 Linux 进程,其中仅在请求时主机的 Linux 内核才分配内存。此外,主机的内存管理器可以在其自身的物理内存和交换空间之间移动虚拟机的内存。如果启用了内存过量使用,内核可以决定分配比虚拟机请求的少的物理内存,因为请求的内存量通常没有被虚拟机的进程完全使用。
- 要点:默认情况下,Linux 内核中启用了内存过量使用,内核会估算虚拟机请求的安全内存过量使用。但是,对于内存密集型工作负载,频繁的内存过量使用仍然会使系统变得不稳定。
- 列表:为每个虚拟机分配较少的内存。
- 列表:向主机添加更多的物理内存。
- 列表:使用更大的 swap 空间。
- 列表:虚拟内存参数
- 注意:重要 如果交换频繁,虚拟机将会运行较慢。另外,过度使用会导致系统用尽内存(OOM),这可能会导致 Linux 内核关闭重要的系统进程。 设备分配不支持内存过度使用。这是因为,在使用设备分配时,必须静态预分配所有虚拟机内存,以对分配的设备启用直接内存访问(DMA)。
18.4.2. 使用 virtio-mem 添加和删除虚拟机内存
- 要点:RHEL 10 提供 virtio-mem 半虚拟内存设备。此设备可以在虚拟机(VM)中动态添加或删除主机内存。
- 要点:virtio-mem 是一个半虚拟化内存设备,可用于在虚拟机中动态添加或删除主机内存。例如,您可以使用这个设备在运行的虚拟机之间移动内存资源,或者根据您当前的要求在云设置中调整虚拟机内存大小。
- 列表:对主机上的实时应用程序使用内存锁定
- 列表:在主机上使用加密的虚拟化
- 列表:在主机上将 virtio-mem 与 memballoon 膨胀和收缩合并
- 列表:在虚拟机中卸载或重新载入 virtio_mem 驱动程序
- 列表:使用 vhost-user 设备,但 virtiofs 除外
- 列表:在虚拟机中配置内存在线
- 命令/配置摘录:
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
# grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel- 注意:重要 从正在运行的虚拟机中拔出内存在 RHEL 8.10 虚拟机中默认被禁用。
- 注意:重要 从正在运行的虚拟机中拔出内存在 RHEL 8.10 虚拟机中默认被禁用。
- 表格样本(共 4 行):
- 配置名称 | 从虚拟机中拔出内存 | 创建内存区不平衡的风险 | 一个潜在的用例 | 预期工作负载的内存要求
- online_movable | 热插内存可以可靠地拔出。 | 是 | 热插拔相对较少的内存 | 主要是用户空间内存
- auto-movable | 热插内存的可移动部分可以可靠地拔出。 | 最小 | 热插拔大量内存 | 主要是用户空间内存
- online_kernel | 热插拔内存无法可靠地拔出。 | 否 | 不可靠内存拔出是可以接受的。 | 用户空间或内核空间内存
18.4.3. 使用 web 控制台添加和删除虚拟机内存
- 要点:要提高虚拟机(VM)的性能或释放它使用的主机资源,您可以使用 Web 控制台来调整分配给虚拟机的内存量。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:客户端操作系统正在运行内存 balloon 驱动程序。请执行以下命令校验: 确保虚拟机的配置包含 memballoon 设备: # virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon> 如果此命令显示任何输出,并且型号未设置为 none,则存在 memballoon 设备。 确保 balloon 驱动程序在客户机操作系统中运行。 在 Windows 客户机中,驱动程序作为 virtio-win 驱动程序软件包的一部分安装。具体步骤请查看为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:确保虚拟机的配置包含 memballoon 设备: # virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon> 如果此命令显示任何输出,并且型号未设置为 none,则存在 memballoon 设备。
- 列表:确保 balloon 驱动程序在客户机操作系统中运行。 在 Windows 客户机中,驱动程序作为 virtio-win 驱动程序软件包的一部分安装。具体步骤请查看为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:在 Windows 客户机中,驱动程序作为 virtio-win 驱动程序软件包的一部分安装。具体步骤请查看为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 命令/配置摘录:
# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB- 注意:重要 仅使用 memballoon 设备来调整分配给 IBM Z 系统上虚拟机的内存量。在所有其他系统中,添加和删除虚拟机内存的建议解决方案是通过 virtio-mem 设备。
18.4.4. 使用命令行添加和删除虚拟机内存
- 要点:要提高虚拟机(VM)的性能或释放它使用的主机资源,您可以使用 CLI 来调整使用 memballoon 设备分配给虚拟机的内存量。
- 要点:先决条件
- 列表:客户端操作系统正在运行内存 balloon 驱动程序。请执行以下命令校验: 确保虚拟机的配置包含 memballoon 设备: # virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon> 如果此命令显示任何输出,并且型号未设置为 none,则存在 memballoon 设备。 确定 ballon 驱动程序正在客户端操作系统中运行。 在 Windows 客户机中,驱动程序作为 virtio-win 驱动程序软件包的一部分安装。具体步骤请查看为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:确保虚拟机的配置包含 memballoon 设备: # virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon> 如果此命令显示任何输出,并且型号未设置为 none,则存在 memballoon 设备。
- 列表:确定 ballon 驱动程序正在客户端操作系统中运行。 在 Windows 客户机中,驱动程序作为 virtio-win 驱动程序软件包的一部分安装。具体步骤请查看为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:在 Windows 客户机中,驱动程序作为 virtio-win 驱动程序软件包的一部分安装。具体步骤请查看为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 列表:可选:获取有关虚拟机的最大内存和当前使用的内存的信息。这将作为您更改的基准,并进行验证。 # virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
- 列表:调整分配给虚拟机的最大内存。增加这个值可以提高虚拟机的性能风险,降低这个值会降低虚拟机在主机上的性能占用空间。请注意,此更改只能在关闭的虚拟机上执行,因此调整正在运行的虚拟机需要重新启动才能生效。 例如,将 testguest 虚拟机可以使用的最大内存更改为 4096 MiB: # virt-xml testguest --edit --memory memory=4096,currentMemory=4096 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off. 要增加正在运…
- 命令/配置摘录:
# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB- 注意:重要 仅使用 memballoon 设备来调整分配给 IBM Z 系统上虚拟机的内存量。在所有其他系统中,添加和删除虚拟机内存的建议解决方案是通过 virtio-mem 设备。
- 注意:警告 不支持从正在运行的虚拟机中删除 memballoon 内存设备(也称为内存热拔),因此红帽不建议这样做。
18.4.5. 配置虚拟机以使用巨页
- 要点:在某些情况下,您可以使用巨页而不是默认的 4 KiB 内存页来为虚拟机提高内存分配。例如,巨页可以提高具有高内存使用率的虚拟机的性能,如数据库服务器。
- 要点:先决条件
- 列表:主机被配置为在内存分配中使用巨页。具体步骤请参阅 在引导时配置 HugeTLB
- 列表:如果所选的虚拟机正在运行,请关闭它。
- 列表:打开所选虚拟机的 XML 配置。例如,要编辑 testguest 虚拟机,请运行以下命令: # virsh edit testguest
- 列表:调整虚拟机的巨页配置。例如,要将虚拟机配置为使用 1 GiB 巨页,请将以下行添加到配置中的 < memoryBacking& gt; 部分: <memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
- 列表:启动虚拟机。
- 列表:确认主机已成功为正在运行的虚拟机分配了巨页。在主机上运行以下命令: # cat /proc/meminfo | grep Huge HugePages_Total: 4 HugePages_Free: 2 HugePages_Rsvd: 1 Hugepagesize: 1024000 kB 当您将空闲的和保留的巨页数加在一起(HugePages_Free + HugePages_Rsvd)时,结果应小于总巨页数(HugePages_Total)。差距是正在运行的虚拟机所使用的巨页数。
- 命令/配置摘录:
# virsh edit testguest
<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>18.4.6. 其他资源
- 列表:将设备附加到虚拟机.
18.5. 优化虚拟机 I/O 性能
- 要点:虚拟机(VM)的输入和输出(I/O)能力可能会显著限制虚拟机的整体效率。要解决这个问题,您可以通过配置块 I/O 参数来优化虚拟机的 I/O。
18.5.1. 在虚拟机中调整块 I/O
- 要点:当一个或多个虚拟机正在使用多个块设备时,可能需要通过修改虚拟设备的 I/O 优先级来调整虚拟设备的 I/O 权重。
- 要点:增加设备的 I/O 权重会增加设备的 I/O 带宽的优先级,从而为它提供更多主机资源。同样的,降低设备的权重可使其消耗较少的主机资源。
- 列表:显示虚拟机当前的 <blkio> 参数: # virsh dumpxml VM-name <domain> [...] <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> [...] </domain>
- 列表:编辑指定设备的 I/O 加权: # virsh blkiotune VM-name --device-weights device, I/O-weight 例如,以下命令将 testguest1 虚拟机中 /dev/sda 设备的权重改为 500。 # virsh blkiotune testguest1 --device-weights /dev/sda, 500
- 列表:检查虚拟机的块 I/O 参数是否已正确配置。 # virsh blkiotune testguest1 Block I/O tuning parameters for domain testguest1: weight : 800 device_weight : [ {"sda": 500}, ] ... 重要 某些内核不支持为特定设备设置 I/O 权重。如果上一步没有按预期显示权重,则可能是这个功能与您的主机内核不兼容。
- 命令/配置摘录:
<domain> [...] <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> [...] </domain>
# virsh blkiotune VM-name --device-weights device, I/O-weight- 注意:注意 每个设备的 weight 值必须在 100 到 1000 之间。或者,该值可以是 0,它会从每个设备列表中删除该设备。
- 注意:重要 某些内核不支持为特定设备设置 I/O 权重。如果上一步没有按预期显示权重,则可能是这个功能与您的主机内核不兼容。
18.5.2. 虚拟机中的磁盘 I/O 节流
- 要点:当多个虚拟机同时运行时,它们可能会使用过量的磁盘 I/O 而干扰系统性能。KVM 虚拟化中的磁盘 I/O 节流使得能够对从虚拟机发送到主机的磁盘 I/O 请求设定限制。这可以防止虚拟机过度使用共享资源并影响其他虚拟机的性能。
- 要点:要启用磁盘 I/O 节流,请对从附加到虚拟机的每个块设备发送给主机的磁盘 I/O 请求设置限制。
- 列表:使用 virsh domblklist 命令列出指定虚拟机上所有磁盘设备的名称。 # virsh domblklist testguest1 Target Source ------------------------------------------------ vda /var/lib/libvirt/images/testguest1.qcow2 sda - sdb /home/sample-disk.iso
- 列表:找到您要节流的虚拟磁盘挂载的主机块设备。 例如,如果您想要从上一步中节流 sdb 虚拟磁盘,以下输出显示该磁盘挂载在 /dev/nvme0n1p3 分区上。 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT zram0 252:0 0 4G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk ├─nvme0n1p1 259:1 0 600M 0 part /boot/efi ├─nvme0n1p2 259:2 0 1G 0 part /boot └─nvme0n1p3 259:3 0 236.9G 0 part └─luks-a1123911-6f…
- 列表:使用 virsh blkiotune 命令为块设备设置 I/O 限制。 # virsh blkiotune VM-name --parameter device,limit 以下示例将 testguest1 虚拟机上的 sdb 磁盘节流为每秒 1000 个读写 I/O 操作,每秒的读取和写入 I/O 操作数为 50 MB。 # virsh blkiotune testguest1 --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,…
- 列表:磁盘 I/O 节流可用于各种情况,例如,当属于不同客户的虚拟机在同一台主机上运行时,或者为不同的虚拟机提供服务质量保障时。磁盘 I/O 节流还可用来模拟较慢的磁盘。
- 列表:I/O 节流可以独立应用于附加到虚拟机的每个块设备,并支持对吞吐量和 I/O 操作的限制。
- 列表:红帽不支持使用 virsh blkdeviotune命令来在 VM 中配置 I/O 节流。 有关使用 RHEL 10 作为虚拟机主机时不支持的功能的更多信息,请参阅 RHEL 10 虚拟化中的不支持的功能。
- 命令/配置摘录:
# virsh domblklist testguest1 Target Source ------------------------------------------------ vda /var/lib/libvirt/images/testguest1.qcow2 sda - sdb /home/sample-disk.iso
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT zram0 252:0 0 4G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk ├─nvme0n1p1 259:1 0 600M 0 part /boot/efi ├─nvme0n1p2 259:2 0 1G 0 part /boot └─nvme0n1p3 259:3 0 236.9G 0 part └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0 0 236.9G 0 crypt /home18.5.3. 在存储设备上启用多队列
- 要点:当在虚拟机(VM)中使用 virtio-blk 或 virtio-scsi 存储设备时,多队列 功能提供改进的存储性能和可扩展性。它允许每个虚拟 CPU(vCPU)使用单独的队列和中断,而不影响其他 vCPU。
- 要点:默认情况下,Q35 机器类型启用了 multi-queue 功能,但在 i440fx 机器类型中,您必须手动启用它。您可以调整您的工作负载的最佳队列数量,但每种类型的工作负载的最佳数量有所不同,您必须测试哪些队列数量最适合您的工作负载。
- 列表:要在存储设备上启用 多队列,请编辑虚拟机的 XML 配置。 # virsh edit <example_vm>
- 列表:在 XML 配置中,找到预期的存储设备,并将 queues 参数改为使用多个 I/O 队列。将 N 替换为虚拟机中的 vCPU 数,最多为 16。 一个 virtio-blk 示例: <disk type='block' device='disk'> <driver name='qemu' type='raw' queues='N'/> <source dev='/dev/sda'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> 一个 …
- 列表:一个 virtio-blk 示例: <disk type='block' device='disk'> <driver name='qemu' type='raw' queues='N'/> <source dev='/dev/sda'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk>
- 列表:一个 virtio-scsi 示例: <controller type='scsi' index='0' model='virtio-scsi'> <driver queues='N' /> </controller>
- 列表:重启虚拟机以使更改生效。
- 命令/配置摘录:
# virsh edit <example_vm>
<disk type='block' device='disk'> <driver name='qemu' type='raw' queues='N'/> <source dev='/dev/sda'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk>18.5.4. 配置专用的 IOThreads
- 要点:要提高虚拟机(VM)上磁盘的输入/输出(I/O)性能,您可以配置专用的 IOThread,用于管理虚拟机磁盘的 IO 操作。
- 要点:通常,磁盘的 I/O 操作是主 QEMU 线程的一部分,这可以降低虚拟机在密集 I/O 工作负载期间的响应。通过将 I/O 操作分离到专用的 IOThread,您可以显著提高虚拟机的响应和性能。
- 列表:如果所选的虚拟机正在运行,请关闭它。
- 列表:在主机上,在虚拟机 XML 配置中添加或编辑 <iothreads> 标签。例如,要为 testguest1 虚拟机创建单个 IOThread : # virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <vcpu placement='static'>8</vcpu> <iothreads>1</iothreads> ... </domain> 注意 为获得最佳结果,请对主机上的每个 CPU 只使用 1-2 个 IOThreads。
- 列表:为虚拟机磁盘分配专用的 IOThread。例如,要将 ID 为 1 的 IOThread 分配给 testguest1 虚拟机上的一个磁盘: # virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/>…
- 列表:使用 virtio-scsi 存储设备时,为 virtio-scsi 控制器分配一个专用的 IOThread。例如,要将 ID 为 1 的 IOThread 分配给 testguest1 虚拟机上的一个控制器: # virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <controller type='scsi' index='0' model='virtio-scsi'> <driver iothread='1'/> <address type='pci' domain='0x0000' bus='0x00…
- 列表:评估您的更改对虚拟机性能的影响。详情请查看: 虚拟机性能监控工具
- 命令/配置摘录:
# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <vcpu placement='static'>8</vcpu> <iothreads>1</iothreads> ... </domain>
# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> ... </devices> ... </domain>- 注意:注意 为获得最佳结果,请对主机上的每个 CPU 只使用 1-2 个 IOThreads。
- 注意:注意 IOThread ID 从 1 开始,您必须将单个 IOThread 专用于一个磁盘。 通常,要获得最佳性能,每个虚拟机有一个专用的 IOThread 就足够了。
18.5.5. 配置虚拟磁盘缓存
- 要点:KVM 提供多种虚拟磁盘缓存模式。对于密集型输入/输出(IO)工作负载,选择最佳缓存模式可以显著提高虚拟机(VM)性能。
- 要点:虚拟磁盘缓存模式概述
- 列表:如果所选的虚拟机正在运行,请关闭它。
- 列表:编辑所选虚拟机的 XML 配置。 # virsh edit <vm_name>
- 列表:查找磁盘设备,并在 driver 标签中编辑 cache 选项。 <domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='…
- 命令/配置摘录:
# virsh edit <vm_name>
<domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> ... </devices> ... </domain>18.6. 优化虚拟机 CPU 性能
- 要点:与主机中的物理 CPU 非常相似,vCPU 对虚拟机(VM)性能至关重要。因此,优化 vCPU 会对虚拟机的资源效率产生重大影响。优化 vCPU:
- 要点:确保 vCPU 模型与主机的 CPU 型号一致。例如,将 testguest1 虚拟机设置为使用主机的 CPU 型号:
- 列表:调整分配给虚拟机的主机 CPU 数。您可以使用 CLI 或 Web 控制台进行此操作。
- 列表:确保 vCPU 模型与主机的 CPU 型号一致。例如,将 testguest1 虚拟机设置为使用主机的 CPU 型号: # virt-xml testguest1 --edit --cpu host-model
- 列表:管理内核相同的页面合并 (KSM) 。
- 列表:如果您的主机使用非统一内存访问 (NUMA) ,您也可以为其虚拟机 配置 NUMA。这会尽可能将主机的 CPU 和内存进程映射到虚拟机的 CPU 和内存进程上。实际上,NUMA 调优为 vCPU 提供了对分配给虚拟机的系统内存更精简的访问,这可以提高 vCPU 的处理效率。 详情请参阅 为特定工作负载配置 NUMA 和虚拟机 性能优化。
- 命令/配置摘录:
# virt-xml testguest1 --edit --cpu host-model18.6.1. vCPU 过量使用
- 要点:虚拟 CPU (vCPU)过量使用允许您有一个设置,其中主机上运行的虚拟机(VM)中的所有 vCPU 总和超过主机上的物理 CPU 数量。但是,当在虚拟机中同时运行比主机上物理提供的更多的核时,您可能会遇到性能下降。
- 要点:为了获得最佳性能,请只给虚拟机分配在每个虚拟机中运行预期的工作负载所需的 vCPU 数。
- 列表:分配虚拟机工作负载所需的最小 vCPU 数,以获得最佳性能。
- 列表:避免在未经过广泛测试的情况下在生产环境中过量使用 vCPU。
- 列表:如果过量使用 vCPU,对于 100% 以下的负载,安全比例通常是 5 个 vCPU 对 1 个物理 CPU。
- 列表:不建议每个物理处理器核分配的总 vCPU 数超过 10 个。
- 列表:监控 CPU 使用率,以防止高负载下出现性能下降。
- 注意:重要 使用 100% 内存或处理资源的应用程序可能会在过度使用的环境中变得不稳定。不要在未经过广泛测试的情况下在生产环境中过量使用内存或 CPU,因为 CPU 过量使用比率取决于工作负载。
18.6.2. 使用命令行添加和删除虚拟 CPU
- 要点:要提高或优化虚拟机(VM)的 CPU 性能,您可以添加或删除分配给虚拟机的虚拟 CPU(vCPU)。
- 要点:当在运行的虚拟机上执行时,这也被称为 vCPU 热插和热拔。但请注意,RHEL 10 不支持 vCPU 热拔,红帽不建议使用它。
- 列表:可选:查看所选虚拟机中的 vCPU 的当前状态。例如,要显示 testguest 虚拟机上 vCPU 的数量: # virsh vcpucount testguest maximum config 4 maximum live 2 current config 2 current live 1 此输出显示 testguest 目前使用 1 个 vCPU,另外 1 个 vCPu 可以热插入以提高虚拟机性能。但是,重新引导后,vCPU testguest 使用的数量会改为 2,而且能够热插 2 个 vCPU。
- 列表:调整可附加到虚拟机的最大 vCPU 数量,这对虚拟机下次启动时生效。 例如,要将 testguest 虚拟机的最大 vCPU 数量增加到 8: # virsh setvcpus testguest 8 --maximum --config 请注意,最大值可能会受 CPU 拓扑、主机硬件、hypervisor 和其他因素的限制。
- 列表:将当前附加到虚拟机的 vCPU 数量调整到上一步中配置的最大值。例如: 将附加到正在运行的 testguest 虚拟机的 vCPU 数量增加到 4: # virsh setvcpus testguest 4 --live 这会增加虚拟机的性能和主机的 testguest 负载占用,直到虚拟机下次引导为止。 将附加到 testguest 虚拟机的 vCPU 数量永久减少至 1: # virsh setvcpus testguest 1 --config 这会降低虚拟机的性能和 testguest 的主机负载占用。但是,如果需要可热插入虚拟机以暂时提高性能。
- 列表:将附加到正在运行的 testguest 虚拟机的 vCPU 数量增加到 4: # virsh setvcpus testguest 4 --live 这会增加虚拟机的性能和主机的 testguest 负载占用,直到虚拟机下次引导为止。
- 列表:将附加到 testguest 虚拟机的 vCPU 数量永久减少至 1: # virsh setvcpus testguest 1 --config 这会降低虚拟机的性能和 testguest 的主机负载占用。但是,如果需要可热插入虚拟机以暂时提高性能。
- 列表:确认虚拟机的 vCPU 的当前状态反映了您的更改。 # virsh vcpucount testguest maximum config 8 maximum live 4 current config 1 current live 4
- 命令/配置摘录:
# virsh vcpucount testguest maximum config 4 maximum live 2 current config 2 current live 1
# virsh setvcpus testguest 8 --maximum --config18.6.3. 使用 Web 控制台管理虚拟 CPU
- 要点:通过使用 RHEL 10 web 控制台,您可以查看并配置 web 控制台连接的虚拟机使用的虚拟 CPU。
- 要点:先决条件
- 列表:已安装 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:单击概述窗格中 vCPU 数旁边的 edit。 此时会出现 vCPU 详情对话框。
- 列表:为所选虚拟机配置虚拟 CPU。 vCPU 数量 - 当前正在使用的 vCPU 数量。 注意 vCPU 数量不能超过 vCPU 的最大值。 vCPU 最大 - 可为虚拟机配置的最大虚拟 CPU 数。如果这个值大于 vCPU Count,可以为虚拟机附加额外的 vCPU。 插槽 - 向虚拟机公开的插槽数量。 每个插槽的内核数 - 向虚拟机公开的每个插槽的内核数。 每个内核的线程数 - 向虚拟机公开的每个内核的线程数。 请注意, 插槽、每个插槽的内核数和每个内核的线程数选项调整了虚拟机的 CPU 拓扑。这可能对 vCPU 性能有好处,但可能会影响客户机操作系统中某些软件的功能。如果您的部署不需要不同的设置,请保留默认值。
- 注意:注意 vCPU 数量不能超过 vCPU 的最大值。
- 注意:注意 对虚拟 CPU 设置的更改仅在重启虚拟机后生效。
18.6.4. 在虚拟机中配置 NUMA
- 要点:您可以使用多种方法配置 RHEL 10 主机上虚拟机(VM)的非统一内存访问(NUMA)设置。
- 要点:为便于使用,您可以使用自动化工具和服务设置虚拟机的 NUMA 配置。但是,手动 NUMA 设置可能会显著提高性能。
- 列表:主机是一个与 NUMA 兼容的机器。要检测是否是这种情况,请使用 virsh nodeinfo 命令,并查看 NUMA cell(s) 行: # virsh nodeinfo CPU model: x86_64 CPU(s): 48 CPU frequency: 1200 MHz CPU socket(s): 1 Core(s) per socket: 12 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 67012964 KiB 如果行的值为 2 或更高,则主机与 NUMA 兼容。
- 列表:可选:您在主机上安装了 numactl 软件包。 # dnf install numactl
- 列表:将虚拟机的 NUMA 策略设为 Preferred。例如,要配置 testguest5 虚拟机: # virt-xml testguest5 --edit --vcpus placement=auto # virt-xml testguest5 --edit --numatune mode=preferred
- 列表:使用 numad 服务自动将 VM CPU 与内存资源保持一致。 # echo 1 > /proc/sys/kernel/numa_balancing
- 列表:启动 numad 服务自动将 VM CPU 与内存资源保持一致。 # systemctl start numad
- 列表:可选: 使用 numactl 命令查看主机上的 NUMA 拓扑: # numactl --hardware available: 2 nodes (0-1) node 0 size: 18156 MB node 0 free: 9053 MB node 1 size: 18180 MB node 1 free: 6853 MB node distances: node 0 1 0: 10 20 1: 20 10
- 命令/配置摘录:
# virsh nodeinfo CPU model: x86_64 CPU(s): 48 CPU frequency: 1200 MHz CPU socket(s): 1 Core(s) per socket: 12 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 67012964 KiB
# dnf install numactl- 注意:注意 为了获得最佳性能,最好遵守主机上每个 NUMA 节点的最大内存大小。
18.6.5. 配置虚拟 CPU 固定
- 要点:要提高虚拟机(VM)的 CPU 性能,您可以将虚拟 CPU (vCPU)固定到主机上的特定物理 CPU 线程。这确保 vCPU 有自己的专用物理 CPU 线程,这可以显著提高 vCPU 性能。
- 要点:要进一步优化 CPU 性能,您还可以将与指定虚拟机关联的 QEMU 进程线程固定到特定的主机 CPU。
- 列表:检查主机上的 CPU 拓扑: # lscpu -p=node,cpu Node,CPU 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 在本例中,输出中包含 NUMA 节点和主机上可用的物理 CPU 线程。
- 列表:检查虚拟机中的 vCPU 线程数: # lscpu -p=node,cpu Node,CPU 0,0 0,1 0,2 0,3 在本例中,输出中包含 NUMA 节点和虚拟机中可用的 vCPU 线程。
- 列表:将虚拟机中特定的 vCPU 线程固定到特定的主机 CPU 或 CPU 范围。建议作为安全的方法改进 vCPU 性能。 例如,以下命令将 testguest6 虚拟机的 vCPU 线程 0 到 3 分别固定到主机 CPU 1, 3, 5, 7 : # virsh vcpupin testguest6 0 1 # virsh vcpupin testguest6 1 3 # virsh vcpupin testguest6 2 5 # virsh vcpupin testguest6 3 7
- 列表:可选:验证 vCPU 线程是否已成功固定到 CPU。 # virsh vcpupin testguest6 VCPU CPU Affinity ---------------------- 0 1 1 3 2 5 3 7
- 列表:可选:固定 vCPU 线程后,您还可以将与指定虚拟机关联的 QEMU 进程线程固定到特定的主机 CPU 或 CPU 范围。这可进一步帮助 QEMU 进程在物理 CPU 上更有效地运行。 例如,以下命令将 testguest6 的 QEMU 进程线程固定到 CPU 2 和 4,并验证是否成功: # virsh emulatorpin testguest6 2,4 # virsh emulatorpin testguest6 emulator: CPU Affinity ---------------------------------- *: 2,4
- 命令/配置摘录:
# lscpu -p=node,cpu Node,CPU 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7
# lscpu -p=node,cpu Node,CPU 0,0 0,1 0,2 0,318.6.6. 配置虚拟 CPU 上限
- 要点:您可以使用虚拟 CPU (vCPU)上限来限制虚拟机(VM)可以使用的 CPU 资源量。vCPU 上限可通过防止单个虚拟机过度使用主机的 CPU 资源来提高整体性能,并使 hypervisor 更轻松地管理 CPU 调度。
- 要点:流程
- 列表:查看主机上当前的 vCPU 调度配置。 # virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 0 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
- 列表:要为虚拟机配置一个绝对 vCPU 上限,请设置 vcpu_period 和 vcpu_quota 参数。两个参数都使用一个数字值,其代表以微秒为单位的持续时间。 使用 virsh schedinfo 命令设置 vcpu_period 参数。例如: # virsh schedinfo <vm_name> --set vcpu_period=100000 在本例中,vcpu_period 被设置为 100,000 微秒,这意味着调度程序在此时间间隔内强制实施 vCPU 上限。 您还可以使用 --live --config 选项来配置一个正在运行的虚拟机,而无需重启它。 使用 virsh schedinfo 命令设置 vcpu_quot…
- 列表:使用 virsh schedinfo 命令设置 vcpu_period 参数。例如: # virsh schedinfo <vm_name> --set vcpu_period=100000 在本例中,vcpu_period 被设置为 100,000 微秒,这意味着调度程序在此时间间隔内强制实施 vCPU 上限。 您还可以使用 --live --config 选项来配置一个正在运行的虚拟机,而无需重启它。
- 列表:使用 virsh schedinfo 命令设置 vcpu_quota 参数。例如: # virsh schedinfo <vm_name> --set vcpu_quota=50000 在本例中,vcpu_quota 被设置为 50,000 微秒,它指定虚拟机在 vcpu_period 时间间隔内可以使用的最大 CPU 时间。在本例中,vcpu_quota 被设置为 vcpu_period 的一半,因此虚拟机在此间隔内可使用最多 50% 的 CPU 时间。 您还可以使用 --live --config 选项来配置一个正在运行的虚拟机,而无需重启它。
- 列表:检查 vCPU 调度参数是否有正确的值。 # virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 2048 vcpu_period : 100000 vcpu_quota : 50000 ...
- 命令/配置摘录:
# virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 0 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
# virsh schedinfo <vm_name> --set vcpu_period=10000018.6.7. 调整 CPU 权重
- 要点:CPU 权重 (或 CPU 共享)设置控制与其他正在运行的虚拟机相比,虚拟机(VM)接收的 CPU 时间。通过增加特定虚拟机的 CPU 权重,您可以确保相对于其他虚拟机,此虚拟机获得更多的 CPU 时间。要在多个虚拟机之间优先分配 CPU 时间,请设置 cpu_shares 参数
- 要点:可能的 CPU 权重值范围从 0 到 262144,新 KVM 虚拟机的默认值为 1024。
- 列表:检查虚拟机的当前 CPU 权重。 # virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 1024 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
- 列表:将 CPU 权重 调整为希望的值。 # virsh schedinfo <vm_name> --set cpu_shares=2048 Scheduler : posix cpu_shares : 2048 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0 在本例中,cpu_shares 被设置为 2048。这意味着,如果所有其他虚拟机的值被设置为 1024,则此虚拟机大约获得两倍的 CPU 时间。 …
- 命令/配置摘录:
# virsh schedinfo <vm_name> Scheduler : posix cpu_shares : 1024 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 0
# virsh schedinfo <vm_name> --set cpu_shares=2048 Scheduler : posix cpu_shares : 2048 vcpu_period : 0 vcpu_quota : 0 emulator_period: 0 emulator_quota : 0 global_period : 0 global_quota : 0 iothread_period: 0 iothread_quota : 018.6.8. 启用和禁用内核相同页合并
- 要点:内核同页合并 (KSM) 通过在虚拟机 (VM) 间共享相同的内存页面来提高内存密度。因此,启用 KSM 可能会提高虚拟机部署的内存效率。
- 要点:但是,启用 KSM 也会增加 CPU 使用率,并可能会对总体性能造成负面影响,具体取决于工作负载。
- 列表:对主机系统的 root 访问权限。
- 列表:启用 KSM: 警告 启用 KSM 会增加 CPU 使用率并影响整体 CPU 性能。 安装 ksmtuned 服务: # dnf install ksmtuned 启动服务: 要为单个会话启用 KSM,请使用 systemctl 程序启动 ksm 和 ksmtuned 服务。 # systemctl start ksm # systemctl start ksmtuned 要永久启用 KSM,请使用 systemctl 程序启用 ksm 和 ksmtuned 服务。 # systemctl enable ksm Created symlink /etc/systemd/system/multi-user.target.wants/…
- 列表:安装 ksmtuned 服务: # dnf install ksmtuned
- 列表:启动服务: 要为单个会话启用 KSM,请使用 systemctl 程序启动 ksm 和 ksmtuned 服务。 # systemctl start ksm # systemctl start ksmtuned 要永久启用 KSM,请使用 systemctl 程序启用 ksm 和 ksmtuned 服务。 # systemctl enable ksm Created symlink /etc/systemd/system/multi-user.target.wants/ksm.service → /usr/lib/systemd/system/ksm.service # systemctl enable ksmtuned Crea…
- 列表:要为单个会话启用 KSM,请使用 systemctl 程序启动 ksm 和 ksmtuned 服务。 # systemctl start ksm # systemctl start ksmtuned
- 列表:要永久启用 KSM,请使用 systemctl 程序启用 ksm 和 ksmtuned 服务。 # systemctl enable ksm Created symlink /etc/systemd/system/multi-user.target.wants/ksm.service → /usr/lib/systemd/system/ksm.service # systemctl enable ksmtuned Created symlink /etc/systemd/system/multi-user.target.wants/ksmtuned.service → /usr/lib/systemd/system/ksmtune…
- 命令/配置摘录:
# dnf install ksmtuned
# systemctl start ksm # systemctl start ksmtuned- 注意:警告 启用 KSM 会增加 CPU 使用率并影响整体 CPU 性能。
- 注意:注意 取消激活 KSM 前在虚拟机间共享的内存页将保持共享。要停止共享,请使用以下命令删除系统中的所有 PageKSM 页: # echo 2 > /sys/kernel/mm/ksm/run 但是,这个命令会增加内存使用率,并可能导致主机或虚拟机上出现性能问题。
18.7. 优化虚拟机网络性能
- 要点:由于虚拟机的网络接口控制器(NIC)的虚拟性质,虚拟机会丢失一部分其分配的主机网络带宽,这会降低虚拟机的整体工作负载效率。您可以通过修改虚拟机的配置来最小化虚拟化对虚拟 NIC (vNIC)吞吐量的负面影响。
- 要点:流程
- 列表:了解虚拟网络
- 命令/配置摘录:
# lsmod | grep vhost vhost_net 32768 1 vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net
# modprobe vhost_net18.8. 虚拟机性能监控工具
- 要点:要确定什么消耗了最多的 VM 资源,以及虚拟机性能的哪方面需要优化,可以使用性能诊断工具,包括通用的和特定于虚拟机的。
- 要点:默认操作系统性能监控工具
- 列表:在 RHEL 10 主机上,以 root 用户身份使用 top 实用程序或系统监控 应用程序,并在输出中查找 qemu 和 virt。这显示了您的虚拟机消耗的主机系统资源量。 如果监控工具显示任何 qemu 或 virt 进程消耗了大量的主机 CPU 或内存量,请使用 perf 工具进行调查。详情请查看以下信息。 另外,如果 vhost_net 线程进程(如 vhost_net-1234 )被显示为消耗大量主机 CPU 容量,请考虑使用 虚拟网络优化功能,如 multi-queue virtio-net。
- 列表:如果监控工具显示任何 qemu 或 virt 进程消耗了大量的主机 CPU 或内存量,请使用 perf 工具进行调查。详情请查看以下信息。
- 列表:另外,如果 vhost_net 线程进程(如 vhost_net-1234 )被显示为消耗大量主机 CPU 容量,请考虑使用 虚拟网络优化功能,如 multi-queue virtio-net。
- 列表:在客户机操作系统上,使用系统上可用的性能工具和应用程序来评估哪些进程消耗了最多的系统资源。 在 Linux 系统上,您可以使用 top 工具。 在 Windows 系统中,您可以使用 Task Manager 应用程序。
- 列表:在 Linux 系统上,您可以使用 top 工具。
- 列表:在 Windows 系统中,您可以使用 Task Manager 应用程序。
- 命令/配置摘录:
# dnf install perf
# perf kvm stat report Analyze events for all VMs, all VCPUs: VM-EXIT Samples Samples% Time% Min Time Max Time Avg time EXTERNAL_INTERRUPT 365634 31.59% 18.04% 0.42us 58780.59us 204.08us ( +- 0.99% ) MSR_WRITE 293428 25.35% 0.13% 0.59us 17873.02us 1.80us ( +- 4.63% ) PREEMPTION_TIMER 276162 23.86% 0.23% 0.51us 21396.03us 3.38us ( +- 5.19% ) PAUSE_INSTRUCTION 189375 16.36% 11.75% 0.72us 29655.25us 256.77us ( +- 0.70% ) HLT 20440 1.77% 69.83% 0.62us 79319.41us 14134.56us ( +- 0.79% ) VMCALL 12426 1.07% 0.03% 1.02us 5416.25us 8.77us ( +- 7.36% ) EXCEPTION_NMI 27 0.00% 0.00% 0.69us 1.34us 0.98us ( +- 3.50% ) EPT_MISCONFIG 5 0.00% 0.00% …第 19 章 保护虚拟机
- 要点:作为带有虚拟机(VM)的 RHEL 10 系统的管理员,确保您的虚拟机尽可能安全,显著降低您的客户机和主机操作系统被恶意软件破坏的风险。
- 要点:以下小节概述了在 RHEL 10 主机上 保护虚拟机 的机制,并提供提高虚拟机安全性的方法列表。
19.1. 虚拟机中的安全性是如何工作的
- 要点:通过使用虚拟机,可在单一主机机器中托管多个操作系统。这些系统通过 hypervisor 与主机连接,通常也通过虚拟网络连接。因此,每个虚拟机都可以用作使用恶意软件攻击主机的向量,主机可用作攻击任何虚拟机的向量。
- 要点:图 19.1. 虚拟化主机上潜在的恶意攻击向量
19.2. 保护虚拟机的最佳实践
- 要点:根据以下步骤,您的虚拟机被恶意代码利用,并用作攻击向量攻击您的主机系统的风险会大幅降低。
- 要点:在客户端中:
- 列表:象保护物理机器一样保护虚拟机的安全。增强安全性的具体方法取决于客户端操作系统。 如果您的虚拟机正在运行 RHEL 10,请参阅 保护 RHEL 10 以了解有关提高客户端系统安全性的详细说明。
- 列表:当远程管理虚拟机时,请使用加密的工具(如 SSH)和网络协议(如 SSL)连接到虚拟机。
- 列表:确定 SELinux 处于 Enforcing 模式: # getenforce Enforcing 如果 SELinux 被禁用或者处于 Permissive 模式,请参阅使用 SELinux 文档来激活 Enforcing 模式。 注意 SELinux Enforcing 模式还启用 sVirt RHEL 10 功能。这是用于虚拟化的一组特殊的 SELinux 布尔值,可手动调整,以便进行细致的虚拟机安全管理。
- 列表:使用带有 SecureBoot 的虚拟机: SecureBoot 是一种特性,可确保虚拟机运行加密签名的操作系统。这可防止因为恶意软件攻击而更改了操作系统的虚拟机引导。 SecureBoot 只能在 AMD64 或 Intel 64 主机上安装使用 OVMF 固件的 Linux 虚拟机时应用。具体步骤请参阅创建 SecureBoot 虚拟机。
- 列表:不要使用 qemu-* 命令,如 qemu-kvm。 QEMU 是 RHEL 10 中虚拟化架构的基本组件,但难以手动管理,而且不正确的 QEMU 配置可能会导致安全漏洞。因此,使用大多数 qemu-* 命令不被红帽支持。反之,使用 libvirt 工具,如virsh、virt-install 和 virt-xml ,根据最佳实践来编排 QEMU。 但请注意,支持 qemu-img 工具来管理虚拟磁盘镜像。
- 列表:RHEL 中虚拟化的 SELinux 布尔值
- 命令/配置摘录:
# getenforce Enforcing- 注意:注意 SELinux Enforcing 模式还启用 sVirt RHEL 10 功能。这是用于虚拟化的一组特殊的 SELinux 布尔值,可手动调整,以便进行细致的虚拟机安全管理。
19.3. 虚拟机安全性的默认功能
- 要点:除了手动改进虚拟机的安全性外,在 保护虚拟机的最佳实践 中,libvirt 软件套件还提供了一些安全功能,并在 RHEL 10 中使用虚拟化时自动启用。它们是:
- 要点:访问 RHEL 10 主机上虚拟机管理的所有可用工具,您需要使用 libvirt 的系统连接(qemu:///system )。为此,您必须在系统上拥有 root 权限,或者是 libvirt 用户组的成员。
19.4. 在 Windows 虚拟机中启用标准硬件安全性
- 要点:要保护 Windows 虚拟机,您可以使用 Windows 设备的标准硬件功能启用基本级别安全性。
- 要点:先决条件
- 列表:请确定您安装了最新的 WHQL 认证的 VirtIO 驱动程序。
- 列表:确保虚拟机固件支持 UEFI 引导。
- 列表:在您的主机上安装 edk2-OVMF 软件包。 # dnf install edk2-ovmf
- 列表:在您的主机上安装 vTPM 软件包。 # dnf install swtpm libtpms
- 列表:确保虚拟机使用 Q35 机器架构。
- 列表:请确定您有 Windows 安装介质。
- 命令/配置摘录:
# dnf install edk2-ovmf
# dnf install swtpm libtpms19.5. 在 Windows 虚拟机上启用增强的硬件安全
- 要点:为进一步保护 Windows 虚拟机(VM),您可以启用基于虚拟化的代码完整性保护,也称为 hypervisor 保护的代码完整性(HVCI)。
- 要点:先决条件
- 列表:确保启用了标准硬件安全。如需更多信息,请参阅在 Windows 虚拟机上启用标准硬件安全性。
- 列表:确保启用了 Hyper-V enlightenments。如需更多信息,请参阅启用 Hyper-Vlightenments。
- 列表:打开 Windows 虚拟机的 XML 配置。以下示例打开 Example-L1 虚拟机的配置: # virsh edit Example-L1
- 列表:在 <cpu> 部分下,指定 CPU 模式并添加策略标记。 重要 对于 Intel CPU,启用 vmx 策略标记。 对于 AMD CPU,启用 svm 策略标记。 如果您不想指定自定义 CPU,您可以将 < cpu mode> 设置为 host-passthrough。 <cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Skylake-Client-IBRS</model> <topology sockets='1' dies='1' cores='4' threads='1'/> <feature policy='re…
- 列表:保存 XML 配置并重启虚拟机。
- 列表:在虚拟机操作系统中,进入到 Core 隔离详情页 : settings > Update & Security > Windows Security > Device Security > Core isolated details
- 命令/配置摘录:
# virsh edit Example-L1
<cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Skylake-Client-IBRS</model> <topology sockets='1' dies='1' cores='4' threads='1'/> <feature policy='require' name='vmx'/> </cpu>- 注意:重要 对于 Intel CPU,启用 vmx 策略标记。 对于 AMD CPU,启用 svm 策略标记。 如果您不想指定自定义 CPU,您可以将 < cpu mode> 设置为 host-passthrough。
- 注意:注意 有关启用 HVCI 的其他方法,请查看相关的 Microsoft 文档。
19.6. 创建 SecureBoot 虚拟机
- 要点:您可以创建一个使用 SecureBoot 特性的 Linux 虚拟机(VM),这将确保您的虚拟机运行加密签名的操作系统。如果虚拟机的客户机操作系统已被恶意软件更改,这将非常有用。在这种场景下,SecureBoot 会阻止虚拟机启动,从而停止可能将恶意软件传播给您的主机。
- 要点:先决条件
- 列表:虚拟机是 Q35 机器类型。
- 列表:您的主机系统使用 AMD64 或 Intel 64 架构。
- 列表:edk2-OVMF 软件包已安装: # dnf install edk2-ovmf
- 列表:操作系统(OS)安装源可存在于本地或者网络中。可以是以下格式之一: 安装介质的 ISO 镜像 现有虚拟机安装的磁盘镜像 警告 在 RHEL 10 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库解决方案 RHEL 7 或更高版本无法从 CD/DVD-ROM 安装客户机操作系统。
- 列表:安装介质的 ISO 镜像
- 列表:现有虚拟机安装的磁盘镜像 警告 在 RHEL 10 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库解决方案 RHEL 7 或更高版本无法从 CD/DVD-ROM 安装客户机操作系统。
- 命令/配置摘录:
# dnf install edk2-ovmf
# virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel10.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-{ProductNumber}.0-installation.iso- 注意:警告 在 RHEL 10 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库解决方案 RHEL 7 或更高版本无法从 CD/DVD-ROM 安装客户机操作系统。
19.7. 限制虚拟机用户可以使用哪些操作
- 要点:在某些情况下,在 RHEL 10 中托管的虚拟机(VM)用户可以默认执行。如果是这种情况,您可以通过配置 libvirt 守护进程配置来在主机上使用 polkit 策略工具包来限制虚拟机用户可用的操作。
- 要点:流程
- 列表:可选:确保与 libvirt 相关的 polkit 控制策略根据您的偏好设置。 在 /usr/share/polkit-1/actions/ 和 /usr/share/polkit-1/rules.d/ 目录中找到所有与 libvirt 相关的文件。 # ls /usr/share/polkit-1/actions | grep libvirt # ls /usr/share/polkit-1/rules.d | grep libvirt 打开文件并检查规则设置。 有关读取 polkit 控制策略的语法的信息,请使用 man polkit。 修改 libvirt 控制策略。要做到这一点: 在 /etc/polkit-1/rules…
- 列表:在 /usr/share/polkit-1/actions/ 和 /usr/share/polkit-1/rules.d/ 目录中找到所有与 libvirt 相关的文件。 # ls /usr/share/polkit-1/actions | grep libvirt # ls /usr/share/polkit-1/rules.d | grep libvirt
- 列表:打开文件并检查规则设置。 有关读取 polkit 控制策略的语法的信息,请使用 man polkit。
- 列表:修改 libvirt 控制策略。要做到这一点: 在 /etc/polkit-1/rules.d/ 目录中创建一个新的 .rules 文件。 将自定义策略添加到此文件中,并保存。 有关 libvirt 控制策略的更多信息和示例,请参阅 libvirt 上游文档。
- 列表:在 /etc/polkit-1/rules.d/ 目录中创建一个新的 .rules 文件。
- 列表:将自定义策略添加到此文件中,并保存。 有关 libvirt 控制策略的更多信息和示例,请参阅 libvirt 上游文档。
- 命令/配置摘录:
# ls /usr/share/polkit-1/actions | grep libvirt # ls /usr/share/polkit-1/rules.d | grep libvirt
# find /etc/libvirt/ -name virt*d.conf -exec sed -i 's/#access_drivers = \[ "polkit" \]/access_drivers = \[ "polkit" \]/g' {} +19.8. 配置 VNC 密码
- 要点:要管理对虚拟机(VM)的图形输出的访问,您可以为虚拟机的 VNC 控制台配置密码。
- 要点:在虚拟机上配置了 VNC 密码后,虚拟机的用户在尝试查看或与虚拟机的 VNC 图形控制台进行交互时必须输入密码,例如通过使用 virt-viewer 工具。
- 列表:要使用 VNC 密码保护的虚拟机已配置了 VNC 图形。 要确保情况如此,请使用 virsh dumpxml 命令,如下所示: # virsh dumpxml <vm-name> | grep graphics <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1> </graphics>
- 列表:打开您要为其分配 VNC 密码的虚拟机的配置。 # virsh edit <vm-name>
- 列表:在配置的 <graphics> 行上,添加 passwd 属性和密码字符串。密码必须是 8 个字符或更少。 <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>'> 可选:另外,定义密码过期的日期和时间。 <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>' passwdValidTo='2025-02-01T15:30:00'> 在本例中,密码将在 2025 年 2 月 1 日 15:30 UTC 到期。
- 列表:可选:另外,定义密码过期的日期和时间。 <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>' passwdValidTo='2025-02-01T15:30:00'> 在本例中,密码将在 2025 年 2 月 1 日 15:30 UTC 到期。
- 列表:保存配置。
- 列表:启动修改的虚拟机。 # virsh start <vm-name>
- 命令/配置摘录:
# virsh dumpxml <vm-name> | grep graphics <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1> </graphics>
# virsh edit <vm-name>- 注意:重要 对于确保虚拟机环境的安全,VNC 密码不是一个充分的措施。详情请查看 关于 VNC 安全的 QEMU 文档。 另外,VNC 密码以纯文本形式保存在虚拟机的配置中,因此要使密码有效,用户不能显示虚拟机配置。
19.9. 用于虚拟化的 SELinux 布尔值
- 要点:RHEL 10 提供 sVirt 功能,这是一组在强制模式下使用 SELinux 在主机上自动启用的专用 SELinux 布尔值。
- 要点:要在 RHEL 10 系统中对虚拟机安全性进行精细配置,您可以在主机上配置 SELinux 布尔值,以确保 hypervisor 以特定的方式工作。
- 命令/配置摘录:
$ getsebool -a | grep virt [...] virt_sandbox_use_netlink --> off virt_sandbox_use_sys_admin --> off virt_transition_userdomain --> off virt_use_comm --> off virt_use_execmem --> off virt_use_fusefs --> off [...]- 表格样本(共 16 行):
- SELinux 布尔值 | 描述
- staff_use_svirt | 启用非 root 用户创建并转换虚拟机至 sVirt。
- unprivuser_use_svirt | 启用非特权用户创建虚拟机并将其转换至 sVirt。
- virt_sandbox_use_audit | 启用沙盒容器来发送审核信息。
第 20 章 在主机及其虚拟机间共享文件
- 要点:您可能需要在主机系统和其运行的虚拟机(VM)之间共享数据。要快速高效地完成此操作,您可以使用 virtio 文件系统(virtiofs)。
20.1. 使用 virtiofs 在主机及其虚拟机之间共享文件
- 要点:通过使用 virtio 文件系统(virtiofs),您可以在主机和虚拟机(VM)之间共享文件,作为与本地文件系统结构相同的目录树。
20.1.1. 使用命令行在主机和 Windows 虚拟机间共享文件
- 要点:当使用 RHEL 10 作为 hypervisor 时,您可以使用 virtiofs 功能以及 virtio-win 软件包在主机系统和 Windows 虚拟机(VM)之间高效地共享文件。
- 要点:先决条件
- 列表:要与虚拟机共享的目录。如果您不想共享任何现有目录,请创建一个新目录,例如: shared-files。 # mkdir /root/shared-files
- 列表:您已将 virtio 驱动程序安装介质附加到虚拟机。
- 列表:您已在 Windows 虚拟机上安装了 virtio-win 软件包。如需更多信息,请参阅在 Windows 客户端中安装 virtio 驱动程序。
- 列表:对于您要与虚拟机共享的主机的每个目录,请在虚拟机 XML 配置中将其设置为 virtiofs 文件系统。 打开预期虚拟机的 XML 配置。 # virsh edit vm-name 在虚拟机 XML 配置的 <devices> 部分添加类似于以下内容的条目。 <filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-files'/> <target dir='host-file…
- 列表:打开预期虚拟机的 XML 配置。 # virsh edit vm-name
- 列表:在虚拟机 XML 配置的 <devices> 部分添加类似于以下内容的条目。 <filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-files'/> <target dir='host-file-share'/> </filesystem> 本例设置主机上的 /root/shared-files 目录,使其作为 host-file-share 呈现给虚拟机。
- 命令/配置摘录:
# mkdir /root/shared-files
# virsh edit vm-name- 注意:注意 您可以使用 virtiofs.exe 命令和 -i 参数在 Windows 虚拟机上以区分大小写的模式运行 virtiofs 服务。
- 注意:重要 您必须在每次虚拟机重启后重启 virtiofs 服务来访问共享目录。
第 21 章 诊断虚拟机问题
- 要点:使用虚拟机(VM)时,您可能会遇到不同严重等级的问题。有些问题可能很快且容易修复,而另外一些问题,您可能需要捕获与虚拟机相关的数据和日志来报告或诊断问题。
- 要点:以下章节提供了有关生成日志、诊断一些常见虚拟机问题以及报告这些问题的详细信息。
21.1. 生成 libvirt 调试日志
- 要点:要诊断虚拟机(VM)问题,生成和查看 libvirt 调试日志会很有帮助。当请求支持解决与虚拟机相关的问题时,附加调试日志也很有用。
21.1.1. 了解 libvirt 调试日志
- 要点:调试日志是文本文件,其中包含关于虚拟机(VM)运行期间所发生的事件的数据。日志提供有关基本服务器端功能的信息,如主机库和 libvirt 守护进程。日志文件还包含所有正在运行的虚拟机的标准错误输出(stderr)。
- 要点:默认情况下不启用 debug 日志记录,必须在 libvirt 启动时启用。
- 列表:要为当前会话收集 libvirt 调试日志,请参阅 在运行时启用 libvirt 调试日志。
- 列表:要默认收集 libvirt 调试日志,请参阅 永久启用 libvirt 调试日志。
21.1.2. 永久启用 libvirt 调试日志
- 要点:您可以将 libvirt debug 日志记录配置为在 libvirt 启动时自动启用。默认情况下,virtqemud 是 RHEL 10 中的主要 libvirt 守护进程。要在 libvirt 配置中进行持久更改,您必须编辑位于 /etc/libvirt 目录中的 virtqemud.conf 文件。
- 要点:流程
- 列表:在编辑器中打开 virtqemud.conf 文件。
- 列表:根据您的要求替换或设置过滤器。 Expand 表 21.1. 调试过滤器的值 1 记录 libvirt 生成的所有消息。 2 记录所有非调试信息。 3 记录所有警告和错误消息。这是默认值。 4 仅记录错误消息。 Show more 例 21.1. 日志过滤器的守护进程设置示例 以下设置: 记录来自 remote,util.json 和 rpc 层的所有错误和警告消息 仅记录来自 event 层的错误消息。 将过滤的日志保存到 /var/log/libvirt/libvirt.log log_filters="3:remote 4:event 3:util.json 3:rpc" log_outputs="1:fil…
- 列表:记录来自 remote,util.json 和 rpc 层的所有错误和警告消息
- 列表:仅记录来自 event 层的错误消息。
- 列表:将过滤的日志保存到 /var/log/libvirt/libvirt.log
- 列表:保存并退出。
- 命令/配置摘录:
log_filters="3:remote 4:event 3:util.json 3:rpc" log_outputs="1:file:/var/log/libvirt/libvirt.log"
$ systemctl restart virtqemud.service- 表格样本(共 4 行):
- 1 | 记录 libvirt 生成的所有消息。
- 2 | 记录所有非调试信息。
- 3 | 记录所有警告和错误消息。这是默认值。
- 4 | 仅记录错误消息。
21.1.3. 在运行时启用 libvirt 调试日志
- 要点:您可以修改 libvirt 守护进程的运行时设置,以启用调试日志并将其保存到输出文件中。
- 要点:这在无法重启 libvirt 守护进程时很有用,因为重启解决了这个问题,或者因为存在另一个进程(如迁移或备份)同时运行。如果您要在不编辑配置文件或重启守护进程的情况下尝试命令,修改运行时设置也很有用。
- 列表:确保 libvirt-admin 软件包已安装。
- 列表:可选:备份活跃的日志过滤器集合。 # virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup 这样便可在生成日志后恢复活跃的过滤器集合。如果您没有恢复过滤器,则会继续记录消息,这可能会影响系统性能。
- 列表:使用 virt-admin 工具启用调试,并根据您的要求设置过滤器。 Expand 表 21.2. 调试过滤器的值 1 记录 libvirt 生成的所有消息。 2 记录所有非调试信息。 3 记录所有警告和错误消息。这是默认值。 4 仅记录错误消息。 Show more 例 21.2. 日志过滤器的 virt-admin 设置示例 以下命令: 记录来自 远程、util.json 和 rpc 层的所有错误和警告消息 仅记录来自 event 层的错误消息。 # virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.jso…
- 列表:记录来自 远程、util.json 和 rpc 层的所有错误和警告消息
- 列表:仅记录来自 event 层的错误消息。
- 列表:使用 virt-admin 工具将日志保存到特定的文件或目录中。 例如,以下命令将日志输出保存到 /var/log/libvirt/ 目录中的 libvirt.log 文件中: # virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
- 命令/配置摘录:
# virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
# virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"- 表格样本(共 4 行):
- 1 | 记录 libvirt 生成的所有消息。
- 2 | 记录所有非调试信息。
- 3 | 记录所有警告和错误消息。这是默认值。
- 4 | 仅记录错误消息。
21.1.4. 将 libvirt 调试日志附加到支持请求中
- 要点:您可能需要请求额外的支持来诊断和解决虚拟机(VM)问题。强烈建议将调试日志附加到支持请求中,以确保支持团队可以访问所需的所有信息,从而快速解决与虚拟机相关的问题。
- 要点:流程
- 列表:要报告问题并请求支持,创建一个支持问题单。
- 列表:根据遇到的问题,将以下日志与您的报告一起附加: 对于 libvirt 服务的问题,请附加来自主机的 /var/log/libvirt/libvirt.log 文件。 对于特定虚拟机的问题,请附加对应的日志文件。 例如,对于 testguest1 虚拟机,请附加 testguest1.log 文件,该文件可在 /var/log/libvirt/qemu/testguest1.log 中找到。
- 列表:对于 libvirt 服务的问题,请附加来自主机的 /var/log/libvirt/libvirt.log 文件。
- 列表:对于特定虚拟机的问题,请附加对应的日志文件。 例如,对于 testguest1 虚拟机,请附加 testguest1.log 文件,该文件可在 /var/log/libvirt/qemu/testguest1.log 中找到。
- 列表:如何给红帽支持提供日志文件?(红帽知识库)
21.2. 转储虚拟机内核
- 要点:要分析虚拟机(VM)崩溃或出现故障的原因,您可以将虚拟机内核转储到磁盘上的文件,以便稍后分析和诊断。
21.2.1. 虚拟机内核转储的工作原理
- 要点:虚拟机(VM)需要许多运行的进程来准确且高效地工作。在某些情况下,运行的虚拟机在使用时可能会意外终止或出现故障。重新启动虚拟机可能会导致数据被重置或丢失,从而难以诊断导致虚拟机崩溃的确切问题。
- 要点:在这种情况下,您可以在重启虚拟机前使用 virsh dump 工具将虚拟机内核保存(或 转储)到一个文件中。内核转储文件包含虚拟机的原始物理内存镜像,其中包含有关虚拟机的详细信息。此信息可用于手动诊断,或使用 crash 等工具来诊断虚拟机问题。
- 列表:系统中 crash (8) 手册页
- 列表:crash Github 存储库
21.2.2. 创建虚拟机内核转储文件
- 要点:虚拟机(VM)内核转储包含在任何给定的时间有关虚拟机状态的详细信息。此信息与虚拟机的快照类似,可以帮助您在虚拟机出现故障或突然关闭时检测问题。
- 要点:先决条件
- 列表:请确定您有足够的磁盘空间保存该文件。请注意,虚拟机消耗的空间取决于分配给虚拟机的 RAM 量。
- 列表:使用 virsh dump 工具。 例如,以下命令将 test-guest1 虚拟机的内核、内存和 CPU 通用寄存器文件转储到 /core/file 目录中的 sample-core.file。 # virsh dump test-guest1 /core/file/sample-core.file --memory-only Domain 'test-guest1' dumped to /core/file/sample-core.file
- 列表:virsh dump --help 命令
- 列表:您系统上的 virsh (1) 手册页
- 列表:开一个支持问题单
- 命令/配置摘录:
# virsh dump test-guest1 /core/file/sample-core.file --memory-only Domain 'test-guest1' dumped to /core/file/sample-core.file
crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M- 注意:重要 crash 工具不再支持 virsh dump 命令的默认文件格式。要使用 crash 分析内核转储文件,您必须使用 --memory-only 选项创建文件。 另外,在创建内核转储文件时,必须使用 --memory-only 选项将其附加到红帽支持问题单中。
21.3. 回溯虚拟机进程
- 要点:当与虚拟机(VM)相关的进程出现故障时,您可以使用 gstack 命令和进程标识符(PID)来生成一个故障进程的执行堆栈跟踪。如果该进程是线程组的一部分,那么也会跟踪所有线程。
- 要点:先决条件
- 列表:确保 GDB 软件包已安装。 有关安装 GDB 和可用组件的详情,请参阅安装 GNU Debugger。
- 列表:请确定您知道要追踪进程的 PID。 您可以使用 pgrep 命令,后跟进程的名称来查找 PID。例如: # pgrep libvirt 22014 22025
- 列表:使用 gstack 工具,后跟您要回溯的进程的 PID。 例如,以下命令追踪 PID 为 22014 的 libvirt 进程。 # gstack 22014 Thread 3 (Thread 0x7f33edaf7700 (LWP 22017)): #0 0x00007f33f81aef21 in poll () from /lib64/libc.so.6 #1 0x00007f33f89059b6 in g_main_context_iterate.isra () from /lib64/libglib-2.0.so.0 #2 0x00007f33f8905d72 in g_main_loop_run () from /lib…
- 列表:您系统上的 gstack 手册页
- 列表:GNU 调试器(GDB)
- 命令/配置摘录:
# pgrep libvirt 22014 22025
# gstack 22014 Thread 3 (Thread 0x7f33edaf7700 (LWP 22017)): #0 0x00007f33f81aef21 in poll () from /lib64/libc.so.6 #1 0x00007f33f89059b6 in g_main_context_iterate.isra () from /lib64/libglib-2.0.so.0 #2 0x00007f33f8905d72 in g_main_loop_run () from /lib64/libglib-2.0.so.0 ...21.4. 用于报告虚拟机问题并提供日志的其他资源
- 要点:要请求额外的帮助和支持,您可以:
- 要点:使用 redhat-support-tool 命令行选项、红帽门户网站 UI 或几种 FTP 方法开一个服务请求。
- 列表:使用 redhat-support-tool 命令行选项、红帽门户网站 UI 或几种 FTP 方法开一个服务请求。 要报告问题并请求支持,请参阅创建支持问题单。
- 列表:要报告问题并请求支持,请参阅创建支持问题单。
- 列表:提交服务请求时上传 SOS 报告以及日志文件。 这样可保证红帽支持工程师可以参考所需的全部诊断信息。 有关 SOS 报告的更多信息,请参阅红帽知识库解决方案 什么是 SOS 报告以及如何在 Red Hat Enterprise Linux 中创建它? 有关附加日志文件的详情,请查看红帽知识库解决方案 如何向红帽支持提供文件?
- 列表:有关 SOS 报告的更多信息,请参阅红帽知识库解决方案 什么是 SOS 报告以及如何在 Red Hat Enterprise Linux 中创建它?
- 列表:有关附加日志文件的详情,请查看红帽知识库解决方案 如何向红帽支持提供文件?
第 22 章 创建嵌套虚拟机
- 要点:如果您需要与本地主机运行的不同的主机操作系统,您可以使用嵌套虚拟机(VM)。这消除了对其他物理硬件的需求。
- 注意:警告 在大多数环境中,嵌套虚拟化仅在 RHEL 10 中作为技术预览提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
22.1. 什么是嵌套虚拟化?
- 要点:通过嵌套虚拟化,您可以在其他虚拟机中运行虚拟机(VM)。在物理主机上运行的标准虚拟机也可以充当第二个 hypervisor,并创建自己的虚拟机。
- 要点:嵌套虚拟化术语
- 列表:在受限环境中调试虚拟机监控程序
- 列表:在有限的物理资源中测试较大的虚拟部署
- 列表:对嵌套虚拟化的支持限制
- 注意:警告 在大多数环境中,嵌套虚拟化仅在 RHEL 10 中作为技术预览提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
22.2. 对嵌套虚拟化的支持限制
- 要点:在大多数环境中,嵌套虚拟化仅在 RHEL 10 中作为技术预览提供。
- 要点:但是,您可以使用具有用于 Linux (WSL2)的 Windows 子系统的 Windows 虚拟机(VM),来在 Windows 虚拟机内创建虚拟 Linux 环境。在特定条件下,RHEL 10 完全支持这个用例。
- 列表:在 Intel 上创建嵌套虚拟机
- 列表:在 AMD 上创建嵌套虚拟机
- 列表:在 IBM Z 上创建嵌套的虚拟机
- 列表:目前,红帽仅在 RHEL-KVM 上测试了嵌套。当 RHEL 被用作 L0 hypervisor 时,您可以使用 RHEL 或 Windows 作为 L1 hypervisor。
- 列表:当在非 KVM L0 hypervisor(如 VMware ESXi 或 Amazon Web Services (AWS))上使用 L1 RHEL 虚拟机时,在 RHEL 客户机操作系统中创建 L2 虚拟机还没有被测试,且可能无法正常工作。
- 列表:使用 L2 虚拟机作为 hypervisor,并创建 L3 客户机尚未被正确测试,预计无法正常工作。
- 命令/配置摘录:
# modprobe kvm hpage=1 nested=1 modprobe: ERROR: could not insert 'kvm': Invalid argument # dmesg |tail -1 [90226.508366] kvm-s390: A KVM host that supports nesting cannot back its KVM guests with huge pages- 注意:重要 L0 主机必须是 Intel 或 AMD 系统。目前不支持其他架构,如 ARM 或 IBM Z。
- 注意:重要 L0 主机必须是 Intel、AMD 或 IBM Z 系统。嵌套虚拟化目前无法在其他架构上工作,如 ARM。
- 表格样本(共 3 行):
- 在 L0 主机上 : | 在 L1 虚拟机上 :
- RHEL 10.0 及更新的版本 | 使用 WSL2 的 Windows Server 2019 及更新的版本
- 使用 WSL2 的 Windows 10 及更新的版本
22.3. 在 Intel 上创建嵌套虚拟机
- 要点:按照以下步骤在 Intel 主机中启用和配置嵌套虚拟化。
- 要点:先决条件
- 列表:运行 L1 虚拟机(VM)的 L0 RHEL 10 主机。
- 列表:管理程序 CPU 必须支持嵌套虚拟化。若要验证,可在 L0 hypervisor 上使用 cat /proc/cpuinfo 命令。如果命令的输出中包含 vmx 和 ept 标志,则可以创建 L2 虚拟机。这通常是 Intel Xeon v3 内核及更新版本上的情况。
- 列表:确定在 L0 主机上启用了嵌套虚拟化: # cat /sys/module/kvm_intel/parameters/nested 如果命令返回 1 或 Y,则表示启用了该特性。跳过剩余的先决条件步骤,并继续执行流程部分。 如果该命令返回 0 或者 N,而您的系统支持嵌套虚拟化,则使用以下步骤启用该功能。 卸载 kvm_intel 模块: # modprobe -r kvm_intel 激活嵌套功能: # modprobe kvm_intel nested=1 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,请在 /etc/modprobe.d/kvm.conf 文件中添加以下行: options kvm_i…
- 列表:如果命令返回 1 或 Y,则表示启用了该特性。跳过剩余的先决条件步骤,并继续执行流程部分。
- 列表:如果该命令返回 0 或者 N,而您的系统支持嵌套虚拟化,则使用以下步骤启用该功能。 卸载 kvm_intel 模块: # modprobe -r kvm_intel 激活嵌套功能: # modprobe kvm_intel nested=1 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,请在 /etc/modprobe.d/kvm.conf 文件中添加以下行: options kvm_intel nested=1
- 列表:卸载 kvm_intel 模块: # modprobe -r kvm_intel
- 命令/配置摘录:
# cat /sys/module/kvm_intel/parameters/nested
# modprobe -r kvm_intel- 注意:警告 在大多数环境中,嵌套虚拟化仅在 RHEL 10 中作为技术预览提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
22.4. 在 AMD 上创建嵌套虚拟机
- 要点:按照以下步骤在 AMD 主机中启用和配置嵌套虚拟化。
- 要点:先决条件
- 列表:运行 L1 虚拟机(VM)的 L0 RHEL 10 主机。
- 列表:管理程序 CPU 必须支持嵌套虚拟化。若要验证,可在 L0 hypervisor 上使用 cat /proc/cpuinfo 命令。如果命令的输出中包含 svm 和npt 标志,则可以创建 L2 虚拟机。这通常是 AMD EPYC 内核及更新版本上的情况。
- 列表:确定在 L0 主机上启用了嵌套虚拟化: # cat /sys/module/kvm_amd/parameters/nested 如果命令返回 1 或 Y,则表示启用了该特性。跳过剩余的先决条件步骤,并继续执行流程部分。 如果命令返回 0 或 N,请使用以下步骤启用该功能。 在 L0 主机上停止所有运行的虚拟机。 卸载 kvm_amd 模块: # modprobe -r kvm_amd 激活嵌套功能: # modprobe kvm_amd nested=1 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,请在 /etc/modprobe.d/kvm.conf 文件中添加以下内容: options kvm_amd…
- 列表:如果命令返回 1 或 Y,则表示启用了该特性。跳过剩余的先决条件步骤,并继续执行流程部分。
- 列表:如果命令返回 0 或 N,请使用以下步骤启用该功能。 在 L0 主机上停止所有运行的虚拟机。 卸载 kvm_amd 模块: # modprobe -r kvm_amd 激活嵌套功能: # modprobe kvm_amd nested=1 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,请在 /etc/modprobe.d/kvm.conf 文件中添加以下内容: options kvm_amd nested=1
- 列表:在 L0 主机上停止所有运行的虚拟机。
- 命令/配置摘录:
# cat /sys/module/kvm_amd/parameters/nested
# modprobe -r kvm_amd- 注意:警告 在大多数环境中,嵌套虚拟化仅在 RHEL 10 中作为技术预览提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
22.5. 在 IBM Z 上创建嵌套的虚拟机
- 要点:按照以下步骤在 IBM Z 主机中启用和配置嵌套虚拟化。
- 要点:先决条件
- 列表:运行 L1 虚拟机(VM)的 L0 RHEL 10 主机。
- 列表:管理程序 CPU 必须支持嵌套虚拟化。若要验证确实是这种情况,请在 L0 hypervisor上使用 cat /proc/cpuinfo 命令。如果命令的输出中包含 sie 标志,则可以创建 L2 虚拟机。
- 列表:确定在 L0 主机上启用了嵌套虚拟化: # cat /sys/module/kvm/parameters/nested 如果命令返回 1 或 Y,则表示启用了该特性。跳过剩余的先决条件步骤,并继续执行流程部分。 如果命令返回 0 或 N,请使用以下步骤启用该功能。 在 L0 主机上停止所有运行的虚拟机。 卸载 kvm 模块: # modprobe -r kvm 激活嵌套功能: # modprobe kvm nested=1 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,请在 /etc/modprobe.d/kvm.conf 文件中添加以下行: options kvm nested=1
- 列表:如果命令返回 1 或 Y,则表示启用了该特性。跳过剩余的先决条件步骤,并继续执行流程部分。
- 列表:如果命令返回 0 或 N,请使用以下步骤启用该功能。 在 L0 主机上停止所有运行的虚拟机。 卸载 kvm 模块: # modprobe -r kvm 激活嵌套功能: # modprobe kvm nested=1 现在启用嵌套功能,但只有在下次重启 L0 主机时才启用。要永久启用它,请在 /etc/modprobe.d/kvm.conf 文件中添加以下行: options kvm nested=1
- 列表:在 L0 主机上停止所有运行的虚拟机。
- 命令/配置摘录:
# cat /sys/module/kvm/parameters/nested
# modprobe -r kvm- 注意:注意 IBM Z 没有真正提供裸机 L0 主机。相反,用户系统是在逻辑分区(LPAR)上建立的,它已经是一个虚拟化系统,因此通常被称为 L1。但是,为了更好地与本指南中的其他架构保持一致,以下步骤参考 IBM Z,就像其提供 L0 主机一样。 要了解更多有关嵌套虚拟化的信息,请参阅: 什么是嵌套虚拟化?
- 注意:警告 在大多数环境中,嵌套虚拟化仅在 RHEL 10 中作为技术预览提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
第 23 章 RHEL 10 虚拟化的功能支持和限制
- 要点:本文档提供有关 Red Hat Enterprise Linux 10 (RHEL 10)虚拟化中的功能支持和限制的信息。
23.1. RHEL 虚拟化支持如何工作
- 要点:一组支持限制适用于 Red Hat Enterprise Linux 10 (RHEL 10)的虚拟化。这意味着,当您在 RHEL 10 中使用虚拟机时,当您使用某些功能或超过分配资源的一定数量时,红帽只会对这些客户机提供有限的支持,除非您有特定的订阅计划。
- 要点:RHEL 10 虚拟化中推荐功能中列出的功能 已被红帽测试并认证,以便与 RHEL 10 系统上的 KVM 管理程序一起工作。因此,它们被完全支持,推荐在 RHEL 10 的虚拟化中使用。
- 注意:重要 这些限制不适用于红帽提供的其他虚拟化解决方案,如 OpenShift Virtualization 或 Red Hat OpenStack Platform (RHOSP)。
23.2. RHEL 10 虚拟化中推荐的功能
- 要点:建议与 Red Hat Enterprise Linux 10 (RHEL 10)中包含的 KVM 管理程序一起使用以下功能:
- 要点:主机系统构架
- 列表:AMD64 和 Intel 64
- 列表:当使用 --os-variant 选项时,virt-install 会自动选择主机 CPU 推荐的和客户机操作系统支持的机器类型。
- 列表:如果不使用 --os-variant 或需要其他机器类型,请使用 --machine 选项来明确指定机器类型。
- 列表:如果您指定了一个不受支持或与主机不兼容的 --machine 值,virt-install 将会失败,并显示一条错误信息。
- 列表:RHEL 10 虚拟化不支持的功能
- 列表:RHEL 10 虚拟化中的资源分配限制
- 命令/配置摘录:
# virsh dumpxml VM-name | grep machine=
# /usr/libexec/qemu-kvm -M help- 注意:重要 在 RHEL 10 中,pc-i440fx-rhel7.6.0 和更早的机器类型(在以前的 RHEL 主版本中是默认的)不再被支持。因此,在 RHEL 10 主机上尝试启动此类机器类型的虚拟机会失败,并显示 不被支持的配置错误。如果您在将主机升级到 RHEL 10 后遇到这个问题,请参阅红帽知识库解决方案 Invalid 用于 RHEL 9 及更新版本的 hypervisor 的虚拟机。
- 表格样本(共 2 行):
- 架构 | 推荐的机器类型 | 机器类型值
- Intel 64 和 AMD64 (x86_64) | pc-q35-rhel10.Y.0 | --machine=q35
23.3. RHEL 10 虚拟化不支持的功能
- 要点:Red Hat Enterprise Linux 10 (RHEL 10)中的 KVM hypervisor 不支持以下功能:
- 要点:主机系统构架
- 列表:Windows 8.1 及更早版本
- 列表:Windows Server 2012 R2 及更早版本
- 列表:macOS
- 列表:用于 x86 系统的 Solaris
- 列表:2009 年前发布的任何操作系统
- 列表:virsh iface-* 命令,如 virsh iface-start 和 virsh iface-destroy
- 命令/配置摘录:
<domain type='qemu'>
<domain type='kvm'>- 注意:重要 这些限制可能不适用于红帽提供的其他虚拟化解决方案,如 OpenShift Virtualization 或 Red Hat OpenStack Platform (RHOSP)。 其他虚拟化解决方案支持的功能如下所述。 有关相应虚拟化解决方案的支持详情,请查看相关文档。
23.4. RHEL 10 虚拟化中的资源分配限制
- 要点:以下限制适用于可分配给 Red Hat Enterprise Linux 10 (RHEL 10)主机上的单个 KVM 虚拟机(VM)的虚拟化资源。如果 VM 超过这些限制,则红帽被视为一个 技术预览。
- 要点:每个虚拟机的最大 vCPU
- 注意:重要 这些限制不适用于红帽提供的其他虚拟化解决方案,如 OpenShift Virtualization 或 Red Hat OpenStack Platform (RHOSP)。
完整目录
- 设置主机、创建和管理虚拟机并了解虚拟化功能
- 对红帽文档提供反馈
- 第 1 章 RHEL 中虚拟化的基本概念
- 1.1. 什么是虚拟化?
- 1.2. 虚拟化的优点
- 1.3. 虚拟机组件及其交互
- 1.4. 用于虚拟化管理的工具和界面
- 1.5. 用于虚拟化的用户空间连接类型
- 1.6. 红帽虚拟化解决方案
- 第 2 章 准备 RHEL 来托管虚拟机
- 2.1. 准备 AMD64 或 Intel 64 系统以托管虚拟机
- 2.2. 在虚拟机上启用 QEMU 客户机代理功能
- 2.2.1. 在 Windows 客户机上启用 QEMU 客户机代理
- 2.2.2. 需要 QEMU 客户机代理的虚拟化功能
- 2.3. 设置 web 控制台以管理虚拟机
- 第 3 章 创建虚拟机
- 3.1. 使用命令行创建虚拟机
- 3.2. 使用 web 控制台创建虚拟机
- 3.2.1. 使用 web 控制台创建新虚拟机
- 3.2.2. 使用 web 控制台导入磁盘镜像来创建虚拟机
- 3.2.3. 使用 web 控制台,使用云镜像身份验证创建虚拟机
- 3.3. 创建 Windows 虚拟机
- 第 4 章 优化 Windows 虚拟机
- 4.1. 为 Windows 虚拟机安装 KVM 半虚拟驱动程序
- 4.1.1. Windows virtio 驱动程序如何工作
- 4.1.2. 在主机中准备 virtio 驱动程序安装介质
- 4.1.3. 在 Windows 客户端中安装 virtio 驱动程序
- 4.1.4. 更新 Windows 客户机上的 virtio 驱动程序
- 4.2. 启用 Hyper-V enlightenments
- 4.2.1. 在 Windows 虚拟机上启用 Hyper-V enlightenments
- 4.2.2. 可配置 Hyper-V enlightenments
- 4.3. 配置 NetKVM 驱动程序参数
- 4.4. NetKVM 驱动程序参数
- 4.5. 在 Windows 虚拟机中优化后台进程
- 4.1. 为 Windows 虚拟机安装 KVM 半虚拟驱动程序
- 第 5 章 启动虚拟机
- 5.1. 使用命令行启动虚拟机
- 5.2. 使用 web 控制台启动虚拟机
- 5.3. 当主机启动时自动启动虚拟机
- 第 6 章 将虚拟机转换为 Q35 机器类型
- 第 7 章 连接至虚拟机
- 7.1. 使用 web 控制台连接至虚拟机
- 7.1.1. 在 web 控制台中打开虚拟机图形控制台
- 7.1.2. 在 web 控制台中打开虚拟机串口控制台
- 7.2. 使用命令行打开虚拟机图形控制台
- 7.3. 使用 SSH 连接到虚拟机
- 7.4. 使用命令行打开虚拟机串口控制台
- 7.5. 设置对远程虚拟化主机的更容易访问
- 7.1. 使用 web 控制台连接至虚拟机
- 第 8 章 关闭和重启虚拟机
- 8.1. 使用命令行关闭虚拟机
- 8.2. 使用 web 控制台关闭虚拟机
- 8.3. 使用命令行重启虚拟机
- 8.4. 使用 web 控制台重启虚拟机
- 第 9 章 删除虚拟机
- 9.1. 使用命令行删除虚拟机
- 9.2. 使用 web 控制台删除虚拟机
- 第 10 章 查看有关虚拟机的信息
- 10.1. 使用命令行查看虚拟机信息
- 10.2. 使用 web 控制台查看虚拟机信息
- 10.3. 虚拟机 XML 配置示例
- 第 11 章 克隆虚拟机
- 11.1. 克隆虚拟机的方式
- 11.2. 创建虚拟机模板
- 11.2.1. 使用 virt-sysprep 创建虚拟机模板
- 11.2.2. 手动创建虚拟机模板
- 11.3. 使用命令行克隆虚拟机
- 11.4. 使用 web 控制台克隆虚拟机
- 第 12 章 迁移虚拟机
- 12.1. 迁移虚拟机的工作方式
- 12.2. 迁移虚拟机的好处
- 12.3. 迁移虚拟机的限制
- 12.4. 使用命令行迁移虚拟机
- 12.5. 使用 web 控制台实时迁移虚拟机
- 12.6. 实时迁移附加了 Mellanox 虚拟功能的虚拟机
- 12.7. 使用附加的 NVIDIA vGPU 实时迁移虚拟机
- 12.8. 将虚拟机磁盘镜像与其他主机共享
- 12.9. 验证虚拟机迁移的主机 CPU 兼容性
- 12.10. 虚拟机迁移支持的主机
- 第 13 章 为虚拟机管理存储
- 13.1. 将存储附加到虚拟机的可用方法
- 13.2. 使用 web 控制台查看虚拟机存储信息
- 13.3. 使用命令行查看虚拟机存储信息
- 13.4. 将存储附加到虚拟机
- 13.4.1. 使用命令行将基于文件的虚拟磁盘附加到虚拟机
- 13.4.2. 使用 web 控制台将基于文件的虚拟磁盘附加到虚拟机
- 13.4.3. 使用命令行将基于磁盘的存储附加到虚拟机
- 13.4.4. 使用 web 控制台将基于磁盘的存储附加到虚拟机
- 13.4.5. 使用命令行将基于 LVM 的存储附加到虚拟机
- 13.4.6. 使用 web 控制台将基于 LVM 的存储附加到虚拟机
- 13.4.7. 使用命令行将基于 NFS 的存储附加到虚拟机
- 13.4.8. 使用 web 控制台将基于 NFS 的存储附加到虚拟机
- 13.5. 检查虚拟磁盘的一致性
- 13.6. 调整虚拟磁盘大小
- 13.7. 在虚拟磁盘格式间转换
- 13.8. 使用命令行删除虚拟机存储
- 13.9. 使用 web 控制台删除虚拟机存储
- 13.10. 支持的磁盘镜像格式
- 第 14 章 使用快照保存和恢复虚拟机状态
- 14.1. 对虚拟机快照的支持限制
- 14.2. 使用命令行创建虚拟机快照
- 14.3. 使用 web 控制台创建虚拟机快照
- 14.4. 使用命令行还原到虚拟机快照
- 14.5. 使用 web 控制台恢复到虚拟机快照
- 14.6. 使用命令行删除虚拟机快照
- 14.7. 使用 web 控制台删除虚拟机快照
- 第 15 章 将主机设备附加到虚拟机
- 15.1. 虚拟设备的工作原理
- 15.2. 虚拟设备类型
- 15.3. 使用命令行将 USB 设备附加到虚拟机
- 15.4. 使用命令行将 PCI 设备附加到虚拟机
- 15.5. 使用 web 控制台将主机设备附加到虚拟机
- 15.6. 使用命令行从虚拟机中删除 USB 设备
- 15.7. 使用命令行从虚拟机中删除 PCI 设备
- 15.8. 使用 web 控制台从虚拟机中删除主机设备
- 15.9. 将 ISO 镜像附加到虚拟机
- 15.9.1. 使用命令行将 ISO 镜像附加到虚拟机
- 15.9.2. 使用虚拟光驱替换 ISO 镜像
- 15.9.3. 使用命令行从虚拟机中删除 ISO 镜像
- 15.10. 使用 web 控制台将 watchdog 设备附加到虚拟机
- 第 16 章 配置虚拟机网络连接
- 16.1. 了解虚拟网络
- 16.1.1. 虚拟网络的工作方式
- 16.1.2. 虚拟机网络的默认配置
- 16.2. 虚拟机的网络连接类型
- 16.2.1. 使用网络地址转换进行虚拟联网
- 16.2.2. 路由模式中的虚拟网络
- 16.2.3. 网桥模式中的虚拟网络
- 16.2.4. 隔离模式中的虚拟网络
- 16.2.5. 开放模式中的虚拟网络
- 16.2.6. 虚拟机连接类型的比较
- 16.3. 配置外部可见虚拟机
- 16.3.1. 使用命令行配置外部可见的虚拟机
- 16.3.2. 使用 web 控制台配置外部可见的虚拟机
- 16.3.3. 替换 macvtap 连接
- 16.4. 使用 web 控制台管理虚拟机网络接口
- 16.4.1. 在 web 控制台中查看和编辑虚拟网络接口信息
- 16.4.2. 在 web 控制台中添加和连接虚拟网络接口
- 16.4.3. 在 web 控制台中断开连接和删除虚拟网络接口
- 16.5. 管理 SR-IOV 网络设备
- 16.5.1. 什么是 SR-IOV?
- 16.5.2. 将 SR-IOV 网络设备附加到虚拟机
- 16.5.3. SR-IOV 分配支持的设备
- 16.6. 从 PXE 服务器启动虚拟机
- 16.6.1. 在虚拟网络中设置 PXE 引导服务器
- 16.6.2. 使用 PXE 和虚拟网络引导虚拟机
- 16.6.3. 使用 PXE 和桥接网络启动虚拟机
- 16.7. 在网络绑定上配置网桥,以将虚拟机与网络连接
- 16.7.1. 使用 nmcli 在网络绑定上配置网络接口
- 16.7.2. 使用 nmcli 为网络绑定配置网桥
- 16.7.3. 使用现有绑定接口在 libvirt 中创建一个虚拟网络
- 16.7.4. 将虚拟机配置为使用绑定接口
- 16.8. 配置 passt 用户空间连接
- 16.9. 其他资源
- 16.1. 了解虚拟网络
- 第 17 章 在虚拟机中管理 GPU 设备
- 17.1. 为虚拟机分配 GPU
- 17.2. 管理 NVIDIA vGPU 设备
- 17.2.1. 设置 NVIDIA vGPU 设备
- 17.2.2. 删除 NVIDIA vGPU 设备
- 17.2.3. 获取有关您系统的 NVIDIA vGPU 信息
- 17.2.4. 用于 NVIDIA vGPU 的远程桌面流服务
- 17.2.5. 其他资源
- 第 18 章 优化虚拟机性能
- 18.1. 影响虚拟机性能的因素
- 18.2. 使用 TuneD 优化虚拟机性能
- 18.3. 对特定工作负载优化虚拟机性能
- 18.4. 配置虚拟机内存
- 18.4.1. 内存过量使用
- 18.4.2. 使用 virtio-mem 添加和删除虚拟机内存
- 18.4.3. 使用 web 控制台添加和删除虚拟机内存
- 18.4.4. 使用命令行添加和删除虚拟机内存
- 18.4.5. 配置虚拟机以使用巨页
- 18.4.6. 其他资源
- 18.5. 优化虚拟机 I/O 性能
- 18.5.1. 在虚拟机中调整块 I/O
- 18.5.2. 虚拟机中的磁盘 I/O 节流
- 18.5.3. 在存储设备上启用多队列
- 18.5.4. 配置专用的 IOThreads
- 18.5.5. 配置虚拟磁盘缓存
- 18.6. 优化虚拟机 CPU 性能
- 18.6.1. vCPU 过量使用
- 18.6.2. 使用命令行添加和删除虚拟 CPU
- 18.6.3. 使用 Web 控制台管理虚拟 CPU
- 18.6.4. 在虚拟机中配置 NUMA
- 18.6.5. 配置虚拟 CPU 固定
- 18.6.6. 配置虚拟 CPU 上限
- 18.6.7. 调整 CPU 权重
- 18.6.8. 启用和禁用内核相同页合并
- 18.7. 优化虚拟机网络性能
- 18.8. 虚拟机性能监控工具
- 第 19 章 保护虚拟机
- 19.1. 虚拟机中的安全性是如何工作的
- 19.2. 保护虚拟机的最佳实践
- 19.3. 虚拟机安全性的默认功能
- 19.4. 在 Windows 虚拟机中启用标准硬件安全性
- 19.5. 在 Windows 虚拟机上启用增强的硬件安全
- 19.6. 创建 SecureBoot 虚拟机
- 19.7. 限制虚拟机用户可以使用哪些操作
- 19.8. 配置 VNC 密码
- 19.9. 用于虚拟化的 SELinux 布尔值
- 第 20 章 在主机及其虚拟机间共享文件
- 20.1. 使用 virtiofs 在主机及其虚拟机之间共享文件
- 20.1.1. 使用命令行在主机和 Windows 虚拟机间共享文件
- 20.1. 使用 virtiofs 在主机及其虚拟机之间共享文件
- 第 21 章 诊断虚拟机问题
- 21.1. 生成 libvirt 调试日志
- 21.1.1. 了解 libvirt 调试日志
- 21.1.2. 永久启用 libvirt 调试日志
- 21.1.3. 在运行时启用 libvirt 调试日志
- 21.1.4. 将 libvirt 调试日志附加到支持请求中
- 21.2. 转储虚拟机内核
- 21.2.1. 虚拟机内核转储的工作原理
- 21.2.2. 创建虚拟机内核转储文件
- 21.3. 回溯虚拟机进程
- 21.4. 用于报告虚拟机问题并提供日志的其他资源
- 21.1. 生成 libvirt 调试日志
- 第 22 章 创建嵌套虚拟机
- 22.1. 什么是嵌套虚拟化?
- 22.2. 对嵌套虚拟化的支持限制
- 22.3. 在 Intel 上创建嵌套虚拟机
- 22.4. 在 AMD 上创建嵌套虚拟机
- 22.5. 在 IBM Z 上创建嵌套的虚拟机
- 第 23 章 RHEL 10 虚拟化的功能支持和限制
- 23.1. RHEL 虚拟化支持如何工作
- 23.2. RHEL 10 虚拟化中推荐的功能
- 23.3. RHEL 10 虚拟化不支持的功能
- 23.4. RHEL 10 虚拟化中的资源分配限制
