配置和管理 Linux 虚拟机
大约 242 分钟
配置和管理 Linux 虚拟机
来源:官方文档 原始多页入口:配置和管理 Linux 虚拟机 内容规模:约 262,584 字符,232 个章节标题,711 个命令/代码块,117 条提示框
阅读提要
- 副标题:配置主机、创建和管理虚拟机并了解虚拟化功能
- 摘要:Red Hat Enterprise Linux (RHEL)的虚拟化功能允许您配置主机来运行虚拟机(VM)。使用虚拟机,您可以在本地主机上使用不同的操作系统,并拥有独立的计算环境。
- 主要章节:配置主机、创建和管理虚拟机并了解虚拟化功能;对红帽文档提供反馈;第 1 章 RHEL 中虚拟化的基本概念;第 2 章 准备 RHEL 来托管虚拟机;第 3 章 创建虚拟机;第 4 章 启动虚拟机;第 5 章 将虚拟机转换为 Q35 机器类型;第 6 章 连接到虚拟机;第 7 章 关闭并重启虚拟机;第 8 章 删除虚拟机;第 9 章 查看有关虚拟机的信息;第 10 章 克隆虚拟机;第 11 章 迁移虚拟机;第 12 章 为虚拟机管理存储;第 13 章 使用快照保存和恢复虚拟机状态
- 推荐阅读顺序:先看目录定位主题,再按章节查看关键点、命令和注意事项;超大清单类章节只保留样例与统计。
章节笔记
概览
- 该章节主要为下一级主题的入口。
配置主机、创建和管理虚拟机并了解虚拟化功能
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 RHEL 中虚拟化的基本概念
- 要点:您可以使用 RHEL 10 系统 作为虚拟化主机。这意味着在 RHEL 10 中,您可以使用自己的操作系统 创建虚拟机。
- 要点:有关红帽提供的功能、其优点、组件和其他可能的虚拟化解决方案的详情,请查看以下部分。
1.1. 什么是虚拟化?
- 要点:通过使用 虚拟化,您的 RHEL 10 系统 可以托管 多个虚拟机 (VM),也称为 客户机。VM 使用主机的物理硬件和计算资源,在主机操作系统中作为用户空间进程运行一个独立的虚拟操作系统(客户机操作系统)。
- 要点:因此,您可以使用虚拟化在操作系统内拥有操作系统。
- 列表:安全测试软件配置和功能
- 列表:运行传统软件
- 列表:优化硬件的工作负载效率。
- 列表:Virtualization 主题页面
- 列表:虚拟化的优点
- 列表:红帽虚拟化解决方案
1.2. 虚拟化的优点
- 要点:与使用物理机器相比,使用虚拟机(VM)有以下优点。
- 要点:灵活精细的资源分配
- 列表:灵活精细的资源分配 一个虚拟机在主机机器(通常是物理机器)上运行,主机的硬件也可以分配给客户机操作系统使用。但是,物理资源分配是在软件级别上完成的,因此非常灵活。虚拟机使用的主机内存、CPU 或存储空间的比例是可以配置的,可以指定非常精细的资源请求。 例如:客户机操作系统的磁盘可以在主机的文件系统中以一个文件代表,且该磁盘的大小限制比物理磁盘的限制要小。
- 列表:软件控制的配置 虚拟机的整个配置都作为数据保存在主机上,并由软件控制。因此,虚拟机可轻松创建、删除、克隆、迁移、远程操作或连接到远程存储。 另外,虚拟机的当前状态可以随时备份为快照。然后可以加载快照,将系统恢复到保存的状态。
- 列表:与主机分离 在虚拟内核中运行的客户机操作系统与主机操作系统分开。这意味着可在虚拟机中安装任何操作系统,即使虚拟机操作系统不稳定或受损,主机也不会受到任何影响。
- 列表:空间及成本效率 单个物理机器可以托管大量虚拟机。因此,无需多个物理机器执行同样的任务,因此降低了与物理硬件关联的空间、电源和维护的要求。
- 列表:软件兼容性 因为虚拟机可以使用不同于其主机的操作系统,所以通过虚拟化,可以运行最初没有为主机操作系统发布的应用程序。例如,使用 RHEL 8 客户机操作系统,您可以在 RHEL 10 主机系统上运行为 RHEL 8 发布的应用程序。
- 列表:RHEL 10 虚拟化中支持的客户机操作系统
1.3. 虚拟机组件及其交互
- 要点:RHEL 虚拟化使用 KVM、QEMU 和 libvirt 作为其核心组件。它们与 XML 配置文件一起置备虚拟硬件并作为主机上的用户空间进程管理虚拟机(VM)。
- 要点:RHEL 10 中的虚拟化由以下主要软件组件组成:
- 列表:元数据,如虚拟机名称、时区和其他有关虚拟机的信息。
- 列表:对虚拟机中的设备的描述,包括虚拟 CPU(vCPUS)、存储设备、输入/输出设备、网络接口卡及其他真实和虚拟硬件。
- 列表:虚拟机设置,如可以使用的最大内存量、重启设置和其他有关虚拟机行为的设置。
- 列表:虚拟机 XML 配置示例
- 列表:用于虚拟化管理的工具和界面
- 注意:注意 QEMU 是架构的一个基本组件,但并并不应直接在 RHEL 10 系统中使用,因为安全问题。因此,红帽不支持 qemu requirements 命令,强烈建议您使用 libvirt 与 QEMU 交互。
1.4. 用于虚拟化管理的工具和界面
- 要点:您可以使用命令行(CLI)或 Web 控制台图形用户界面(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 设备。您仅限于用户模式(passt)网络,且无法配置虚拟机的完整外部可见性。
- 列表:PCI 设备直通 - 为虚拟机修改 PCI 主机硬件的设备分配是不可能的。
- 列表:Autostart - 会话 连接中的虚拟机无法在系统引导时自动启动。
- 列表:系统级存储池和虚拟机日志 - 在 系统 连接中,存储池和虚拟机日志文件保存在系统目录中,如 /etc/libvirt 和 /var/lib/libvirt。在 会话 连接中,用户仅限于保存在其 主 目录中的文件。这可防止集中管理主机范围的存储或查看日志。
- 注意:重要 除非另有明确说明,否则本文档中的信息假定您有 root 特权,并可使用 libvirt 的系统连接。
1.6. 红帽虚拟化解决方案
- 要点:除了 RHEL 外,红帽还提供可用于托管虚拟机的其他产品。这些产品基于 RHEL 10 虚拟化功能构建,并扩展了 RHEL 10 中提供的 KVM 虚拟化功能。
- 要点:许多 RHEL 10 虚拟化的限制 不适用于这些产品。
第 2 章 准备 RHEL 来托管虚拟机
- 要点:要在 RHEL 10 中使用虚拟化,您必须安装虚拟化软件包,并确保您的系统被配置为托管虚拟机(VM)。具体步骤根据您的 CPU 架构而有所不同。
2.1. 准备一个 AMD64 或 Intel 64 系统来托管虚拟机
- 要点:在运行 RHEL 10 的 AMD64 或 Intel 64 系统中创建虚拟机前,您必须首先在系统中配置 KVM 管理程序。
- 要点:先决条件
- 列表:在您的主机上已安装并注册了 Red Hat Enterprise Linux 10。具体步骤请查看 RHEL 安装指南。
- 列表:有以下最小系统资源可用: 主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。 主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。
- 列表:主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。
- 列表:主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。
- 列表:安装虚拟化 hypervisor 软件包。 [ dnf install qemu-kvm libvirt virt-install virt-viewer
- 列表:启动虚拟化服务: 在 qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
- 命令/配置摘录:
# virt-host-validate
QEMU: Checking for device assignment IOMMU support : PASS QEMU: Checking if IOMMU is enabled by kernel : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments) LXC: Checking for Linux >= 2.6.26 : PASS [...] LXC: Checking for cgroup 'blkio' controller mount-point : PASS LXC: Checking if device /sys/fs/fuse/connections exists : FAIL (Load the 'fuse' module to enable /proc/ overrides)2.2. 准备一个 IBM Z 系统来托管虚拟机
- 要点:在运行 RHEL 10 的 IBM Z 系统中创建虚拟机前,您必须首先在系统中配置 KVM 管理程序。
- 要点:先决条件
- 列表:在您的主机上已安装并注册了 Red Hat Enterprise Linux 10。具体步骤请查看 RHEL 安装指南。
- 列表:有以下最小系统资源可用: 主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。 主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。 主机上有 4 个 CPU。虚拟机通常可以使用单个分配的 vCPU 运行,但红帽建议为每个虚拟机分配 2 个或更多 vCPU,以避免虚拟机在高负载期间变得无响应。
- 列表:主机有 6 GB 可用磁盘空间,以及每个预期的虚拟机需要额外 6 GB 空间。
- 列表:主机需要 2 GB RAM,以及每个预期的虚拟机需要额外 2 GB。
- 列表:主机上有 4 个 CPU。虚拟机通常可以使用单个分配的 vCPU 运行,但红帽建议为每个虚拟机分配 2 个或更多 vCPU,以避免虚拟机在高负载期间变得无响应。
- 列表:您的 IBM Z 主机系统使用 IBM z14 CPU 或更高级的 CPU 。
- 命令/配置摘录:
# grep sie /proc/cpuinfo features : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te sie
# dnf install qemu-kvm libvirt virt-install2.3. 准备一个 ARM 64 系统来托管虚拟机
- 要点:在运行 RHEL 10 的 64 位系统(也称为 ARM 64 或 AArch64)中创建虚拟机前,您必须首先在系统中配置 KVM 管理程序。
- 要点:先决条件
- 列表:在您的主机上已安装并注册了 Red Hat Enterprise Linux 10。具体步骤请查看 RHEL 安装指南。
- 列表:有以下最小系统资源可用: 6 GB 的可用磁盘空间用于主机,以及每个预期的客户机都需要额外 6 GB 空间。 主机需要 4 GB RAM,以及每个预期的客户机都需要 4 GB。
- 列表:6 GB 的可用磁盘空间用于主机,以及每个预期的客户机都需要额外 6 GB 空间。
- 列表:主机需要 4 GB RAM,以及每个预期的客户机都需要 4 GB。
- 列表:安装虚拟化软件包: # dnf install qemu-kvm libvirt virt-install
- 列表:启动虚拟化服务: # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
- 命令/配置摘录:
# dnf install qemu-kvm libvirt virt-install
# for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done2.4. 配置 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-machines2.5. 配置对远程虚拟化主机更容易的访问
- 要点:当使用命令行中的 libvirt 工具管理远程主机系统中的虚拟机时,您可以简化连接到远程主机的过程。
- 要点:默认情况下,要连接到远程主机上的虚拟机,您必须使用 -c qemu+ssh://root@hostname/system 语法。例如,要在 192.0.2.1 主机上以 root 用户身份使用 virsh list 命令:
- 列表:虚拟化已在您的主机系统上启用。具体步骤请参阅 准备 RHEL 来托管虚拟机。
- 列表:编辑本地主机中的 ~/.ssh/config 文件并添加类似如下的条目: Host <host-alias> User root Hostname 192.0.2.1 在本例中,& lt;host-alias > 是与 root@192.0.2.1 远程主机连接关联的短名称。
- 列表:编辑 /etc/libvirt/libvirt.conf 文件并添加类似如下的行: uri_aliases = [ "<qemu-alias>=qemu+ssh://<host-alias>/system", ] 在本例中,& lt;qemu-alias > 是 QEMU 和 libvirt 工具将用于 qemu+ssh://192.0.2.1/system 连接的主机别名。
- 列表:可选:如果您要在单一远程主机中只使用 libvirt 工具,您也可以为基于 libvirt的实用程序设置特定的连接作为默认目标。 编辑 /etc/libvirt/libvirt.conf 文件,并将 uri_default 参数的值设置为 < qemu-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 = "<qemu-alia…
- 列表:可选: 要在连接到远程主机时避免提供 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- 注意:警告 如果您还想管理本地主机或不同远程主机上的虚拟机,则无法执行此操作。
第 3 章 创建虚拟机
- 要点:要在 RHEL 10 中创建虚拟机(VM),您可以使用命令行或 RHEL 10 web 控制台。
3.1. 使用命令行创建虚拟机
- 要点:要在 RHEL 10 主机上创建虚拟机(VM),您可以使用 virt-install 工具。
- 要点:先决条件
- 列表:虚拟化已在您的主机系统上启用。具体步骤请参阅 准备 RHEL 来托管虚拟机。
- 列表:您有足够的系统资源来分配给虚拟机,如磁盘空间、RAM 或 CPU。根据虚拟机的预期任务和工作负载,推荐的值可能会有很大不同。
- 列表:操作系统(OS)安装源可存在于本地或者网络中。可以是以下之一: 安装介质的 ISO 镜像 现有虚拟机的磁盘镜像。此类磁盘镜像也可以从 bootc 容器创建。具体步骤请参阅 使用 bootc-image-builder 创建 QEMU 磁盘镜像。 警告 无法在 RHEL 10 中从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装会失败。如需更多信息,请参阅 RHEL 7 或更高版本无法从 CD/DVD-ROM (红帽知识库)安装客户机操作系统。 另请注意,红帽只对 一组有限的客户机操作系统提供支持。
- 列表:安装介质的 ISO 镜像
- 列表:现有虚拟机的磁盘镜像。此类磁盘镜像也可以从 bootc 容器创建。具体步骤请参阅 使用 bootc-image-builder 创建 QEMU 磁盘镜像。 警告 无法在 RHEL 10 中从主机 CD-ROM 或者 DVD-ROM 设备安装。如果您在使用 RHEL 10 中的任何虚拟机安装方法时选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装会失败。如需更多信息,请参阅 RHEL 7 或更高版本无法从 CD/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 作为安装源,则安装会失败。如需更多信息,请参阅 RHEL 7 或更高版本无法从 CD/DVD-ROM (红帽知识库)安装客户机操作系统。
3.2. 使用 web 控制台创建虚拟机
- 要点:要在 RHEL 10 主机上的 GUI 中创建虚拟机(VM),您可以使用 web 控制台。
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 字段中添加一个离线令牌。
- 注意:注意 如果您不想在创建虚拟机后立即安装操作系统,您可以通过在 Virtual Machines 界面中选择虚拟机,并单击 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. 在虚拟机上启用 QEMU 客户机代理功能
- 要点:要在 RHEL 10 系统上托管的虚拟机(VM)上使用某些功能,您必须首先配置虚拟机,以使用 QEMU 客户机代理(GA)。
3.3.1. 在 Linux 客户机上启用 QEMU 客户机代理
- 要点:要允许 RHEL 主机在 Linux 虚拟机(VM)上 执行某些操作子集,您必须启用 QEMU 客户机代理(GA)。
- 要点:您可以在运行和关闭的虚拟机上启用 QEMU GA。
- 列表:为 QEMU GA 创建一个 XML 配置文件,例如 qemuga.xml : # touch qemuga.xml
- 列表:在文件中添加以下行: <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
- 列表:使用 XML 文件将 QEMU GA 添加导虚拟机的配置中。 如果虚拟机正在运行,请使用以下命令: # virsh attach-device <vm-name> qemuga.xml --live --config 如果虚拟机已关闭,请使用以下命令: # virsh attach-device <vm-name> qemuga.xml --config
- 列表:如果虚拟机正在运行,请使用以下命令: # virsh attach-device <vm-name> qemuga.xml --live --config
- 列表:如果虚拟机已关闭,请使用以下命令: # virsh attach-device <vm-name> qemuga.xml --config
- 列表:在 Linux 客户机操作系统中,安装 QEMU GA: # dnf install qemu-guest-agent
- 命令/配置摘录:
# touch qemuga.xml
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>3.3.2. 需要 QEMU 客户机代理的虚拟化功能
- 要点:如果您在虚拟机(VM)上启用了 QEMU 客户机代理(GA),您可以在主机上使用以下命令来管理虚拟机:
- 要点:冻结处于隔离状态的客户机文件系统。
- 列表:在 Linux 客户机上启用 QEMU 客户机代理
- 命令/配置摘录:
# setsebool virt_qemu_ga_read_nonsecurity_files on
# setsebool virt_qemu_ga_read_nonsecurity_files on- 注意:重要 如果要使用这些命令来管理 Linux 虚拟机,还必须在客户机操作系统中设置以下 SELinux 布尔值: # setsebool virt_qemu_ga_read_nonsecurity_files on
- 注意:重要 如果要使用这个命令管理 Linux 虚拟机,您还必须在客户机操作系统中设置以下 SELinux 布尔值: # setsebool virt_qemu_ga_read_nonsecurity_files on
第 4 章 启动虚拟机
- 要点:要在 RHEL 10 中启动虚拟机(VM),您可以使用命令行界面或 web 控制台 GUI。
4.1. 使用命令行启动虚拟机
- 要点:要启动关闭虚拟机(VM)或恢复保存的虚拟机,您可以使用命令行界面(CLI)。通过使用 CLI,您可以启动本地和远程虚拟机。
- 要点:先决条件
- 列表:您已创建了虚拟机并安装了客户端操作系统。详情请参阅 创建虚拟机。
- 列表:虚拟机已定义且不活跃。
- 列表:您知道虚拟机的名称。
- 列表:对于远程虚拟机: 您有虚拟机所在的主机的 IP 地址。 有对主机的 root 访问权限。
- 列表:您有虚拟机所在的主机的 IP 地址。
- 列表:有对主机的 root 访问权限。
- 命令/配置摘录:
# 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' started4.2. 使用 web 控制台启动虚拟机
- 要点:如果虚拟机(VM) 处于 shut off 状态,您可以使用 RHEL 10 web 控制台启动它。您还可以将虚拟机配置为在主机启动时自动启动。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已创建了虚拟机并安装了客户端操作系统。详情请参阅 创建虚拟机。
- 列表:虚拟机已定义且当前不活跃。
- 列表:您知道虚拟机的名称。
- 列表:Web 控制台 VM 插件已安装在您的系统上。详情请参阅配置 Web 控制台来管理虚拟机。
- 列表:如果虚拟机使用 libvirt 的系统 连接,则您有 root 特权或属于主机上的 libvirt 用户组。详情请查看 虚拟化 的用户空间连接类型。
4.3. 当主机启动时自动启动虚拟机
- 要点:当一个带有运行的虚拟机(VM)的主机重启时,虚拟机将关闭,默认必须手动启动。要确保虚拟机在其主机运行时处于活跃状态,您可以将虚拟机配置为自动启动。
- 要点:先决条件
- 列表:您已创建了虚拟机(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- 注意:注意 以下说明描述了在命令行中配置虚拟机自动启动。有关在 web 控制台中自动启动 虚拟机,请参阅使用 web 控制台启动虚拟机。
- 注意:注意 例如,这些接口包括: NetworkManager 创建的网桥设备 网络配置为使用 <forward mode='bridge'/>
第 5 章 将虚拟机转换为 Q35 机器类型
- 要点:在 RHEL 10 中,i440fx 机器类型已弃用,并将在以后的 RHEL 主版本中删除。因此,红帽建议转换使用 i440fx 的虚拟机(VM)改为使用 q35 机器类型。
- 要点:与 i440fx 相比,使用 q35 计算机类型提供额外的好处,如高级主机控制器接口(AHCI)和虚拟输入输出内存管理单元(vIOMMU)模拟。
- 列表:RHEL 10 主机上的虚拟机使用 i440fx 机器类型。要确认这一点,请使用以下命令: # virsh dumpxml <vm-name> | grep machine i440fx 虚拟机的输出示例: <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。作为源配置,使用您之前创建的备份文件。 # 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>- 注意:重要 更改虚拟机的机器类型与更改物理机上的主板类似。因此,在某些情况下,将虚拟机的机器类型从 i440fx 转换为 q35 可能会导致客户端操作系统的功能出现问题。
第 6 章 连接到虚拟机
- 要点:要在 RHEL 10 中与虚拟机(VM)进行交互,您需要执行以下操作之一来连接它:
- 列表:要在图形用户界面中连接到虚拟机图形显示,请在 RHEL web 控制台中使用 Virtual Machines 窗格。
- 列表:如果您需要在不使用 web 控制台的情况下与虚拟机图形显示进行交互,请使用 Virt Viewer 应用程序。
- 列表:如果不需要图形显示,请使用 SSH 连接。
- 列表:当使用网络无法从您的系统访问虚拟机时,请使用 virsh 控制台。
6.1. 使用 web 控制台连接到虚拟机
- 要点:要连接到运行 KVM 虚拟机,您可以使用 web 控制台界面。
6.1.1. 在 web 控制台中打开虚拟机图形控制台
- 要点:要在 RHEL 10 web 控制台中查看和与所选虚拟机(VM)的图形输出进行交互,请使用 VNC 控制台或远程查看器工具。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:确保主机和虚拟机支持图形界面。
- 列表:要安装并启动您要与之交互的虚拟机。具体步骤请参阅创建 虚拟机和 启动虚拟机。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,单击您要查看其图形控制台的虚拟机。 此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
- 注意:注意 运行 web 控制台的主机可能会截获特定的组合键,如 Ctrl+Alt+Del,这会阻止它们发送到虚拟机。 要发送这样的组合键,点 Send key 菜单并选择要使用地键序列。 例如,要将 Ctrl+Alt+Del 组合发送给虚拟机,请单击 Send key 并选择 Ctrl+Alt+Del 菜单条目。
- 注意:注意 您可以在 web 控制台中启动 Virt Viewer。其他 VNC 远程查看器可以被手动启动。
6.1.2. 在 web 控制台中打开虚拟机串行控制台
- 要点:您可以在 RHEL 10 web 控制台中查看所选虚拟机(VM)的串行控制台。这在主机机器或者虚拟机没有使用图形界面配置时很有用。
- 要点:有关串行控制台的更多信息 ,请参阅使用命令行界面打开虚拟机串行控制台。
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:要安装并启动您要与之交互的虚拟机。具体步骤请参阅创建 虚拟机和 启动虚拟机。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 窗格中,单击您要查看其串行控制台的虚拟机。 此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
- 列表:在控制台下拉菜单中选择 Serial console。 串行控制台在 web 界面中打开。
6.2. 使用命令行打开虚拟机图形控制台
- 要点:您可以通过在 Virt Viewer 工具中打开虚拟机来连接至虚拟机(VM)的图形控制台。
- 要点:先决条件
- 列表:您的系统和您要连接到的虚拟机必须支持图形显示。
- 列表:如果目标虚拟机位于远程主机上,则必须具有对主机的连接和 root 访问权限。
- 列表:可选: 如果目标虚拟机位于远程主机上,您可以配置 libvirt 和 SSH 以更方便地访问远程主机。具体步骤,请参阅配置更容易访问远程虚拟化主机。
- 列表:要安装并启动您要与之交互的虚拟机。具体步骤请参阅创建 虚拟机和 启动虚拟机。
- 列表:打开 Virt Viewer 工具,并使用适当的命令连接到您的虚拟机: 要连接到本地虚拟机: 使用您要连接的虚拟机的名称替换 guest-name : # virt-viewer guest-name 连接到远程虚拟机: 使用 SSH 协议。以下示例以 root 身份连接到位于 192.0.2.1 的远程主机上名为 guest-name 的虚拟机: # virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name 提示时,为远程主机提供密码: root@192.0.2.1's password:
- 列表:要连接到本地虚拟机: 使用您要连接的虚拟机的名称替换 guest-name : # virt-viewer guest-name
- 命令/配置摘录:
# virt-viewer guest-name
# virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name6.3. 使用 SSH 连接到虚拟机
- 要点:如果您不需要使用虚拟机的图形显示,您可以使用 SSH 连接协议通过命令行与虚拟机交互。
- 要点:先决条件
- 列表:要安装并启动您要与之交互的虚拟机。具体步骤请参阅创建 虚拟机和 启动虚拟机。
- 列表:有对目标虚拟机的网络连接和 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 ...6.4. 使用命令行打开虚拟机串行控制台
- 要点:要连接到虚拟机(VM)的串行控制台,您可以使用 virsh console 命令。
- 要点:使用 virsh console 命令在以下情况下很有用:
- 列表:虚拟机不提供 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>
- 列表:虚拟机必须在内核命令行中配置串口控制台。要验证这一点,VM 上的 cat /proc/cmdline 命令输出必须包含 console=<console-name& gt;,其中 < ;console-name& gt; 是特定于架构的: 对于 AMD64 和 Intel 64: ttyS0 对于 ARM 64: ttyAMA0 注意 此流程中的以下命令使用 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…
- 列表:对于 AMD64 和 Intel 64: ttyS0
- 命令/配置摘录:
$ 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。
6.5. 使用命令行将 SPICE 远程显示协议替换为 VNC
- 要点:SPICE 远程显示协议在 RHEL 10 主机上不支持。如果您有一个配置为使用 SPICE 协议的虚拟机(VM),可以使用命令行将 SPICE 协议替换为 VNC 协议。否则,虚拟机无法启动。
- 要点:先决条件
- 列表:您有一个现有的配置为使用 SPICE 远程显示协议,且已关闭的虚拟机。
- 列表:要安装并启动您要与之交互的虚拟机。具体步骤请参阅创建 虚拟机和 启动虚拟机。
- 列表:在主机上,运行以下命令,并将
<vm-name>替换为您要转换为 VNC 的虚拟机的名称。 # virt-xml <vm-name> --edit --convert-to-vnc 成功输出: Domain 'vm-name' defined successfully 重要 这也会从虚拟机中删除特定的 SPICE 设备,如音频和 USB 透传,因为它们在 VNC 协议中没有合适的替换。如需更多信息,请参阅 采用 RHEL 9 时的注意事项。 - 列表:检查您转换的虚拟机的配置,并确保图形类型被列为 vnc。 # virsh dumpxml -xml <vm-name> | grep "graphics" 成功输出: <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
- 命令/配置摘录:
# virt-xml <vm-name> --edit --convert-to-vnc
Domain 'vm-name' defined successfully- 注意:重要 这也会从虚拟机中删除特定的 SPICE 设备,如音频和 USB 透传,因为它们在 VNC 协议中没有合适的替换。如需更多信息,请参阅 采用 RHEL 9 时的注意事项。
第 7 章 关闭并重启虚拟机
- 要点:要在 RHEL 10 主机上关闭或重启虚拟机,您可以使用命令行或 web 控制台 GUI。
7.1. 使用命令行关闭虚拟机
- 要点:要关闭虚拟机(VM),您可以使用 virsh shutdown 命令。如果虚拟机不响应,您可以使用 virsh destroy 命令强制关闭。
- 要点:先决条件
- 列表:您在主机上有一个正在运行的虚拟机。如需更多信息,请参阅 启动虚拟机。
- 列表:要关闭响应的虚拟机,请执行以下操作之一: 如果您 连接到 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…
- 列表:如果您 连接到 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 shutdown <demo-guest1>
Domain 'demo-guest1' is being shutdown- 注意:注意 在某些环境中,比如使用 GNOME 桌面的 Linux 客户机,使用 GUI 电源按钮暂停或休眠客户机可能会关闭虚拟机。
- 注意:重要 virsh destroy 命令实际上不会删除虚拟机配置或磁盘镜像。它只会终止虚拟机的运行实例,类似于从物理机中拔掉电源。 但是,在个别情况下,virsh destroy 可能会导致虚拟机文件系统崩溃,因此只有在所有其他关闭方法都失败时才使用这个命令。
7.2. 使用 web 控制台关闭虚拟机
- 要点:要关闭正在运行的虚拟机(VM),您可以使用 RHEL 10 web 控制台中的 Virtual Machines 界面。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:您在主机上有一个正在运行的虚拟机。如需更多信息,请参阅 启动虚拟机。
- 列表:在 Virtual Machines 接口中,找到您要关闭的虚拟机行。
- 列表:在行的右侧,点击 Shut Down。 虚拟机关机。
- 列表:如果虚拟机没有关闭,请点 Shut Down 按钮旁边的 Menu ⋮ 按钮,然后选择 Force Shut Down。
7.3. 使用命令行重启虚拟机
- 要点:要重启虚拟机(VM),您可以使用 virsh reboot 命令。如果虚拟机不响应,您可以使用 virsh destroy 命令强制重启。
- 要点:先决条件
- 列表:您在主机上有一个正在运行的虚拟机。如需更多信息,请参阅 启动虚拟机。
- 列表:要重启响应的虚拟机,请执行以下操作之一: 如果您 连接到 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 'dem…
- 列表:如果您 连接到 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 reboot demo-guest1
Domain 'demo-guest1' is being rebooted- 注意:重要 virsh destroy 命令实际上不会删除虚拟机配置或磁盘镜像。它只会终止虚拟机的运行实例,类似于从物理机中拔掉电源。 但是,在个别情况下,virsh destroy 可能会导致虚拟机文件系统崩溃,因此只有在所有其他关闭方法都失败时才使用这个命令。
7.4. 使用 web 控制台重启虚拟机
- 要点:要重启正在运行的虚拟机(VM),您可以使用 RHEL 10 web 控制台中的 Virtual Machines 界面。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:您在主机上有一个正在运行的虚拟机。如需更多信息,请参阅 启动虚拟机。
- 列表:在 Virtual Machines 接口中,找到您要重启的虚拟机行。
- 列表:在行的右侧,点击菜单按钮 ⋮。 此时会显示一个下拉菜单的操作。
- 列表:在下拉菜单中,单击 Reboot。 虚拟机将关机并重启。
第 8 章 删除虚拟机
- 要点:要删除 RHEL 10 中的虚拟机,请使用 命令行界面 或 web 控制台 GUI。
8.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 list --all
- 命令/配置摘录:
# virsh undefine guest1 --remove-all-storage --nvram Domain 'guest1' has been undefined Volume 'vda'(/home/images/guest1.qcow2) removed.
# virsh list --all8.2. 使用 web 控制台删除虚拟机
- 要点:您可以使用 RHEL 10 web 控制台从主机中删除虚拟机(VM)和其关联的存储文件。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:备份虚拟机中的重要数据。
- 列表:确保没有其他虚拟机使用相同的关联存储。
- 列表:可选:关闭虚拟机。
- 列表:登录到 RHEL 10 web 控制台。
第 9 章 查看有关虚拟机的信息
- 要点:要管理或排除 RHEL 10 上虚拟化部署的任何方面,第一步通常是查看有关虚拟机(VM)的当前状态和配置的信息。
- 要点:为此,您可以使用命令行或 Web 控制台。您还可以查看虚拟机 XML 配置中的信息。
9.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)9.2. 使用 web 控制台查看虚拟机信息
- 要点:要访问虚拟化概述,其中包含有关可用虚拟机(VM)、磁盘、存储池和网络的总结信息,您可以使用 web 控制台。
- 要点:先决条件
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:在 web 控制台侧菜单中点击 Virtual Machines。 此时会显示一个对话框,其中包含有关可用存储池、可用网络和 Web 控制台连接的虚拟机的信息。 该信息包括: Storage Pools - 可以通过 Web 控制台及其状态访问的活动的或非活动的存储池数量。 Networks - 可以通过 Web 控制台及其状态访问的活动的或非活动的网络数量。 Name - 虚拟机的名称。 Connection - libvirt 连接、系统或者会话的类型。 State - 虚拟机的状态。 Resource usage - 虚拟机的内存和虚拟 CPU 使用情况。 Disks - 有关分配给虚拟机的磁盘的详情。 注意 对虚拟网络接口…
- 列表:Storage Pools - 可以通过 Web 控制台及其状态访问的活动的或非活动的存储池数量。
- 列表:Networks - 可以通过 Web 控制台及其状态访问的活动的或非活动的网络数量。
- 列表:Name - 虚拟机的名称。
- 列表:Connection - libvirt 连接、系统或者会话的类型。
- 注意:注意 对虚拟网络接口设置的更改仅在重启虚拟机后生效。 此外,MAC 地址只能在虚拟机关闭时修改。
9.3. 虚拟机 XML 配置示例
- 要点:虚拟机的 XML 配置(也称为 域 XML )决定虚拟机的设置和组件。下表显示了虚拟机的 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 机器类型来决定功能兼容性。操作系统被设置为从硬盘引导。
第 10 章 克隆虚拟机
- 要点:要使用特定属性集合快速创建新虚拟机,您可以克隆现有虚拟机。
- 要点:克隆会创建一个使用其自身磁盘镜像保存存储的新虚拟机,但大多数克隆的配置和源虚拟机的数据都是一样的。这样就可以为特定的任务准备多个优化的虚拟机,而无需单独优化每一个虚拟机。
10.1. 克隆虚拟机的方式
- 要点:克隆虚拟机会复制源虚拟机及其磁盘镜像的 XML 配置,并对配置进行修改以确保新虚拟机的唯一性。您可以使用这个过程快速生成带有特定配置和内容的虚拟机。
- 要点:对克隆虚拟机配置的调整包括更改虚拟机的名称并确保它使用磁盘镜像克隆。存储在克隆的虚拟磁盘上的数据与源虚拟机是一致的。
- 列表:唯一设置,如持久性网络 MAC 配置,这可阻止克隆正常工作。
- 列表:敏感数据,如 SSH 密钥和密码文件。
- 列表:创建虚拟机模板
- 列表:使用命令行克隆虚拟机
- 列表:使用 web 控制台克隆虚拟机
10.2. 创建虚拟机模板
- 要点:要创建可正常工作的多个虚拟机(VM)克隆,您可以对删除源虚拟机的唯一信息和配置,如 SSH 密钥或持久性网络 MAC 配置。这将创建一个虚拟机 模板,您可以使用它来轻松且安全地创建虚拟机克隆。
- 要点:您可以使用 virt-sysprep 工具创建虚拟机模板,或者根据您的要求手动创建它们。
10.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 ro…
- 列表:可选:源虚拟机磁盘上的任何重要数据都已备份。如果要保留源虚拟机,请首先克隆它,并将克隆转换为模板。cloning-a-virtual-machine-by-using-the-command-line-interface.xml#cloning-a-virtual-machine-by-using-the-command-line-interface
- 列表:确保您已作为虚拟机磁盘镜像的所有者登录: # whoami root
- 列表:可选:复制虚拟机的磁盘镜像。 # cp /var/lib/libvirt/images/vm-name.qcow2 /var/lib/libvirt/images/vm-name-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.qcow210.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。
10.3. 使用命令行克隆虚拟机
- 要点:要创建一个带有特定属性集的新虚拟机,您可以使用 virt-clone 命令行实用程序克隆现有的虚拟机。
- 要点:先决条件
- 列表:源虚拟机被关闭。
- 列表:确保有足够的磁盘空间来存储克隆的磁盘镜像。
- 列表: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.- 注意:注意 有关使用 virt-clone 的详情和示例,请查看您系统上的 virt-clone (1) 手册页。
10.4. 使用 web 控制台克隆虚拟机
- 要点:要使用特定属性集合创建新虚拟机,您可以使用 web 控制台克隆现有虚拟机。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:确保要克隆的虚拟机已关闭。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 web 控制台的虚拟机界面中,单击您要克隆的虚拟机的菜单按钮 ⋮。 此时会打开一个下拉菜单,控制各种虚拟机操作。
- 列表:单击 Clone。 此时会打开 Create a clone VM 对话框。
- 注意:注意 克隆虚拟机也会克隆与该虚拟机关联的磁盘。
第 11 章 迁移虚拟机
- 要点:如果虚拟机所在的当前主机变得不适合或者无法再使用,或者要重新分发托管工作负载,您可以将该虚拟机迁移到另一个 KVM 主机中。
11.1. 迁移虚拟机的工作方式
- 要点:要在主机间成功重新定位虚拟机(VM),且停机时间最小,您必须使用适当的迁移类型。
- 要点:您可以使用 实时迁移 在不中断工作负载的情况下迁移正在运行的虚拟机,且只有轻微停机时间。默认情况下,迁移的虚拟机在目标主机上是临时的,虚拟机在源主机上仍然被定义。实时 迁移的基本部分是将虚拟机的内存和任何附加的虚拟设备的状态传输到目标主机。要使虚拟机在目标主机上正常工作,虚拟机的磁盘镜像必须仍可用。
- 列表:位于共享网络上的存储
- 列表:virsh migrate 命令的 --copy-storage-all 参数,它通过网络将磁盘镜像内容从源复制到目的地。
- 列表:存储区域网络(SAN)逻辑单元(LUN)。
- 列表:Ceph 存储集群
- 列表:迁移虚拟机的好处
- 列表:使用命令行迁移虚拟机
- 注意:注意 要更轻松地管理大规模迁移,探索其他红帽产品,例如: OpenShift Virtualization Red Hat OpenStack Platform
- 表格样本(共 3 行):
- 迁移类型 | 描述 | 使用案例 | 存储要求
- 实时迁移 | VM 将继续在源主机中运行,而 KVM 会将虚拟机的内存页面传送到目标主机。当迁移接近完成后,KVM 会非常简单地挂起虚拟机,并在目标主机上恢复它。 | 对于需要一直保持运行的虚拟机,这个方法非常有用。但是,对于修改内存页的速度比 KVM 可以传输内存页的速度更快的虚拟机,如 I/O 负载较重的虚拟机,实时迁移可能会失败。 | VM 的磁盘镜像在迁移过程中必须可以被源主机和目标主机访问。
- 离线迁移 | 将虚拟机的配置移到目标主机 | 建议用于关闭虚拟机以及关闭虚拟机不会影响您工作负载的情况。 | VM 的磁盘镜像不必在迁移过程中能被源或目标主机访问,并不必可以手动复制或移动到目标主机。
11.2. 迁移虚拟机的好处
- 要点:您可以使用虚拟机(VM)迁移来平衡工作负载,根据需要维护硬件独立性、节省能源和重定位虚拟机。
- 要点:迁移虚拟机对以下情况非常有用:
11.3. 迁移虚拟机的限制
- 要点:为了避免虚拟机迁移失败,并在主机间实现成功的虚拟机重新定位,请确保了解迁移虚拟机的限制。
- 要点:使用某些功能和配置的虚拟机在迁移时无法正常工作,或者迁移失败。这些特性包括:
- 列表:使用某些功能和配置的虚拟机在迁移时无法正常工作,或者迁移失败。这些特性包括: 设备透传 单根 I/O 虚拟化(SR-IOV)设备分配(除 迁移具有附加虚拟功能的虚拟机外),该设备 可以正常工作。) 介质设备,如 vGPU ( 迁移附加 NVIDIA vGPU 的虚拟机 除外,这可以正常工作。)
- 列表:设备透传
- 列表:单根 I/O 虚拟化(SR-IOV)设备分配(除 迁移具有附加虚拟功能的虚拟机外),该设备 可以正常工作。)
- 列表:介质设备,如 vGPU ( 迁移附加 NVIDIA vGPU 的虚拟机 除外,这可以正常工作。)
- 列表:使用非统一内存访问(NUMA)固定的主机之间的迁移只有在主机有类似的拓扑时才能正常工作。但是,迁移可能会对运行工作负载的性能造成负面影响。
- 列表:源和目标主机都使用虚拟机迁移支持的特定 RHEL 版本,请参阅支持的虚拟机迁移主机
11.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 值进行试验,以确定与您环境中脏页率一致的最合适的周期。
11.5. 使用 web 控制台实时迁移虚拟机
- 要点:要将正在运行的虚拟机(VM)重新定位到另一主机,而无需停机或中断,您可以使用 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 值进行试验,以确定与您环境中脏页率一致的最合适的周期。
11.6. 实时迁移附加了 Mellanox 虚拟功能的虚拟机
- 要点:要使用附加的 Mellanox 虚拟功能实时迁移虚拟机,您必须配置 switchdev 模式、设置 Open vSwitch 并使用 virsh migrate。
- 要点:支持
- 列表:目前,VF 迁移只支持 Mellanox CX-7 网络设备。 Mellanox CX-7 网络设备上的 VF 使用一个新的 mlx5_vfio_pci 驱动程序,它添加了实时迁移所需的功能,并且 libvirt 自动将新驱动程序绑定到 VF。
- 列表:红帽仅通过包括的 mlx5_vfio_pci 驱动程序直接支持 Mellanox VF 实时迁移。
- 列表:计算虚拟机的脏内存页生成率。 目前,当迁移连接了 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
- 命令/配置摘录:
# mstflint -d <device_pci_address> query | grep -i PSID PSID: MT_1090111019
# dnf install mstflint11.7. 使用附加的 NVIDIA vGPU 实时迁移虚拟机
- 要点:如果您在虚拟化工作负载中使用虚拟 GPU (vGPU),您可以将连接了 vGPU 的正在运行的虚拟机(VM)实时迁移到另一个 KVM 主机。目前,这只适用于 NVIDIA GPU。
- 要点:先决条件
- 列表:您有一个带有支持此功能的 NVIDIA Virtual GPU 软件驱动程序版本的 NVIDIA GPU。如需更多信息,请参阅相关的 NVIDIA vGPU 文档。
- 列表:您有一个正确配置的 NVIDIA vGPU 分配给了虚拟机。具体步骤请参阅: 管理 NVIDIA vGPU 设备。
- 列表:主机使用 Intel 64 或 AMD64 CPU 架构。
- 列表:NVIDIA 记录了所有 vGPU 迁移的先决条件。如需了解更多详细信息,请参阅相关的 NVIDIA vGPU 文档。
- 列表:所有常规虚拟机迁移的先决条件。详情请参阅 使用命令行迁移虚拟机
- 列表:某些 NVIDIA GPU 功能可以禁用迁移。如需更多信息,请参阅您的图形卡的特定 NVIDIA 文档。
- 命令/配置摘录:
# cp /etc/libvirt/qemu/<vm_config>.xml /etc/libvirt/qemu/<vm_new_config>.xml
<hostdev mode='subsystem' type='pci' managed='no' display='on' ramfb='on'> <source> <address domain='0x0000' bus='0x41' slot='0x02' function='0x3'/> </source> </hostdev>- 注意:注意 也可以实时迁移连接了多个 vGPU 设备的虚拟机。
11.8. 将虚拟机磁盘镜像与其他主机共享
- 要点:要实时迁移虚拟机,还必须以一种方式迁移正在运行的虚拟机的存储,以便虚拟机在迁移过程中读取和写入存储。实现此操作的方法之一是使用共享虚拟机存储。
- 要点:以下流程提供了使用 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~#11.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 系统。
11.10. 虚拟机迁移支持的主机
- 要点:要使虚拟机迁移正常工作且受红帽支持,源和目标主机必须是特定的 RHEL 版本和机器类型。
- 要点:下表列出了支持的虚拟机迁移路径。
- 注意:注意 还支持在支持的机器类型上具有相同 RHEL 版本的主机之间进行虚拟机迁移。
- 注意:注意 对红帽提供的其他虚拟化解决方案(包括 Red Hat OpenStack Platform (RHOSP)和 OpenShift Virtualization)的支持状态可能会有所不同。
- 表格样本(共 5 行):
- 迁移方法 | 发行类型 | 将来的版本示例 | 支持状态
- 向前 | 次发行版本 | 10.0.1 → 10.1 | 在支持的 RHEL 10 系统和机器类型中
- 向前 | 主发行版本 | 9.7 → 10.1 | 在支持的 RHEL 系统和机器类型中
- 向后 | 次发行版本 | 10.1 → 10.0.1 | 在支持的 RHEL 10 系统和机器类型中
第 12 章 为虚拟机管理存储
- 要点:虚拟机(VM)需要存储数据、程序和系统文件。您可以将物理或基于网络的存储分配给虚拟机作为虚拟存储。
- 要点:您还可以修改存储是如何呈现给虚拟机的,无论底层硬件是什么。
12.1. 将存储附加到虚拟机的可用方法
- 要点:要为在 RHEL 10 主机上运行的虚拟机(VM)提供存储,您可以使用多种存储硬件和软件。每种类型都有不同的要求、优势和用例。
- 要点:基于文件的虚拟磁盘是主机文件系统上的磁盘镜像文件,这些文件存储在基于目录的 libvirt 存储池中。
12.2. 使用 web 控制台查看虚拟机存储信息
- 要点:通过使用 web 控制台,您可以查看虚拟机可用的存储资源的详细信息。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:要查看主机上可用的存储池的列表,请点击 Virtual Machines 界面顶部的 Storage Pools。 Storage pool 窗口将打开,它显示配置的存储池列表。 该信息包括: Name - 存储池的名称。 Size - 当前分配和存储池的总容量。 connection - 用于访问存储池的连接。 State - 存储池的状态。
- 列表:Name - 存储池的名称。
- 列表:Size - 当前分配和存储池的总容量。
12.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 y…
- 列表:有关查看存储池信息的其它选项,请使用 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
- 列表:使用 web 控制台查看虚拟机信息
- 命令/配置摘录:
# 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 GiB12.4. 将存储连接到虚拟机
- 要点:要将存储添加到虚拟机(VM),您可以将存储资源作为虚拟磁盘连接到虚拟机。
- 要点:与物理存储设备类似,虚拟磁盘独立于它们所连接的虚拟机,并可移动到其他虚拟机。
12.4.1. 使用命令行将基于文件的虚拟磁盘连接到虚拟机
- 要点:要为虚拟机提供本地存储,最简单的选项通常是连接 .qcow2 或 .raw 格式的基于文件的虚拟磁盘。
- 要点:要在命令行中附加基于文件的虚拟磁盘,您可以使用以下方法之一:
- 列表:在 libvirt 管理的基于目录的存储池中创建一个基于文件的存储卷。这需要多个步骤,但提供了与 hypervisor 的更好集成。 请注意,当在 RHEL 10 主机上创建第一个虚拟机时,会自动创建一个默认的基于目录的存储卷。此存储池的名称取决于在其中保存磁盘镜像的目录的名称。例如,默认情况下,在 libvirt 的 system 会话中,磁盘镜像保存在 /var/lib/libvirt/images/ 目录中,存储池名为 images。
- 列表:使用 qemu-img 命令,将虚拟磁盘创建为主机文件系统上的一个文件。这是一个更快的方法,但不提供与 libvirt 的集成。 因此,在创建后,使用 qemu-img 创建的虚拟磁盘更难于管理。
- 列表:可选:如果要将虚拟磁盘创建为存储卷,但您不想在主机上使用默认 image 存储池或另一个现有存储池,请创建并配置一个新的基于目录的存储池。 配置一个目录类型的存储池。例如,要创建一个名为 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_di…
- 列表:配置一个目录类型的存储池。例如,要创建一个名为 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 选项。具体步骤请参阅创建虚拟机。
12.4.2. 使用 web 控制台将基于文件的虚拟磁盘连接到虚拟机
- 要点:要为虚拟机提供本地存储,最简单的选项通常是连接 .qcow2 或 .raw 格式的基于文件的虚拟磁盘。
- 要点:要将基于文件的虚拟磁盘附加到虚拟机,请在由 libvirt 管理的基于目录的存储池中创建基于文件的存储卷。当在 RHEL 10 主机上创建第一个虚拟机时,会自动创建一个默认的基于目录的存储卷。此存储池的名称取决于在其中保存磁盘镜像的目录的名称。例如,默认情况下,在 libvirt 的 system 会话中,磁盘镜像保存在 /var/lib/libvirt/images/ 目录中,存储池名为 images。
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:可选:如果您不想使用默认的 images 存储池创建新虚拟磁盘,请创建一个新的存储池。 点 Virtual Machines 界面顶部的 Storage Pools。→ Create storage pool。 在 Create Storage Pool 对话框中,输入存储池的名称。 在 Type 下拉菜单中选择 Filesystem directory。 输入以下信息: Target path - 存储池的位置。 启动」 - 主机引导时是否启动存储池。 点 Create。 存储池创建后,创建存储池 对话框将关闭,新的存储池则添加到存储池列表中。
- 列表:点 Virtual Machines 界面顶部的 Storage Pools。→ Create storage pool。
- 列表:在 Create Storage Pool 对话框中,输入存储池的名称。
- 注意:注意 在 web 控制台中创建新虚拟机时,也可以创建并连接一个基于文件的虚拟磁盘。为此,请在 Create virtual machine 对话框中使用 Storage 选项。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
12.4.3. 使用命令行将基于磁盘的存储连接到虚拟机
- 要点:要为虚拟机(VM)提供本地存储,您可以使用基于磁盘的磁盘镜像。这种类型的磁盘镜像基于主机上的磁盘分区,并使用 .qcow2 或 .raw 格式。
- 要点:要使用命令行将基于磁盘的存储连接到虚拟机,请使用以下方法之一:
- 列表:创建新虚拟机时,作为 virt-install 命令的一部分,使用 --disk 选项创建并连接新磁盘。具体步骤请参阅创建虚拟机。
- 列表:对于现有虚拟机,创建一个基于磁盘的存储卷,并将其连接到虚拟机。具体说明请查看以下流程。
- 列表:确定您的 hypervisor 支持基于磁盘的存储池: # virsh pool-capabilities | grep "'disk' supported='yes'" 如果命令显示任何输出结果,则代表支持基于磁盘的池。
- 列表:准备一个设备,以此作为存储池的基础。因此,首选分区(例如 /dev/sdb1)或 LVM 卷。如果您为虚拟机提供了对整个磁盘或块设备(例如 /dev/sdb)的写权限,则虚拟机可能会对其分区或者创建自己的 LVM 组。这可能会导致主机上的系统错误。 但是,如果您需要使用整个块设备作为存储池,红帽建议保护设备上的任何重要分区不受 GRUB 的 os-prober 功能的影响。要做到这一点,请编辑 /etc/default/grub 文件,并应用以下配置之一: 禁用 os-prober。 GRUB_DISABLE_OS_PROBER=true 防止 os-prober 发现您要使用的分区。例如: GRUB_OS_PROBER_SKIP…
- 列表:禁用 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 命令只用于持久存储池。临时存储池创建时会自动启动。
12.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 下拉菜单中选择 Physical disk device。 注意 如果您在下拉菜单中没有看到 Physical disk device 选项,则您的 hypervisor 不支持基于磁盘的存储池。 输入以下信息: 目标路径 - 指定目标设备的路径。这将是用于存储池的路径。 源路径 - 指定存储设备的路径。例如: /dev/sdb。 格式 - 分区表的类型。 启动」 - 主机引导…
- 注意:注意 如果您在下拉菜单中没有看到 Physical disk device 选项,则您的 hypervisor 不支持基于磁盘的存储池。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
12.4.5. 使用命令行将基于 LVM 的存储连接到虚拟机
- 要点:要为虚拟机(VM)提供本地存储,您可以使用基于 LVM 的存储卷。这种类型的磁盘镜像基于 LVM 卷组,并使用 .qcow2 或 .raw 格式。
- 要点:要使用命令行将基于 LVM 的存储连接到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并连接新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建一个基于 LVM 的存储卷并将其连接到虚拟机。具体说明请查看以下流程。
- 列表:确定您的管理程序支持基于 LVM 的存储池: # virsh pool-capabilities | grep "'logical' supported='yes'" 如果命令显示任何输出结果,则支持基于 LVM 的池。
- 列表:确定主机上存在 LVM 卷组。有关创建 LVM 卷组的说明,请参阅 创建 LVM 卷组。
- 列表:在创建存储池前,备份所选存储设备上的任何数据。将磁盘分区专用于存储池将重新格式化并擦除当前存储在磁盘设备上的所有数据。
- 列表:如果还没有,请创建并配置一个新的基于 LVM 的存储池。 定义一个 LVM 类型的存储池。例如,以下命令定义了一个名为 guest_images_lvm 的存储池,它使用 lvm_vg 卷组,并挂载在 /dev/lvm_vg 目录上: # virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg Pool guest_images_lvm defined 根据您之前定义的配置创建一个存储池。 # virsh pool-build guest_images_lvm Pool guest_images_lvm bu…
- 命令/配置摘录:
# 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- 注意:重要 请注意,基于 LVM 的存储卷有以下限制: 基于 LVM 的存储池不能为 LVM 提供完整的灵活性。 基于 LVM 的存储池是卷组。您可以使用 virsh 工具创建卷组,但使用这种方法,您在创建的卷组中只能有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。 基于 LVM 的存储池需要一个完整磁盘分区。如果您使用 virsh 命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。如果您使用主机的现有卷组,如以下流程中所示,则不会删除任何内容。
- 注意:注意 virsh pool-start 命令只用于持久存储池。临时存储池创建时会自动启动。
12.4.6. 使用 web 控制台将基于 LVM 的存储连接到虚拟机
- 要点:要为虚拟机(VM)提供本地存储,您可以使用基于 LVM 的存储卷。这种类型的磁盘镜像基于 LVM 卷组,并使用 .qcow2 或 .raw 格式。
- 要点:要使用 Web 控制台将基于 LVM 的存储附加到虚拟机,请使用以下方法之一:
- 列表:在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并连接新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。
- 列表:对于现有虚拟机,创建一个基于 LVM 的存储卷并将其连接到虚拟机。具体说明请查看以下流程。
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:主机上存在一个 LVM 卷组。有关创建 LVM 卷组的说明,请参阅 创建 LVM 卷组。
- 列表:登录到 RHEL 10 web 控制台。
- 注意:重要 请注意,基于 LVM 的存储卷有以下限制: 基于 LVM 的存储池不能为 LVM 提供完整的灵活性。 基于 LVM 的存储池是卷组。您可以使用 virsh 工具创建卷组,但使用这种方法,您在创建的卷组中只能有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。 基于 LVM 的存储池需要一个完整磁盘分区。如果您使用 virsh 命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。如果您使用主机的现有卷组,如以下流程中所示,则不会删除任何内容。
- 注意:注意 如果您在下拉菜单中选择 LVM 卷组 选项,则您的管理程序不支持基于 LVM 的存储池。
12.4.7. 使用命令行将基于 NFS 的存储连接到虚拟机
- 要点:要为虚拟机提供网络存储,您可以根据网络文件系统(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' \ --targ…
- 命令/配置摘录:
# 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 defined12.4.8. 使用 web 控制台将基于 NFS 的存储连接到虚拟机
- 要点:要为虚拟机提供网络存储,您可以根据网络文件系统(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。 注意 如果您在下拉菜单中没有看到 Network file system 选项,则您的 hypervisor 不支持基于 NFS 的存储池。 输入以下信息: 目标路径 - 指定目标的路径。这将是用于存储池的路径。 主机 - 挂载点所在的网络服务器的主机名。这可以是主机名或 IP 地址。 源路径 - 网络服务器…
- 注意:注意 如果您在下拉菜单中没有看到 Network file system 选项,则您的 hypervisor 不支持基于 NFS 的存储池。
- 注意:注意 临时磁盘只能添加到正在运行的虚拟机中。
12.5. 检查虚拟磁盘的一致性
- 要点:在将磁盘镜像附加到虚拟机(VM)之前,请确保磁盘镜像没有问题,如损坏或碎片太多。为此,您可以使用 qemu-img check 命令。
- 要点:如果需要,您可以使用 qemu-img 检查 来尝试修复磁盘镜像。
- 列表:任何使用磁盘镜像的虚拟机(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 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- 注意:警告 修复磁盘镜像可能导致数据损坏或其他问题。在尝试修复前备份磁盘镜像。
12.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>- 注意:警告 调整正在运行的虚拟机的磁盘镜像大小可能会导致数据损坏或其他问题。
12.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: false12.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 --persistent12.9. 使用 web 控制台删除虚拟机存储
- 要点:如果您不再需要将虚拟磁盘附加到虚拟机(VM),或者要释放主机存储资源,您可以从虚拟机中删除存储。
- 要点:当使用 web 控制台删除虚拟机存储时,您可以执行以下操作:
- 列表:从虚拟机中分离虚拟磁盘。
- 列表:删除虚拟磁盘及其内容。
- 列表:停用与虚拟磁盘相关的存储池。
- 列表:删除与虚拟磁盘相关的存储池。
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 命令/配置摘录:
# virsh vol-delete --pool RHEL-storage-pool test-disk212.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 工具。
第 13 章 使用快照保存和恢复虚拟机状态
- 要点:要保存虚拟机的当前状态,您可以创建一个虚拟机的 快照。之后,您可以恢复到快照,来将虚拟机返回到保存的状态。
- 要点:VM 快照包含虚拟机的磁盘镜像。如果您从正在运行的虚拟机创建快照(也称为 实时快照 ),则快照还包含虚拟机的内存状态,其中包括正在运行的进程和应用程序。
- 列表:保存客户机操作系统的干净状态
- 列表:确保您在对虚拟机执行具有潜在的破坏性操作之前有一个恢复点
13.1. 对虚拟机快照的支持限制
- 要点:红帽仅在使用 external 快照时支持对 RHEL 上虚拟机(VM)的快照功能。
- 要点:目前,只有在以下所有要求都满足时,才能在 RHEL 上创建外部快照:
- 列表:虚拟机使用基于文件的存储。
- 列表:您只能在以下场景之一创建虚拟机快照: 虚拟机已关闭。 如果虚拟机正在运行,您可以使用 --disk-only --quiesce 选项或 -- memspec 选项。
- 列表:虚拟机已关闭。
- 列表:如果虚拟机正在运行,您可以使用 --disk-only --quiesce 选项或 -- 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'> [...]- 注意:警告 大多数其他配置都会创建 internal 快照,这在 RHEL 10 中已弃用。内部快照可能适用于您的用例,但红帽不提供对它们的全面测试和支持。 不要在生产环境中使用内部快照。
13.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 透传设备下运行的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚拟机创建没有内存的快照…
- 列表:保存虚拟机的内存的最少推荐空间等于虚拟机分配的 RAM。例如,保存具有 32 GB RAM 的虚拟机内存需要最多 32 GB 的磁盘空间。
- 列表:如果虚拟机 I/O 负载过重,则可能需要大量额外的磁盘空间。
- 列表:如果虚拟机已分配了 VFIO passthrough 设备,则可能需要额外的磁盘空间。
- 列表:如果快照是在不暂停虚拟机的情况下创建的,则可能需要额外的磁盘空间。 重要 红帽建议不要保存在非常高工作负载或使用 VFIO 透传设备下运行的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚拟机创建没有内存的快照。 另外,请注意,并非所有 VFIO 设备都能够使用内存创建快照。目前,仅在以下情况下,创建带有内存的快照才能正常工作: 连接的 VFIO 设备是一个启用了迁移功能的 Mellanox VF。 连接的 VFIO 设备是一个启用了迁移功能的 NVIDIA vGPU。
- 命令/配置摘录:
# virsh dumpxml <vm-name> | grep "disk type" <disk type='file' device='disk'> <disk type='file' device='cdrom'>
# systemctl try-restart virtqemud- 注意:重要 红帽建议不要保存在非常高工作负载或使用 VFIO 透传设备下运行的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚拟机创建没有内存的快照。 另外,请注意,并非所有 VFIO 设备都能够使用内存创建快照。目前,仅在以下情况下,创建带有内存的快照才能正常工作: 连接的 VFIO 设备是一个启用了迁移功能的 Mellanox VF。 连接的 VFIO 设备是一个启用了迁移功能的 NVIDIA vGPU。
- 注意:警告 将虚拟机的内存保存到快照中会将正在运行的进程的状态保存到虚拟机的客户机操作系统中。但是,当您恢复到此类快照时,进程可能会因为各种因素而失败,如丢失网络连接或未同步的系统时间。
13.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'>13.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-install13.5. 使用 web 控制台恢复到虚拟机快照
- 要点:要将虚拟机(VM)返回到快照中保存的状态,您可以使用 RHEL web 控制台。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:提供了虚拟机快照,您之前已在 web 控制台中创建 或使用命令行。
- 列表:可选:您已创建虚拟机当前状态的快照。如果您恢复到以前没有保存当前状态的快照,则自上次快照以来在虚拟机上执行的更改将丢失。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 web 控制台的 Virtual machines 界面中,点您要恢复其状态的虚拟机。 此时会打开虚拟机的管理概述。
13.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 deleted13.7. 使用 web 控制台删除虚拟机快照
- 要点:当虚拟机(VM)快照不再对您有用时,您可以在 web 控制台中删除它,来释放其使用的磁盘空间。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:可选:存在您要删除的快照的子快照。 当您有一个活跃的快照并创建一个新快照时,会自动创建一个子快照。如果您删除了没有子对象的快照,您可以在从父快照创建后丢失快照中保存的任何更改。 要检查快照是否有子快照,请在虚拟机的 Web 控制台概述中 Snapshots 的 Parent snapshot 列中列出的快照中进行确认。
- 列表:在 web 控制台的 Virtual machines 界面中,点击您要删除其快照的虚拟机。 此时会打开虚拟机的管理概述。
- 列表:在管理概述的 Snapshots 窗格中,单击您要删除的快照旁边的 Delete 按钮。
- 列表:等待删除操作完成。根据快照的大小,这可能需要最多几分钟时间。
第 14 章 将主机设备连接到虚拟机
- 要点:您可以通过将主机设备连接到虚拟机来扩展虚拟机的功能。将主机设备连接到虚拟机时,虚拟设备 被用于此目的,这是硬件设备的软件抽象。
14.1. 虚拟设备的工作原理
- 要点:要为虚拟机提供各种功能,虚拟机使用硬件设备的软件抽象。
- 要点:与物理计算机一样,虚拟机需要专用设备来为系统提供功能,如处理电源、内存、存储、网络或图形。物理系统通常将硬件设备用于这些目的。但是,由于虚拟机作为软件进程运行,因此需要使用此类设备的软件抽象,称为 虚拟设备。
- 列表:CPU
- 列表:内存
- 列表:键盘
- 列表:网络接口控制器(NIC)
- 列表:各种设备控制器
- 列表:一个视频卡
14.2. 虚拟设备类型
- 要点:要为虚拟机(VM)选择适当的设备类型,请考虑您对性能、兼容性和功能的要求。
- 要点:RHEL 10 中的虚拟化可显示可附加到虚拟机的几种不同类型的虚拟设备:
- 列表:虚拟 CPU(vCPU),有大量 CPU 型号可供选择。模拟的性能影响显著取决于主机 CPU 和模拟 vCPU 之间的差异。
- 列表:模拟系统组件,如 PCI 总线控制器。
- 列表:模拟存储控制器,如 SATA、SCSI 甚至 IDE。
- 列表:模拟声音设备,如 ICH9、ICH6 或 AC97。
- 列表:模拟图形卡,如 VGA 卡。
- 列表:模拟网络设备,如 rtl8139。
- 注意:注意 这些类型的某些设备可能不被支持,或者与 RHEL 不兼容。如果您需要帮助配置虚拟设备,请联系红帽支持。
14.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'/> <…
- 列表:运行虚拟机并测试该设备是否存在并正常工作。
- 命令/配置摘录:
# 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 参数。
14.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
- 列表:获取您要使用的设备的 PCI 地址标识符。例如,如果要使用附加到主机的 NVME 磁盘,以下输出显示它作为设备 0000:65:00.0。 # 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 …
- 列表:打开您要向其附加 PCI 设备的虚拟机的 XML 配置。 # virsh edit vm-name
- 命令/配置摘录:
# 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…- 注意:注意 此流程描述了通用 PCI 设备分配。有关分配特定类型的 PCI 设备的步骤,请查看相关步骤: 将 SR-IOV 网络设备附加到虚拟机 为虚拟机分配 GPU
14.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 设备与主机分离。当您关闭虚拟机时,也不能自动将它们重新附加到主机上。 因此,主机可能会变得没有响应,或意外关闭。
14.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. 要从正在运行的虚拟机中删除 USB 设备,请在此命令中添加-- update 参数。
- 列表:运行虚拟机并检查该设备是否已从设备列表中删除。
- 命令/配置摘录:
# 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.14.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 命令及-- hostdev 选项和设备地址。 例如,以下命令会永久删除上一步中的设备。 # virsh 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> 部分是否不再显示。 # virsh dumpxml <VM-name>
- 命令/配置摘录:
# 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> [...]
# virsh detach-device <VM-name> --hostdev 0000:65:00.0 --config Domain 'VM-name' defined successfully.- 注意:注意 要从正在运行的虚拟机中删除 PCI 设备,请在上一个命令中添加 --live 参数。
14.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.xml14.9. 将 ISO 镜像连接到虚拟机
- 要点:当使用虚拟机时,您可以访问保存在主机中 ISO 镜像中的信息。要做到这一点,请将 ISO 镜像作为虚拟光驱附加到虚拟机,比如 CD 驱动器或者 DVD 驱动器。
14.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.
- 列表:运行虚拟机并测试该设备是否存在并正常工作。
- 命令/配置摘录:
# virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom Domain 'example-VM-name' defined successfully.14.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.
- 列表:运行虚拟机并测试是否替换该设备并正常工作。
- 命令/配置摘录:
# 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.14.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 配置文件中。
- 命令/配置摘录:
# 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.14.10. 为虚拟机配置 SCSI 透传
- 要点:要为虚拟机(VM)提供对主机 SCSI 设备的直接访问,如存储区域网络(SAN)逻辑单元号(LUN)磁盘设备,您可以配置 SCSI 透传。
- 要点:您可以使用 SCSI 透传传递本地磁盘或多路径设备。
- 列表:在传递本地磁盘时,虚拟机使用一个到磁盘的路径,例如:单个 /dev/disk/by-path/ 或 /dev/sdb 设备。
- 列表:使用多路径设备时,主机通过多个路径提供相同的 LUN,并将它们聚合到一个映射器设备中,如 /dev/mapper/mpatha。如果一个路径失败,这提供了冗余和故障转移。
- 列表:主机使用以下 CPU 架构之一: Intel 64 AMD64 ARM 64
- 列表:Intel 64
- 列表:AMD64
- 列表:ARM 64
- 命令/配置摘录:
# virsh edit <vm_name>
<controller type='scsi' model='virtio-scsi' index='0'/>- 注意:警告 如果设备正在使用,从正在运行的虚拟机中分离 SCSI 设备可能会导致数据丢失或崩溃。在分离设备前,请确保客户端操作系统中的任何应用程序都无法访问该设备。
14.11. 为虚拟机配置 SCSI3-Persistent Reservation
- 要点:通过使用 SCSI3-Persistent Reservation (S3-PR),多个虚拟机(VM)可以协调对共享存储设备的访问。Linux 集群解决方案(如 Pacemaker 和 Windows Server Failover 集群)需要这样做。
- 要点:通过 S3-PR,虚拟机可以在存储设备上注册和管理持久性保留,以防止多个虚拟机访问同一存储时发生冲突。
- 列表:主机使用以下 CPU 架构之一: Intel 64 AMD64 ARM 64
- 列表:Intel 64
- 列表:AMD64
- 列表:ARM 64
- 列表:主机使用受支持的 RHEL 和内核版本。详情请查看 虚拟机中的支持 SGIO 所需的 RHEL 版本。
- 列表:存储后端支持 S3-PR。
- 命令/配置摘录:
# virsh edit <vm_name>
<controller type='scsi' model='virtio-scsi' index='0'/>14.12. 将 DASD 设备附加到 IBM Z 中的虚拟机
- 要点:通过使用 vfio-ccw 功能,您可以将直接访问存储设备(DASD)作为介质设备分配给 IBM Z 主机上的虚拟机(VM)。例如,这使虚拟机可以访问 z/OS 数据集,或向 z/OS 机器提供分配的 DASD。
- 要点:先决条件
- 列表:您有一个 FICON 协议支持的具有 IBM Z 硬件架构的系统。
- 列表:您有一个 Linux 操作系统的目标虚拟机。
- 列表:driverctl 软件包已安装。 # dnf install driverctl
- 列表:已在主机上载入了必要的 vfio 内核模块。 # lsmod | grep vfio 这个命令的输出必须包含以下模块: vfio_ccw vfio_mdev vfio_iommu_type1
- 列表:vfio_ccw
- 列表:vfio_mdev
- 命令/配置摘录:
# dnf install driverctl
# lsmod | grep vfio- 注意:注意 这会将 0.0.29a8 子通道永久绑定到 vfio_ccw,这意味着 DASD 在主机上将不可用。如果需要在主机上使用该设备,您必须首先删除到 'vfio_ccw'的自动绑定,并将子通道重新绑定到默认驱动程序: # driverctl -b css unset-override 0.0.29a8
14.13. 使用 web 控制台将 watchdog 设备附加到虚拟机
- 要点:要强制虚拟机(VM)在停止响应时执行指定的操作,您可以将虚拟 watchdog 设备附加到虚拟机。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已在系统上安装了 Web 控制台虚拟机插件。如需更多信息,请参阅 配置 web 控制台来管理虚拟机。
- 列表:在命令行上安装 watchdog 服务。 # dnf install watchdog
- 列表:关闭虚拟机。
- 列表:将 watchdog 服务添加到虚拟机。 # virt-xml vmname --add-device --watchdog action=reset --update
- 列表:运行虚拟机。
第 15 章 配置虚拟机网络连接
- 要点:要使虚拟机(VM)通过网络连接到您的主机、连接到您主机上的其他虚拟机,并且连接到外部网络上的某些位置,必须相应地配置虚拟机网络。为了提供虚拟机网络,RHEL 10 hypervisor 和新创建的虚拟机有默认的网络配置,也可以对其做进一步修改。
- 要点:例如:
- 列表:您可以使主机上的虚拟机能够被发现,并连接到主机外的地方,就如同虚拟机与主机在同一网络上一样。
- 列表:您可以部分或完全将虚拟机与入站网络流量隔离,以提高其安全性,并将虚拟机出现任何问题而影响主机的风险降至最低。
15.1. 虚拟网络的工作方式
- 要点:主机硬件促进了虚拟机(VM)与网络上其他设备和地方的连接。虚拟网络使用了虚拟网络交换机的概念。
- 要点:虚拟网络交换机是在主机机器中运行的软件构造。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 virbr015.2. 虚拟机网络的默认配置
- 要点:当在虚拟化主机上安装 virtnetworkd 服务时,它会在网络地址转换(NAT)模式中包含初始虚拟网络配置。
- 要点:默认情况下,主机上的所有虚拟机都连接到同一 libvirt 虚拟网络,名为 default。这个网络上的虚拟机可以连接到主机上和主机之外的网络位置,但有以下限制:
- 列表:网络上的虚拟机对主机和主机上的其他虚拟机可见,但网络流量会受到客户机操作系统网络堆栈中的防火墙以及附加到客户机接口的 libvirt 网络过滤规则的影响。
- 列表:网络上的虚拟机可以连接到主机之外但对它们不可见的位置。出站流量受 NAT 规则以及主机系统的防火墙影响。
15.3. 虚拟机的网络连接类型
- 要点:要修改虚拟机的网络属性和行为,更改虚拟机使用的虚拟网络或接口类型。您可以从 RHEL 10 中提供给虚拟机的以下连接类型中选择。
15.3.1. 使用网络地址转换进行虚拟联网
- 要点:默认情况下,虚拟网络交换机运行在网络地址转换(NAT)模式下。它们使用 IP 伪装而不是源-NAT(SNAT)或目的-NAT(DNAT)。IP 伪装可让连接的虚拟机使用主机机器的 IP 地址与任何外部网络通信。当虚拟网络交换机运行在 NAT 模式时,主机外的计算机无法与主机内的虚拟机进行通信。
- 注意:警告 虚拟网络交换机使用防火墙规则配置的 NAT。不建议在交换机运行时编辑这些规则,因为不正确的规则可能会导致交换机无法通信。
15.3.2. 路由模式中的虚拟网络
- 要点:当使用 Routed 模式时,虚拟交换机会连接到连接到主机的物理 LAN 中,并在不使用 NAT 的情况下传输数据。虚拟交换机可以检查所有流量,并使用网络数据包中包含的信息来做出路由决策。
- 要点:使用此模式时,虚拟机(VM)都位于一个子网中,与主机是分开的。虚拟机子网通过虚拟交换机进行路由,该交换机位于主机上。这会启用传入连接,但对外部网络上的系统需要额外的路由表条目。
15.3.3. 网桥模式中的虚拟网络
- 要点:在大多数虚拟机网络模式中,虚拟机会自动创建并连接到 virbr0 虚拟网桥。相反,在桥接模式中,VM 会连接到主机上的一个已存在的 Linux 网桥。因此,虚拟机可以在物理网络中直接看到。这就可以允许进入的连接,但不需要任何额外的路由表条目。
- 要点:网桥模式使用基于 MAC 地址的连接切换:
- 列表:在现有网络中与主机机器一起部署虚拟机,使虚拟机和物理机之间的区别对用户不可见。
- 列表:在不更改现有物理网络配置设置的情况下部署虚拟机。
- 列表:部署需要被现有物理网络轻松访问的虚拟机。将虚拟机放置到必须访问 DHCP 服务的物理网络中。
- 列表:将虚拟机连接到使用虚拟 LAN(VLAN)的现有网络。
- 列表:一个 demilitarized zone (DMZ) 网络。对于带有虚拟机的 DMZ 部署,红帽建议在物理网络路由器和交换机中配置 DMZ,并使用桥接模式将虚拟机连接到物理网络。
15.3.4. 隔离模式中的虚拟网络
- 要点:通过使用 isolated 模式,连接到虚拟交换机的虚拟机可以相互通信,并与主机机器进行通信,但其流量不会通过主机外部,且不能接收来自主机外部的流量。对于基本功能,需要在这个模式中使用 dnsmasq ,如 DHCP。
15.3.5. 开放模式中的虚拟网络
- 要点:当对网络使用 开放 模式时,libvirt不会为网络生成任何防火墙规则。因此,libvirt 不会覆盖主机提供的防火墙规则,因此用户可以手动管理虚拟机的防火墙规则。
15.3.6. 虚拟机连接类型的比较
- 要点:下表提供了有关所选的虚拟机(VM)网络配置可以连接到的位置的信息,以及它们对哪些位置可见。
- 要点:其他资源
- 列表:使用命令行配置外部可见的虚拟机
- 列表:使用 web 控制台配置外部可见的虚拟机
- 列表:bridge_opts 参数的说明
- 表格样本(共 6 行):
- 连接到主机 | 连接到主机上的其他虚拟机 | 连接到外部位置 | 可查看外部位置
- 网桥模式 | 是 | 是 | 是 | 是
- NAT | 是 | 是 | 是 | 否
- 路由模式 | 是 | 是 | 是 | 是
15.4. 使用 web 控制台管理虚拟机网络接口
- 要点:要管理主机上虚拟机(VM)的虚拟网络接口,您可以使用 RHEL 10 web 控制台。
15.4.1. 在 web 控制台中查看和编辑虚拟网络接口信息
- 要点:要在所选虚拟机(VM)上查看和修改虚拟网络接口,您可以使用 RHEL 10 web 控制台。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:滚动 到网络接口 。 Network Interfaces 部分显示关于为虚拟机配置的虚拟网络接口的信息,以及用于 添加、删除、编辑 或 Unplug 网络接口的选项。 该信息包括: 类型 - 虚拟机的网络接口类型。类型包括虚拟网络、到 LAN 的桥接和直接连接。 注意 RHEL 10 及更高版本中不支持通用以太网连接。 Model type - 虚拟网络接口的型号。 MAC Address - 虚拟网络接口的 MAC 地址。 IP Address - 虚拟网络接口的 IP 地址。 Source - 网络接口的源。这取决于网络类型。 State - 虚拟网络接口的状态。
- 列表:类型 - 虚拟机的网络接口类型。类型包括虚拟网络、到 LAN 的桥接和直接连接。 注意 RHEL 10 及更高版本中不支持通用以太网连接。
- 注意:注意 RHEL 10 及更高版本中不支持通用以太网连接。
- 注意:注意 对虚拟网络接口设置的更改仅在重启虚拟机后生效。 此外,MAC 地址只能在虚拟机关闭时修改。
15.4.2. 在 web 控制台中添加和连接虚拟网络接口
- 要点:要创建虚拟网络接口,并将虚拟机(VM)连接到它,您可以使用 RHEL 10 web 控制台。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:滚动 到网络接口 。 Network Interfaces 部分显示关于为虚拟机配置的虚拟网络接口的信息,以及用于 添加、编辑 或 插入 网络接口的选项。
- 列表:如果没有网络接口满足您的要求,您可以通过单击 Add network interface 按钮创建新接口。 在 Add network interface 对话框中,根据您的要求选择接口的类型和源,以及其他选项。 点Add。
15.4.3. 在 web 控制台中断开连接和删除虚拟网络接口
- 要点:要断开连接到所选虚拟机(VM)的虚拟网络接口,您可以使用 RHEL 10 web 控制台。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在 Virtual Machines 界面中,点击您要查看其信息的虚拟机。 此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 列表:滚动 到网络接口 。 Network Interfaces 部分显示关于为虚拟机配置的虚拟网络接口的信息,以及用于 添加、删除、编辑 或 Unplug 网络接口的选项。
- 列表:在您要断开连接的虚拟网络接口行中点 Unplug。 所选虚拟网络接口断开与虚拟机的连接。
15.5. 管理 SR-IOV 网络设备
- 要点:模拟虚拟设备通常使用比硬件网络设备更多的 CPU 和内存。这可能会限制虚拟机的性能。但是,如果虚拟化主机上的任何设备都支持单根 I/O 虚拟化(SR-IOV),您可以使用此功能来提高设备性能,并可能还提高虚拟机的整体性能。
15.5.1. 什么是 SR-IOV?
- 要点:单根 I/O 虚拟化(SR-IOV)是一种规范,它允许单个 PCI Express(PCIe)设备向主机系统呈现多个独立的 PCI 设备,称为 虚拟功能 (VF)。
- 要点:每个虚拟功能(VF):
- 列表:提供与原始 PCI 设备相同的或类似的服务。
- 列表:出现在主机 PCI 总线的不同地址上。
- 列表:可使用 VFIO 分配分配给不同的虚拟机。
- 列表:物理功能(PF) - 为主机提供设备(如网络)功能的 PCIe 功能,但也可以创建和管理一组 VF。每个具有 SR-IOV 功能的设备都有一个或多个 PF。
- 列表:虚拟功能(VF) - 充当独立设备的轻量级 PCIe 功能。每个 VF 都是从 PF 中派生的。一个设备可依赖于设备硬件的最大 VF 数。每个 VF 每次只能分配给一个虚拟机,但虚拟机可以分配多个 VF。
- 列表:提高的性能
15.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 虚拟机当前还不可靠。
- 注意:重要 如果您通过在虚拟机 XML 配置文件的 <hostdev> 部分手动添加一个设备条目来将 SR-IOV VF 分配给一个虚拟机,则不会永久分配 MAC 地址,客户机中的网络设置在每次主机重启时都需要重新配置。 要避免这些复杂情况,请使用 virsh attach-interface 命令,如此步骤中所述。
15.5.3. 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 驱动程序
15.6. 从 PXE 服务器启动虚拟机
- 要点:使用预引导执行环境(PXE)的虚拟机可以从网络引导并加载它们的配置。您可以使用 libvirt 从虚拟或桥接网络上的 PXE 服务器引导虚拟机。
- 注意:警告 以下流程仅作为示例提供。在继续操作前,请确保您有足够的备份。
15.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/tftpboot15.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'/> <ta…
- 列表:或者,您可以手动编辑现有虚拟机的 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>15.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='vn…
- 列表:或者,您可以手动编辑现有虚拟机的 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>15.7. 配置外部可见的虚拟机
- 要点:在很多情况下,默认虚拟机(VM)网络配置就足够了。但是,如果您需要调整虚拟机的配置,以便从外部系统访问,您可以使用命令行(CLI)或 RHEL 10 web 控制台。
15.7.1. 使用命令行配置外部可见的虚拟机
- 要点:如果您需要虚拟机(VM)出现在与 hypervisor 相同的外部网络上,则必须使用桥接模式。为此,请将虚拟机连接到连接到 hypervisor 物理网络设备的网桥设备。
- 要点:默认情况下,新创建的虚拟机连接到使用 virbr0 (主机上默认的虚拟网桥)的 NAT 类型网络。这可确保虚拟机可以使用主机的网络接口控制器(NIC)来连接到外部网络,但无法从外部系统访问虚拟机。
- 列表:带有默认 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.15.7.2. 使用 web 控制台配置外部可见的虚拟机
- 要点:如果您需要虚拟机出现在与 hypervisor 相同的外部网络中,则必须使用桥接模式。为此,请将虚拟机连接到连接到 hypervisor 物理网络设备的网桥设备。要对此使用 RHEL 10 web 控制台,请按照以下说明操作。
- 要点:默认情况下,新创建的虚拟机连接到使用 virbr0 (主机上默认的虚拟网桥)的 NAT 类型网络。这可确保虚拟机可以使用主机的网络接口控制器(NIC)来连接到外部网络,但无法从外部系统访问虚拟机。
- 列表:您已安装了 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~#*15.7.3. 替换 macvtap 连接
- 要点:RHEL 10 中支持使用 macvtap 连接。但是,与其他虚拟机网络配置相比,macvtap 的性能并不理想,且更难配置。如果您的用例没有明确需要 macvtap,请使用不同的受支持的配置。
- 要点:macvtap 是一个 Linux 网络设备驱动程序,它会创建一个虚拟网络接口,虚拟机通过这个驱动程序可直接访问主机上的物理网络接口。
- 列表:使用 Linux 网桥配置,而不是 macvtap 网桥模式。
- 列表:使用 PCI Passthrough,而不是 macvtap passthrough 模式。
- 列表:macvtap 的上游文档
15.8. 在网络绑定上配置网桥,以将虚拟机与网络连接
- 要点:网桥将虚拟机(VM)与主机相同的网络连接。如果要将一个主机上的虚拟机连接到另一主机或另一主机上的虚拟机,则桥接会在它们之间建立通信。但是,网桥不提供故障转移机制。
- 要点:要处理通信中的故障,网络绑定在网络接口出现故障时处理通信。要保持容错和冗余,active-backup 绑定机制决定在绑定中只有一个端口处于活跃状态,且不需要任何交换机配置。如果活动端口失败,则备用端口变为活动状态,以在网络中配置的虚拟机之间的保持通信。
15.8.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 bond015.8.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 ...
- 命令/配置摘录:
# nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
# nmcli connection modify bond0 master br015.8.3. 使用现有绑定接口在 libvirt 中创建一个虚拟网络
- 要点:要使虚拟机(VM)使用带有绑定的 br0 网桥,首先将虚拟网络添加到使用此网桥的 libvirtd 服务中。
- 要点:先决条件
- 列表:您已安装了 libvirt 软件包。
- 列表:您已启动并启用了 libvirtd 服务。
- 列表:您已在 Red Hat Enterprise Linux 中使用绑定配置了 br0 设备。具体步骤请参阅 使用 nmcli 为网络绑定配置网络桥接。
- 列表:使用以下内容创建 ~/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.xml15.8.4. 将虚拟机配置为使用绑定接口
- 要点:要将虚拟机配置为使用主机上带有绑定接口的网桥设备,请创建一个使用 bond0-bridge 虚拟网络的新虚拟机,或更新现有虚拟机的设置以使用此网络。
- 要点:在 RHEL 主机上执行此流程。
- 列表:您已在 libvirtd 中配置了 bond0-bridge 虚拟网络。具体步骤请参阅 在带有现有绑定接口的 libvirt 中创建虚拟网络。
- 列表:要创建新虚拟机并将其配置为使用 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-bridge15.9. 配置 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 …
- 列表:虚拟机为转发来自 eth0 主机接口的流量复制网络路由。
- 列表:接口 MAC 设置为 52:54:00:98:d8:b7。如果未设置,则会生成一个随机的。
- 列表:IPv4 地址设为 192.0.2.1/24,IPv6 地址设为 ::ffff:c000:201。
- 命令/配置摘录:
# dnf install passt
# virsh edit <testguest1>- 注意:注意 < backend> 元素中 的可选 hostname 和 fqdn 属性使用 DHCP 和 passt 后端上的 DHCP 和 DHCPv6 配置主机名和完全限定域名(FQDN)。
第 16 章 在虚拟机中管理 GPU 设备
- 要点:要为运行 AI 工作负载准备虚拟机(VM),或增强虚拟机的图形性能,您可以将 RHEL 主机 GPU 分配给虚拟机。
- 列表:您可以将 GPU 从主机分离,并将 GPU 的完全控制直接传给虚拟机。
- 列表:您可以从物理 GPU 创建多个设备,并将这些设备作为虚拟 GPU (vGPU)分配给多个客户机。目前仅在所选的 NVIDIA GPU 上支持。
- 注意:重要 目前只在 Intel 64 和 AMD64 系统上支持 GPU 分配。
16.1. 为虚拟机分配 GPU
- 要点:要访问并控制附加到主机系统的 GPU,您必须将主机系统配置为将 GPU 的直接控制传给虚拟机(VM)。
- 要点:请注意,直接为虚拟机分配 GPU 会导致主机无法使用 GPU,并且 GPU 可以同时分配给另一个虚拟机。
- 列表:您必须在主机机器内核中启用 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,并提供更好的主机性能。但是,并非所有硬件都支持这个选项。即使未启用这个选项,您仍然可以分配设备。
16.2. 管理 NVIDIA vGPU 设备
- 要点:vGPU 功能使得可以将物理 NVIDIA GPU 设备划分为多个虚拟设备。然后,这些设备可以分配给多个虚拟机(VM)作为虚拟 GPU。因此,这些虚拟机可以共享单个物理 GPU 的性能。
- 注意:注意 为虚拟机分配 vGPU 设备可能会对用于创建 vGPU 的物理 GPU 的性能造成负面影响。
16.2.1. 配置 NVIDIA vGPU 设备
- 要点:要将 NVIDIA 虚拟 GPU (vGPU)分配给带有现代 NVIDIA 硬件的 RHEL 10 主机系统上的虚拟机(VM),请使用基于单根 I/O 虚拟化(SR-IOV)的设备分配。
- 要点:要配置基于 SR-IOV 的 vGPU,您需要为 GPU 设备下载 NVIDIA vGPU 驱动程序,在物理 GPU 设备的虚拟功能 (VF) 上配置 vGPU 实例,并将实例分配给虚拟机。
- 列表:已安装 NVIDIA 软件图形驱动程序。具体步骤,请参阅 NVIDIA 文档中的 RPM 软件包在 Red Hat 发行版上安装 NVIDIA vGPU 软件图形驱动程序。
- 列表:您的 GPU 设备支持特定于供应商的 SR-IOV 设备分配。要检查是否是这种情况,请使用 nvidia-smi 工具,随 NVIDIA 图形驱动程序一起安装: # nvidia-smi -q | grep "Host VGPU Mode" 成功输出: Host VGPU Mode : SR-IOV 要基于不支持 SR-IOV 分配的旧 NVIDIA 设备配置 vGPU,请使用介质设备。具体步骤请参阅在旧设备配置 NVIDIA vGPU。
- 列表:您已为物理 GPU 设备启用了虚拟功能(VF),并获取您要用于 NVIDIA vGPU 的 VF 的插槽、总线、域和功能标识符。具体步骤,请参阅 NVIDIA 文档中的 为支持带有 KVM hypervisor 的 Linux 上的 SR-IOV 的 NVIDIA vGPU 准备虚拟功能。 例如,以下流程使用带有域 0000、bus 41、插槽 02 和功能 3 的 VF。此 VF 的完整 ID 是 0000:41:02.3。
- 列表:如果 NVIDIA 软件安装程序没有创建 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 文件,请在 /etc/modprobe.d/ 中创建一个任何名称的 conf 文件,并在文件中添加以下行: blacklist nouveau options nouveau modeset=0
- 列表:进入您要用于 vGPU 的 VF 目录: # cd /sys/bus/pci/devices/<domain>:<bus>:<slot>.<function>/nvidia 例如: # cd /sys/bus/pci/devices/0000:41:02.3/nvidia
- 列表:可选:确认目录包含 creatable_vgpu_types 和 current_vgpu_type 文件: -r--r--r-- 1 root root 4096 Aug 3 00:39 creatable_vgpu_types -rw-r--r-- 1 root root 4096 Aug 3 00:39 current_vgpu_type
- 命令/配置摘录:
# nvidia-smi -q | grep "Host VGPU Mode"
Host VGPU Mode : SR-IOV16.2.2. 删除 NVIDIA vGPU 设备
- 要点:要更改分配的基于 SR-IOV 的 vGPU 设备的配置,您必须从分配的虚拟机(VM)中删除 vGPU 主机设备。您还可以选择性地取消激活相应虚拟功能 (VF) 中的 vGPU 实例。
- 要点:先决条件
- 列表:您已在主机上的虚拟机中配置了基于 SR-IOV 的 vGPU 设备。具体步骤请参阅配置 nVidia vGPU 设备。
- 列表:要从中删除该设备的虚拟机关闭。
- 列表:识别您要删除的 vGPU 实例使用的 VF。 打开虚拟机的 XML 配置。 # virsh edit <vm-name> 查找类似如下的 hostdev 部分: <hostdev mode='subsystem' type='pci' managed='no' display='on' ramfb='on'> <source> <address domain='0x0000' bus='0x41' slot='0x02' function='0x3'/> </source> </hostdev>
- 列表:打开虚拟机的 XML 配置。 # virsh edit <vm-name>
- 列表:查找类似如下的 hostdev 部分: <hostdev mode='subsystem' type='pci' managed='no' display='on' ramfb='on'> <source> <address domain='0x0000' bus='0x41' slot='0x02' function='0x3'/> </source> </hostdev>
- 列表:从 XML 配置中删除 vGPU hostdev 部分。 这会从虚拟机中删除 vGPU 实例,但对应的 VF 会保留 vGPU。如果要更改 vGPU 类型或从 VF 中删除 vGPU 功能,请执行剩余的步骤。
- 命令/配置摘录:
# virsh edit <vm-name>
<hostdev mode='subsystem' type='pci' managed='no' display='on' ramfb='on'> <source> <address domain='0x0000' bus='0x41' slot='0x02' function='0x3'/> </source> </hostdev>16.2.3. 配置 NVIDIA vGPU 旧设备
- 要点:要在不支持基于单根 I/O 虚拟化(SR-IOV)的 NVIDIA 设备的 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 …
- 列表:您的 GPU 不支持 SR-IOV 设备分配。要进行验证,请使用以下命令: # nvidia-smi -q | grep -i "Host VGPU Mode" 与 SR-IOV 不兼容的 GPU 的输出: Host VGPU Mode : Non SR-IOV
- 列表:下载 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
- 命令/配置摘录:
# 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
# nvidia-smi -q | grep -i "Host VGPU Mode"- 注意:重要 对于现代 vGPU 设备,使用基于 SR-IOV 的 vGPU 分配。具体步骤请参阅配置 NVIDIA vGPU 设备。
16.2.4. 删除 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。因此,您可以重启并将设备附加到不同的虚拟机。
- 列表:如果 & lt;video > 片段之前已从 XML 配置中删除,请在 < ;devices& gt; 部分中恢复它,以确保虚拟机使用虚拟化视频驱动程序。例如: <video> <model type='vga' vram='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video>
- 命令/配置摘录:
# 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'16.2.5. 获取有关您系统的 NVIDIA 传统 vGPU 信息
- 要点:要评估您可用的旧 vGPU 功能,您可以获取系统上关于中介设备的附加信息。
- 要点:您可以获取系统中 NVIDIA 旧 vGPU 介质设备的以下信息:
- 列表:可创建给定类型的 mediated 设备
- 列表:您的系统中已经配置了哪些介质设备。
- 列表:您的 GPU 不支持 SR-IOV 设备分配。要进行验证,请使用以下命令: # nvidia-smi -q | grep -i "Host VGPU Mode" 与 SR-IOV 不兼容的 GPU 的输出: Host VGPU Mode : Non SR-IOV
- 列表:要查看您主机上可以支持 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…
- 列表:NVIDIA vGPU 软件文档
- 命令/配置摘录:
# nvidia-smi -q | grep -i "Host VGPU Mode"
Host VGPU Mode : Non SR-IOV16.2.6. 使用附加的 NVIDIA vGPU 实时迁移虚拟机
- 要点:如果您在虚拟化工作负载中使用虚拟 GPU (vGPU),您可以将连接了 vGPU 的正在运行的虚拟机(VM)实时迁移到另一个 KVM 主机。目前,这只适用于 NVIDIA GPU。
- 要点:先决条件
- 列表:您有一个带有支持此功能的 NVIDIA Virtual GPU 软件驱动程序版本的 NVIDIA GPU。如需更多信息,请参阅相关的 NVIDIA vGPU 文档。
- 列表:您有一个正确配置的 NVIDIA vGPU 分配给了虚拟机。具体步骤请参阅: 管理 NVIDIA vGPU 设备。
- 列表:主机使用 Intel 64 或 AMD64 CPU 架构。
- 列表:NVIDIA 记录了所有 vGPU 迁移的先决条件。如需了解更多详细信息,请参阅相关的 NVIDIA vGPU 文档。
- 列表:所有常规虚拟机迁移的先决条件。详情请参阅 使用命令行迁移虚拟机
- 列表:某些 NVIDIA GPU 功能可以禁用迁移。如需更多信息,请参阅您的图形卡的特定 NVIDIA 文档。
- 命令/配置摘录:
# cp /etc/libvirt/qemu/<vm_config>.xml /etc/libvirt/qemu/<vm_new_config>.xml
<hostdev mode='subsystem' type='pci' managed='no' display='on' ramfb='on'> <source> <address domain='0x0000' bus='0x41' slot='0x02' function='0x3'/> </source> </hostdev>- 注意:注意 也可以实时迁移连接了多个 vGPU 设备的虚拟机。
16.2.7. 用于 NVIDIA vGPU 的远程桌面流服务
- 要点:在启用了 NVIDIA vGPU 或 NVIDIA GPU passthrough 的 RHEL 10 hypervisor 上只支持有限的远程桌面流服务。
- 要点:有关支持详情请查看适当的供应商支持列表。
- 列表:HP ZCentral Remote Boost/Teradici
- 列表:NICE DCV
- 列表:Mechdyne TGX
- 列表:NVIDIA vGPU 软件文档
第 17 章 优化虚拟机性能
- 要点:与主机相比,虚拟机的性能总会有所降低。但是,您可以使用各种方法最小化 RHEL 10 中虚拟化的性能影响,以便您的硬件基础架构资源可以尽可能高效地使用。
17.1. 影响虚拟机性能的因素
- 要点:虚拟机(VM)作为用户空间进程在主机上运行。管理程序需要转换主机的系统资源,以便虚拟机可以使用它们。部分资源由转换消耗,因此虚拟机无法获得与主机相同的性能效率。
17.1.1. 虚拟化对系统性能的影响
- 要点:体虚拟机性能损失的原因包括:
- 要点:虚拟化对虚拟机性能影响的严重性受到各种因素的影响,其中包括:
- 列表:虚拟 CPU(vCPU)是主机上的线,,由 Linux 调度程序处理。
- 列表:VM 不会自动继承主机内核的优化功能,比如 NUMA 或巨页。
- 列表:主机的磁盘和网络 I/O 设置可能会对虚拟机有显著的性能影响。
- 列表:网络流量通常通过基于软件的网桥到达虚拟机。
- 列表:根据主机设备及其型号,特定硬件的模拟可能会产生大量的开销。
- 列表:并行运行的虚拟机数量。
17.1.2. 降低虚拟机性能损失
- 要点:RHEL 10 提供了很多功能,可用于降低虚拟化的负面影响。值得注意的是:
- 要点:其他资源
- 列表:TuneD 服务可以自动优化虚拟机的资源分布和性能。
- 列表:块 I/O 调优可以提高虚拟机块设备(如磁盘)的性能。
- 列表:NUMA 调优可提高 vCPU 性能。
- 列表:可使用各种方式优化虚拟网络。
- 列表:使用 TuneD 优化虚拟机性能
- 列表:优化虚拟机 I/O 性能
- 注意:重要 调优虚拟机性能会对其他虚拟化功能造成负面影响。例如,它可以使迁移修改过的虚拟机更为困难。
17.2. 使用 TuneD 优化虚拟机性能
- 要点:对于优化虚拟机(VM)性能的自动化方法,您可以使用 TuneD 工具。
- 要点:TuneD 是一个调优配置文件交付机制,可为某些工作负载特性配置 RHEL,如 CPU 密集型任务或存储网络吞吐量响应的要求。它提供很多预先配置的调优配置文件,以便在多个特定用例中增强性能并降低功耗。
- 列表:对于 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-profile17.3. 针对特定工作负载的虚拟机性能优化
- 要点:虚拟机(VM)经常专用于执行特定的工作负载。您可以通过优化针对预期工作负载的配置来提高虚拟机的性能。
- 要点:* 如果虚拟机有足够的 CPU 和 RAM 来使用多个 NUMA 节点。
- 注意:注意 虚拟机可以适合多个用例类别。在这种情况下,请应用所有推荐的配置。
- 表格样本(共 7 行):
- 使用案例 | IOThread | vCPU pinning | vNUMA pinning | 巨页 | 多队列
- 数据库 | 对于数据库磁盘 | 是* | 是* | 是* | 是,请查看: multi-queue virtio-blk、virtio-scsi
- 虚拟化网络功能(VNF) | 否 | 是 | 是 | 是 | 是,请参阅: multi-queue virtio-net
- 高性能计算(HPC) | 否 | 是 | 是 | 是 | 否
17.4. 配置虚拟机内存
- 要点:要提高虚拟机(VM)的性能,您可以将额外的主机 RAM 分配给虚拟机。类似地,您可以减少分配给虚拟机的内存量,从而使主机内存可以分配给其他虚拟机或任务。
17.4.1. 内存过量使用
- 要点:为确保主机内存资源的最佳使用,RHEL 中默认启用内存过量使用。
- 要点:使用内存过量使用,您可以为虚拟机分配超过主机可用内存的内存。然后,RHEL 内核会自动将内存分配给需要它的虚拟机。
- 列表:为每个虚拟机分配较少的内存。
- 列表:向主机添加更多的物理内存。
- 列表:使用更大的 swap 空间。
- 列表:虚拟内存参数
- 列表:为红帽平台推荐的 swap 大小是多少?(红帽知识库)
- 注意:重要 如果频繁交换,虚拟机会运行较慢。另外,过度使用会导致系统用尽内存(OOM),这可能会导致 Linux 内核关闭重要的系统进程。 设备分配不支持内存过度使用。这是因为,在使用设备分配时,必须静态预分配所有虚拟机内存,以对分配的设备启用直接内存访问(DMA)。
17.4.2. 使用 virtio-mem 添加和删除虚拟机内存
- 要点:通过使用 virtio-mem 半虚拟内存设备,您可以在运行的虚拟机中动态添加或删除内存,例如在虚拟机间移动内存或重新定义虚拟机内存大小。
- 要点: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 虚拟机中默认被禁用。 有关支持的 Windows 版本列表,请参阅: 认证的客户机操作系统
- 注意:重要 从正在运行的虚拟机中拔出内存在 RHEL 8.10 虚拟机中默认被禁用。 有关支持的 Windows 版本列表,请参阅: 认证的客户机操作系统
- 表格样本(共 4 行):
- 配置名称 | 从虚拟机中拔出内存 | 创建内存区不平衡的风险 | 一个潜在的用例 | 预期工作负载的内存要求
- online_movable | 热插内存可以可靠地拔出。 | 是 | 热插拔相对较少的内存 | 主要是用户空间内存
- auto-movable | 热插内存的可移动部分可以可靠地拔出。 | 最小 | 热插拔大量内存 | 主要是用户空间内存
- online_kernel | 热插拔内存无法可靠地拔出。 | 否 | 不可靠内存拔出是可以接受的。 | 用户空间或内核空间内存
17.4.3. 配置虚拟机以使用巨页
- 要点:在某些情况下,您可以使用巨页而不是默认的 4 KiB 内存页来为虚拟机提高内存分配。例如,巨页可以提高具有高内存使用率的虚拟机的性能,如数据库服务器。
- 要点:先决条件
- 列表:主机被配置为在内存分配中使用巨页。具体说明请参阅 在引导时配置 HugeTLB
- 列表:所选虚拟机关闭。
- 列表:打开所选虚拟机的 XML 配置。例如,要编辑 testguest 虚拟机,请运行以下命令: # virsh edit testguest
- 列表:调整虚拟机的巨页配置。例如,要将虚拟机配置为使用 1 GiB 巨页,请将以下行添加到配置中的 <memoryBacking> 部分中: <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 当您添加 free 和 reserved 巨页的数量(HugePages_Free + HugePages_Rsvd)时,结果必须小于巨页总数(HugePages_Total)。差距是正在运行的虚拟机所使用的巨页数。
- 命令/配置摘录:
# virsh edit testguest
<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>17.5. 优化虚拟机 I/O 性能
- 要点:虚拟机(VM)的输入和输出(I/O)能力可能会显著限制虚拟机的整体效率。要解决这个问题,您可以通过配置块 I/O 参数来优化虚拟机的 I/O。
17.5.1. 在虚拟机中调整块 I/O
- 要点:当一个或多个虚拟机(VM)使用多个块设备(如存储驱动器)时,您可以通过修改其 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 权重。如果上一步没有按预期显示权重,则可能是这个功能与您的主机内核不兼容。
17.5.2. 在虚拟机中配置磁盘 I/O 节流
- 要点:当多个虚拟机(VM)同时运行时,它们可能会使用过量磁盘 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 操作,每秒 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,52428800 …
- 命令/配置摘录:
# 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 /home- 注意:重要 红帽不支持使用 virsh blkdeviotune命令来在 VM 中配置 I/O 节流。 + 有关使用 RHEL 10 作为虚拟机主机时不支持的功能的更多信息,请参阅 RHEL 10 虚拟化中的不支持的功能。
17.5.3. 在存储设备上启用多队列
- 要点:当在虚拟机(VM)中使用 virtio-blk 或 virtio-scsi 存储设备时,您可以使用多队列功能提高存储性能和可扩展性。使用多队列时,每个 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>17.5.4. 配置专用的 IOThreads
- 要点:要提高虚拟机(VM)上磁盘的 I/O 性能,您可以配置专用的 IOThread,用于管理虚拟机磁盘的 I/O 操作。
- 要点:通常,磁盘的 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 存储设备时,将一个专用的 IOThread 分配给 virtio-scsi 控制器。例如,要将 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='0x…
- 列表:评估您的更改对虚拟机性能的影响。详情请查看: 虚拟机性能监控工具
- 命令/配置摘录:
# 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 就足够了。
17.5.5. 配置虚拟磁盘缓存
- 要点:对于密集的 I/O 工作负载,选择最佳缓存模式可能会显著提高虚拟机(VM)性能。
- 要点:KVM hypervisor 提供几个虚拟磁盘缓存模式:
- 列表:如果所选的虚拟机正在运行,请关闭它。
- 列表:编辑所选虚拟机的 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>17.6. 优化虚拟机 CPU 性能
- 要点:与主机中的物理 CPU 非常相似,虚拟 CPU (vCPU)对虚拟机(VM)性能至关重要。优化 vCPU 会对虚拟机的资源效率产生重大影响。
- 要点:优化 vCPU 的一般步骤包括:
- 列表:调整分配给虚拟机的主机 CPU 数。您可以使用命令行或 Web 控制台进行此操作。
- 列表:确保 vCPU 模型与主机的 CPU 型号一致。例如,将 testguest1 虚拟机设置为使用主机的 CPU 型号: # virt-xml testguest1 --edit --cpu host-model 在 ARM 64 系统上,请使用 --cpu host-passthrough。
- 列表:管理内核相同的页面合并(KSM)。
- 列表:如果您的主机使用非统一内存访问 (NUMA) ,您也可以为其虚拟机 配置 NUMA。这会尽可能将主机的 CPU 和内存进程映射到虚拟机的 CPU 和内存进程上。实际上,NUMA 调优为 vCPU 提供了对分配给虚拟机的系统内存更精简的访问,这可以提高 vCPU 的处理效率。
- 命令/配置摘录:
# virt-xml testguest1 --edit --cpu host-model17.6.1. vCPU 过量使用
- 要点:通过使用虚拟 CPU (vCPU)过量使用,您可以有一个设置,其中主机上运行的虚拟机(VM)中的所有 vCPU 总和超过主机上的物理 CPU 数量。
- 要点:当在虚拟机中同时运行比主机上物理提供的更多的核时,您可能会遇到性能下降。
- 列表:分配虚拟机工作负载所需的最小 vCPU 数量,以获得最佳性能。
- 列表:避免在未经过广泛测试的情况下在生产环境中过量使用 vCPU。
- 列表:如果过度使用 vCPU,安全比率通常是在 100% 下负载的 5 个 vCPU 到 1 个物理 CPU。
- 列表:不建议每个物理处理器核分配的总 vCPU 数超过 10 个。
- 列表:监控 CPU 使用率,以防止高负载下出现性能下降。
- 注意:重要 使用 100% 内存或处理资源的应用程序可能会在过量使用的环境中不稳定。因为 CPU 过量使用比率取决于工作负载,所以请不要在生产环境中过量使用内存或 CPU,而无需广泛的测试。
17.6.2. 使用命令行添加和删除虚拟 CPU
- 要点:要优化虚拟机(VM)的 CPU 性能,您可以添加或删除分配给虚拟机的虚拟 CPU(vCPU)。
- 要点:在正在运行的虚拟机中添加或删除 vCPU 称为 vCPU 热插和热拔。请注意,RHEL 10 不支持 vCPU 热插拔,红帽强烈建议不要使用。
- 列表:您的系统使用 Intel 64、AMD64 或 IBM Z 架构。
- 列表:可选:查看所选虚拟机中 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 的主机负载占用。但是,如果需要可热插入虚拟机以暂时提高性能。
- 命令/配置摘录:
# virsh vcpucount testguest maximum config 4 maximum live 2 current config 2 current live 1
# virsh setvcpus testguest 8 --maximum --config17.6.3. 使用 Web 控制台管理虚拟 CPU
- 要点:要查看并配置主机上虚拟机(VM)使用的虚拟 CPU,您可以使用 RHEL 10 web 控制台。
- 要点:先决条件
- 列表:您已安装了 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 拓扑。这可能对 vCPU 性能有用,并可能会影响客户机操作系统中某些软件的功能。如果您的部署不需要不同的设置,请保留默认值。
17.6.4. 在虚拟机中配置 NUMA
- 要点:要提高 NUMA 兼容主机上的虚拟机(VM)性能,您可以使用自动化工具或手动 XML 编辑来配置 Non-Uniform Memory Access(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 服务。 # systemctl start numad
- 列表:可选:手动调整 NUMA 设置。指定您要特别分配给特定虚拟机的主机 NUMA 节点。这可提高虚拟机 vCPU 的主机内存用量。 使用 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 编辑虚拟机的 XML 配置,来将 CPU 和内存资源分配给特定的 NUMA 节点。例如,以下配置将…
- 命令/配置摘录:
# 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 节点的最大内存大小。
17.6.5. 配置虚拟 CPU 固定
- 要点:要提高虚拟机(VM)的 CPU 性能,您可以将虚拟 CPU (vCPU)固定到主机上的特定物理 CPU 线程。这样可确保 vCPU 都有自己的专用物理 CPU 线程,这可以显著提高 vCPU 性能。
- 要点:除了固定 vCPU 外,您还可以将与指定虚拟机关联的 QEMU 进程线程固定到特定的主机 CPU 中,以优化 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,317.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=10000017.6.7. 调整 CPU 权重
- 要点:要提高虚拟机的 CPU 性能,您可以使用 CPU weight 设置为该虚拟机分配 CPU 时间。
- 要点:CPU 权重 设置控制与其他正在运行的虚拟机相比,虚拟机(VM)接收的 CPU 时间。当您增加特定虚拟机的 CPU 权重时,该虚拟机会收到相对于其他虚拟机的更多 CPU 时间。
- 列表:检查虚拟机的当前 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 : 017.6.8. 启用和禁用内核相同页合并
- 要点:要优化虚拟机的 CPU 效率,您可以在主机上启用或禁用内核同页合并(KSM)。
- 要点:KSM 通过在虚拟机间共享相同的内存页面来提高内存密度。因此,启用 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 但是,这个命令会增加内存使用率,并可能导致主机或虚拟机上出现性能问题。
17.7. 优化虚拟机网络性能
- 要点:由于虚拟机的网络接口控制器(NIC)的虚拟性质,虚拟机会丢失其分配的主机网络带宽的一部分。这可能会降低虚拟机的工作负载效率。要最小化对虚拟 NIC(vNIC)吞吐量的负面影响,您可以使用几种方法。
- 要点:流程
- 列表:使用以下任一方法并观察它是否对虚拟机网络性能有帮助: 启用 vhost_net 模块 在主机上,确保启用了 vhost_net 内核特性: # lsmod | grep vhost vhost_net 32768 1 vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net 如果这个命令的输出为空,请启用 vhost_net 内核模块: # modprobe vhost_net
- 列表:启用 vhost_net 模块 在主机上,确保启用了 vhost_net 内核特性: # lsmod | grep vhost vhost_net 32768 1 vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net 如果这个命令的输出为空,请启用 vhost_net 内核模块: # modprobe vhost_net
- 列表:配置 multi-queue virtio-net 要为虚拟机配置 multi-queue virtio-net 特性,请使用 virsh edit 命令来编辑虚拟机的 XML 配置。在 XML 中,将以下内容添加到 <devices> 部分,并将 N 替换为虚拟机中的 vCPU 个数,最多 16 个: <interface type='network'> <source network='default'/> <model type='virtio'/> <driver name='vhost' queues='N'/> </interface> 如果虚拟机正在运行,重启它以使更改生效。 批量网络数据包 在带有较长的传输路…
- 列表:批量网络数据包 在带有较长的传输路径的 Linux VM 配置中,在将数据包提交到内核前对其进行批处理可能会提高缓存利用率。要配置数据包批处理,请在主机上使用以下命令,并将 tap0 替换为虚拟机使用的网络接口的名称: # ethtool -C tap0 rx-frames 64
- 列表:SR-IOV 如果您的主机 NIC 支持单根 I/O 虚拟化(SR-IOV),请为您的 vNIC 使用 SR-IOV 设备分配。 如需更多信息,请参阅管理 SR-IOV 设备。
- 列表:虚拟网络的工作方式
- 命令/配置摘录:
# lsmod | grep vhost vhost_net 32768 1 vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net
# modprobe vhost_net17.8. 虚拟机性能监控工具
- 要点:要识别哪些进程消耗最多的虚拟机资源,以及虚拟机性能的哪个方面需要优化,您可以使用性能诊断工具,如 perf kvm 和 numastat。
- 要点:默认操作系统性能监控工具
- 列表:在 RHEL 10 主机上,以 root 用户身份使用 top 工具或 system monitor 应用程序,并在输出中查找 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% …第 18 章 保护虚拟机
- 要点:作为带有虚拟机(VM)的 RHEL 10 系统管理员,您可以采取各种措施来降低客户机和主机操作系统被恶意软件破坏的风险。
18.1. 虚拟机中的安全性是如何工作的
- 要点:在使用虚拟机(VM)时,保护您的环境需要额外的注意事项。
- 要点:单个主机机器可以托管多个客户机操作系统。这些系统通过 hypervisor 与主机连接,通常也通过虚拟网络连接。因此,每个虚拟机都可以用作使用恶意软件攻击主机的向量,主机可用作攻击任何虚拟机的向量。
- 列表:保护虚拟机的最佳实践
- 列表:虚拟机安全性的默认功能
18.2. 保护虚拟机的最佳实践
- 要点:要显著降低虚拟机(VM)被恶意代码影响的风险,并用作攻击向量来破坏主机系统,您可以使用各种方法增加系统的安全性。
- 要点:在客户端中:
- 列表:象保护物理机器一样保护虚拟机的安全。增强安全性的具体方法取决于客户机操作系统(OS)。 如果您的虚拟机正在运行 RHEL 10,有关提高客户端系统安全性的详细说明,请参阅 保护 RHEL 10 。
- 列表:当远程管理虚拟机时,请使用加密的工具(如 SSH)和网络协议(如 SSL)连接到虚拟机。
- 列表:确定 SELinux 处于 Enforcing 模式: # getenforce Enforcing 如果 SELinux 被禁用或者处于 Permissive 模式,请参阅使用 SELinux 文档来激活 Enforcing 模式。 注意 SELinux Enforcing 模式也启用了 sVirt RHEL 10 功能。这是用于虚拟化的一组特殊的 SELinux 布尔值,可手动调整,以便进行细致的虚拟机安全管理。
- 列表:使用带有 安全引导 的虚拟机: 安全引导可确保虚拟机运行加密签名的操作系统。这有助于防止对客户机操作系统的攻击,并改进了主机操作系统的保护。 只有在 AMD64、Intel 64 或 ARM 64 主机中使用 UEFI 固件时,才能应用安全引导。具体步骤请参阅创建安全引导虚拟机。
- 列表:不要使用 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 布尔值,可手动调整,以便进行细致的虚拟机安全管理。
18.3. 虚拟机安全性的默认功能
- 要点:libvirt 软件套件提供许多安全功能,在 RHEL 10 中使用虚拟化时会自动启用
- 要点:除了手动提高虚拟机(VM)的安全性外,您还可以使用它们,这在 保护虚拟机的最佳实践 中列出。
18.4. 限制虚拟机用户可以使用哪些操作
- 要点:在某些情况下,在 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/r…
- 列表:在 /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' {} +18.5. 配置 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 密码以纯文本形式保存在虚拟机的配置中,因此要使密码有效,用户不能显示虚拟机配置。
18.6. 用于虚拟化的 SELinux 布尔值
- 要点:RHEL 10 提供 sVirt 功能,这是一组专用的 SELinux 布尔值,其在 SELinux 处于 Enforcing 模式下的主机上自动启用了。
- 要点:要在 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 | 启用沙盒容器来发送审核信息。
18.7. 创建安全引导 Linux 虚拟机
- 要点:要提高虚拟化主机的安全性,您可以创建使用安全引导功能的 Linux 虚拟机(VM)。安全引导可确保虚拟机运行加密签名的操作系统(OS)。
- 要点:安全引导有助于防止某些类型的受客户端操作系统攻击。它还作为主机操作系统的额外保护层,位于虚拟化已由虚拟化提供的隔离之上。如果客户机操作系统支持它,启用安全引导来提高虚拟机的安全性。
- 列表:您的主机系统使用 AMD64、Intel 64 或 64 位 ARM 架构。 重要 在 64 位 ARM 系统中,红帽仅提供安全引导虚拟机 作为技术预览,因此不建议在生产环境中使用它们。
- 列表:EDK2 软件包安装在您的主机上: 如果您的主机使用 AMD64 或 Intel 64 架构,则必须安装 edk2-ovmf 软件包: # dnf install edk2-ovmf 如果您的主机使用 64 位 ARM,则需要 edk2-aarch64。 # dnf install edk2-aarch64
- 列表:如果您的主机使用 AMD64 或 Intel 64 架构,则必须安装 edk2-ovmf 软件包: # dnf install edk2-ovmf
- 列表:如果您的主机使用 64 位 ARM,则需要 edk2-aarch64。 # dnf install edk2-aarch64
- 列表:虚拟机使用正确的机器类型: 在 AMD64 和 Intel 64 主机上,虚拟机必须使用 Q35 机器类型。 在 64 位 ARM 主机上,虚拟机必须使用 virt 机器类型。
- 列表:在 AMD64 和 Intel 64 主机上,虚拟机必须使用 Q35 机器类型。
- 命令/配置摘录:
# dnf install edk2-ovmf
# dnf install edk2-aarch64- 注意:注意 当您在使用 AMD64 或 Intel 64 CPU 架构的主机上使用 UEFI 固件创建虚拟机时,虚拟机默认使用安全引导。
- 注意:重要 在 64 位 ARM 系统中,红帽仅提供安全引导虚拟机 作为技术预览,因此不建议在生产环境中使用它们。
18.8. 在 IBM Z 上配置 IBM Secure Execution
- 要点:当使用 IBM Z 硬件运行 RHEL 10 主机时,您可以通过为虚拟机配置 IBM Secure Execution 功能来提高虚拟机(VM)的安全性。
- 要点:IBM Secure Execution(也称 Protected Virtualization)可防止主机系统访问虚拟机的状态和内存内容。因此,即使主机被攻击,也无法用作攻击客户端操作系统的向量。另外,安全执行也可以用来防止不可信主机从虚拟机获取敏感信息。
18.8.1. 为 IBM 安全执行手动配置虚拟机
- 要点:您可以通过手动登录到客户机虚拟机并在客户机OS系统中执行配置步骤来配置 IBM Secure Execution。此方法提供对配置过程的直接控制,适用于需要验证每个步骤的生产环境。
- 要点:先决条件
- 列表:系统硬件是以下之一: IBM z15 或更高版本 IBM LinuxONE III 或更高版本
- 列表:IBM z15 或更高版本
- 列表:IBM LinuxONE III 或更高版本
- 列表:为您的系统启用安全执行功能。要验证,请使用: # grep facilities /proc/cpuinfo | grep 158 如果这个命令显示任何输出,代表您的 CPU 与安全执行兼容。
- 列表:内核包含对安全执行的支持。要确认,请使用: # ls /sys/firmware | grep uv 如果命令生成任何输出,那么内核支持安全执行。
- 列表:主机 CPU 型号包含 解包 功能。要确认,请使用: # virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/> 如果命令生成上述输出,则您的 CPU 主机型号与安全执行兼容。
- 命令/配置摘录:
# grep facilities /proc/cpuinfo | grep 158
# ls /sys/firmware | grep uv- 注意:重要 对于保护生产环境,请参阅 有关使用安全执行完全保护工作负载的 IBM 文档,其解释了如何进一步保护您的工作负载。
18.8.2. 从 IBM Secure Execution 的主机配置虚拟机
- 要点:您可以使用 guestfs-tools 软件包直接从主机配置 IBM Secure Execution,而无需引导虚拟机。但是,此方法仅适用于快速配置多个虚拟机或自动设置过程的测试和开发环境。
- 要点:先决条件
- 列表:系统硬件是以下之一: IBM z15 或更高版本 IBM LinuxONE III 或更高版本
- 列表:IBM z15 或更高版本
- 列表:IBM LinuxONE III 或更高版本
- 列表:为您的系统启用安全执行功能。要验证,请使用: # grep facilities /proc/cpuinfo | grep 158 如果这个命令显示任何输出,代表您的 CPU 与安全执行兼容。
- 列表:内核包含对安全执行的支持。要确认,请使用: # ls /sys/firmware | grep uv 如果命令生成任何输出,那么内核支持安全执行。
- 列表:主机 CPU 型号包含 解包 功能。要确认,请使用: # virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/> 如果命令生成上述输出,则您的 CPU 主机型号与安全执行兼容。
- 命令/配置摘录:
# grep facilities /proc/cpuinfo | grep 158
# ls /sys/firmware | grep uv- 注意:重要 对于保护生产环境,请参阅 有关使用安全执行完全保护工作负载的 IBM 文档,其解释了如何进一步保护您的工作负载。
18.9. 将加密 coprocessors 附加到 IBM Z 上的虚拟机
- 要点:要在 IBM Z 主机上的虚拟机中使用硬件加密,请从加密的 coprocessor 设备创建介质设备并将其分配给预期的虚拟机。
- 要点:先决条件
- 列表:您的主机运行在 IBM Z 硬件上。
- 列表:加密 coprocessor 与设备分配兼容。要进行确认,请确保协处理器的 类型 列为 CEX4 或更高版本。 # lszcrypt -V CARD.DOMAIN TYPE MODE STATUS REQUESTS PENDING HWTYPE QDEPTH FUNCTIONS DRIVER -------------------------------------------------------------------------------------------- 05 CEX5C CCA-Coproc online 1 0 11 08 S--D--N-- cex4card 05.0004 CEX5C CCA-Copro…
- 列表:vfio_ap 内核模块已加载 。要验证,请使用: # lsmod | grep vfio_ap vfio_ap 24576 0 [...] 要载入模块,请使用: # modprobe vfio_ap
- 列表:s390utils 版本支持 ap 处理: # lszdev --list-types ... ap Cryptographic Adjunct Processor (AP) device ...
- 列表:获取您要分配给虚拟机的设备的十进制值。例如,对于设备 05.0004 和 05.00ab : # echo "obase=10; ibase=16; 04" | bc 4 # echo "obase=10; ibase=16; AB" | bc 171
- 列表:在主机上,将设备重新分配给 vfio-ap 驱动程序: # chzdev -t ap apmask=-5 aqmask=-4,-171 注意 要永久分配设备,请使用 -p 标志。
- 命令/配置摘录:
# lszcrypt -V CARD.DOMAIN TYPE MODE STATUS REQUESTS PENDING HWTYPE QDEPTH FUNCTIONS DRIVER -------------------------------------------------------------------------------------------- 05 CEX5C CCA-Coproc online 1 0 11 08 S--D--N-- cex4card 05.0004 CEX5C CCA-Coproc online 1 0 11 08 S--D--N-- cex4queue 05.00ab CEX5C CCA-Coproc online 1 0 11 08 S--D--N-- cex4queue
# lsmod | grep vfio_ap vfio_ap 24576 0 [...]- 注意:注意 要永久分配设备,请使用 -p 标志。
18.10. 启用 SEV-SNP
- 要点:安全加密虚拟化安全管理(SEV-SNP)是一个基于硬件的安全特性,可为虚拟机(VM)提供强大的内存加密和完整性保护。这会将虚拟机与虚拟机监控程序和其他主机系统软件隔离。SEV-SNP 仅适用于 AMD CPU。
- 注意:重要 在 RHEL 主机上启用 SEV-SNP 只是一个技术预览。但是,完全支持在 RHEL 客户机上启用 SEV-SNP。
18.10.1. 在 RHEL 主机上启用 SEV-SNP
- 要点:要在 RHEL 主机上启用 Secure Encrypted Virtualization-Secure Nested Paging (SEV-SNP),您必须确保您的系统满足先决条件,然后安装 snphost 和 libvirt-daemon-kvm 软件包。
- 要点:SEV-SNP 是基于硬件的安全功能,可为虚拟机(VM)提供强大的内存加密和完整性保护。这会将虚拟机与虚拟机监控程序和其他主机系统软件隔离。SEV-SNP 仅适用于 AMD CPU。
- 列表:您的主机使用以下硬件和软件: 支持 SEV-SNP 的 AMD CPU,如 AMD EPYC 系列中支持的模型 RHEL 10.0 或更高版本 SEV 固件版本 1.55 或更高版本 用于 SNP 内存覆盖范围配置的足够的系统内存
- 列表:支持 SEV-SNP 的 AMD CPU,如 AMD EPYC 系列中支持的模型
- 列表:RHEL 10.0 或更高版本
- 列表:SEV 固件版本 1.55 或更高版本
- 列表:用于 SNP 内存覆盖范围配置的足够的系统内存
- 列表:UEFI CPU 菜单中启用了以下设置: SVM 模式 (安全虚拟机模式) SEV-SNP 支持 或 安全嵌套分页 SMEE (安全内存加密)
- 命令/配置摘录:
# dnf install snphost libvirt-daemon-kvm
# virt-host-validate qemu QEMU: Checking for hardware virtualization: PASS QEMU: Checking if device '/dev/kvm' exists: PASS QEMU: Checking if device '/dev/kvm' is accessible: PASS QEMU: Checking if device '/dev/vhost-net' exists: PASS QEMU: Checking if device '/dev/net/tun' exists: PASS QEMU: Checking for cgroup 'cpu' controller support: PASS QEMU: Checking for cgroup 'cpuacct' controller support: PASS QEMU: Checking for cgroup 'cpuset' controller support: PASS QEMU: Checking for cgroup 'memory' controller support: PASS QEMU: Checking for cgroup 'devices' controller support: PASS QEMU: Checking for cgroup 'blkio' controller suppor…- 注意:重要 在 RHEL 主机上使用 SEV-SNP 只是一个技术预览。红帽产品服务等级协议(SLA)不支持技术预览功能,且功能可能并不完善。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。 有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
18.10.2. 在 RHEL 客户端中启用 SEV-SNP
- 要点:要在 RHEL 虚拟机(VM)中启用安全加密虚拟化安全虚拟化安全管理(SEV-SNP),您可以在创建虚拟机时应用 SEV-SNP 配置。另外,您可以通过编辑虚拟机配置在现有 RHEL 虚拟机中启用 SEV-SNP。
- 要点:SEV-SNP 是基于硬件的安全功能,可为虚拟机提供强大的内存加密和完整性保护。这会将虚拟机与虚拟机监控程序和其他主机系统软件隔离。SEV-SNP 仅适用于 AMD CPU。
- 列表:SEV-SNP 在您的 RHEL 主机上被启用。具体步骤,请参阅在 RHEL 主机上启用 SEV-SNP
- 列表:主机安装了 libvirt、virt-install 和 virt-xml
- 列表:虚拟机使用受支持的 RHEL 版本作为客户机操作系统: RHEL 9.2 或更高版本 RHEL 10.0 或更高版本
- 列表:RHEL 9.2 或更高版本
- 列表:RHEL 10.0 或更高版本
- 列表:要创建启用了 SEV-SNP 的新 RHEL 虚拟机: 使用带有- launchSecurity sev-snp,policy=0x30000 选项的 virt-install 工具。例如: # virt-install \ --name <vm_name> --os-info rhel9.6 --memory 2048 --vcpus 2 \ --boot uefi --import --disk /var/lib/libvirt/images/disk.qcow2 \ --graphics none --console pty,target_type=serial \ --launchSecurity sev-snp,…
- 命令/配置摘录:
# virt-install \ --name <vm_name> --os-info rhel9.6 --memory 2048 --vcpus 2 \ --boot uefi --import --disk /var/lib/libvirt/images/disk.qcow2 \ --graphics none --console pty,target_type=serial \ --launchSecurity sev-snp,policy=0x30000
# virsh shutdown <vm_name>- 注意:重要 检查 /dev/sev_guest 的存在性证明虚拟机已经配置并在正确运行。要证明虚拟机使用 SEV-SNP 来保护它针对恶意主机,您必须对客户机执行加密。 有关测试的更多信息,请参阅有关 机密计算测试(Red Hat Blog)的信息。
18.11. 启用 TDX
- 要点:信任域扩展(TDX)是基于硬件的安全功能,可为虚拟机(VM)提供强大的内存加密和完整性保护。这会将虚拟机与虚拟机监控程序和其他主机系统软件隔离。TDX 仅适用于 Intel CPU。
- 注意:重要 在 RHEL 主机上启用 TDX 只是一个技术预览。但是,完全支持在 RHEL 客户机上启用 TDX。
18.11.1. 在 RHEL 主机上启用 TDX
- 要点:要在 RHEL 主机上启用信任域扩展(TDX),您必须确保您的系统满足先决条件,然后安装 libvirt-daemon-kvm 和 tdx-qgs 软件包。
- 要点:TDX 是基于硬件的安全功能,可为虚拟机(VM)提供强大的内存加密和完整性保护。这会将虚拟机与虚拟机监控程序和其他主机系统软件隔离。TDX 仅适用于 Intel CPU。
- 列表:支持 TDX 的 Intel CPU,如第 5 代 Intel Xeon 可扩展处理器或更新版本
- 列表:您的主机使用以下硬件和软件: RHEL 10.1 或更高版本 TDX 固件版本 1.5 或更高版本
- 列表:RHEL 10.1 或更高版本
- 列表:TDX 固件版本 1.5 或更高版本
- 列表:UEFI CPU 菜单中启用了以下设置: Software Guard Extensions (SGX) SGX Auto MP Registration Agent 内存加密总数(TME) Memory Encryption Multi-Tenant (TME-MT) 信任域扩展(TDX) TDX Secure Arbitration Mode Loader (SEAM Loader)
- 列表:Software Guard Extensions (SGX)
- 命令/配置摘录:
# dnf install libvirt-daemon-kvm tdx-qgs
# grubby --update-kernel=ALL --args="nohibernate intel_iommu=on"- 注意:重要 在 RHEL 主机上使用 TDX 只是一个技术预览。红帽产品服务等级协议(SLA)不支持技术预览功能,且功能可能并不完善。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。 有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
18.11.2. 在 RHEL 客户端中启用 TDX
- 要点:要在 RHEL 虚拟机(VM)中启用域扩展(TDX)功能,您可以在创建虚拟机时应用 TDX 配置。另外,您可以通过编辑虚拟机配置在现有 RHEL 虚拟机中启用 TDX。
- 要点:TDX 是基于硬件的安全功能,可为虚拟机提供强大的内存加密和完整性保护,可将虚拟机与虚拟机监控程序和其他主机系统软件隔离开来。TDX 仅适用于 Intel CPU。
- 列表:在 RHEL 主机上启用 TDX。具体步骤请参阅 在 RHEL 主机上启用 TDX
- 列表:主机安装了 libvirt、virt-install 和 virt-xml。
- 列表:虚拟机使用受支持的 RHEL 版本作为客户机操作系统: RHEL 9.6 或更高版本 RHEL 10.0 或更高版本
- 列表:RHEL 9.6 或更高版本
- 列表:RHEL 10.0 或更高版本
- 列表:要创建启用了 TDX 的新 RHEL 虚拟机: 使用带有- launchSecurity tdx,quoteGenerationService=on 选项的 virt-install 工具。例如: # virt-install \ --name <vm_name> --os-info rhel9.6 --memory 2048 --vcpus 2 \ --boot uefi --import --disk /var/lib/libvirt/images/disk.qcow2 \ --graphics none --console pty,target_type=serial \ --launchSecurity tdx,q…
- 命令/配置摘录:
# virt-install \ --name <vm_name> --os-info rhel9.6 --memory 2048 --vcpus 2 \ --boot uefi --import --disk /var/lib/libvirt/images/disk.qcow2 \ --graphics none --console pty,target_type=serial \ --launchSecurity tdx,quoteGenerationService=on
# virsh shutdown <vm_name>- 注意:注意 TDX 与 kdump 不兼容。在虚拟机中启用 TDX 会导致 kdump 在那个虚拟机中失败。
- 注意:重要 检查 /dev/tdx_guest 的存在性证明了虚拟机的配置并在正确运行。为了证明虚拟机使用 TDX 来保护它免受恶意主机的加密,您必须对客户机执行加密。 有关测试的更多信息,请参阅有关 机密计算测试(Red Hat Blog)的信息。
第 19 章 在主机及其虚拟机间共享文件
- 要点:您可能经常需要在主机系统和其运行的虚拟机(VM)之间共享数据。要快速高效地完成此操作,您可以使用 virtio 文件系统(virtiofs)。
19.1. 使用命令行在主机和 Linux 虚拟机之间共享文件
- 要点:当使用 RHEL 10 作为 hypervisor 时,您可以使用 virtiofs 功能在主机系统及其虚拟机(VM)之间共享文件。
- 要点:先决条件
- 列表:虚拟化 已在 RHEL 10 主机上安装并启用。
- 列表:您要与虚拟机共享的目录已存在。如果您不想共享任何现有目录,请创建一个新目录,例如:shared-files。 # mkdir /root/shared-files
- 列表:您要与其共享文件的虚拟机使用 Linux 发行版作为其客户机操作系统。
- 列表:对于您要与虚拟机共享的主机的每个目录,请在虚拟机 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-name19.2. 使用 web 控制台在主机和 Linux 虚拟机之间共享文件
- 要点:要在主机系统及其虚拟机(VM)之间共享文件,您可以在 RHEL web 控制台中使用 virtiofs 功能。
- 要点:先决条件
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:要与虚拟机共享的目录。如果您不想共享任何现有目录,请创建一个新目录,例如:shared-files。 # mkdir /home/shared-files
- 列表:您要与之共享数据的虚拟机使用 Linux 发行版作为其客户机操作系统。
- 列表:在 Virtual Machines 接口中,点击您要共享文件的虚拟机。 这时将打开一个新页面,其中有一个 Overview 部分,其中包含有关所选虚拟机和 Console 部分的基本信息。
- 列表:滚动到 Shared directories。 Shared directory 部分显示由该虚拟机共享的主机文件和目录的信息,以及用来 添加 或 删除 共享目录的选项。
- 列表:单击 Add shared directory。 此时会打开 与客户机共享主机目录 对话框。
- 命令/配置摘录:
# mkdir /home/shared-files第 20 章 使用命令行删除主机和虚拟机之间共享的文件
- 要点:要在主机和虚拟机(VM)之间停止共享目录,您必须从虚拟机 XML 配置中删除目录配置。
- 要点:先决条件
- 列表:您已在客户端操作系统中找出挂载点和目标共享。
- 列表:您已停止了当前读取和写入共享目录的任何服务或应用程序。
- 列表:目录不用作其他挂载或符号链接的源。
- 列表:打开虚拟机的 XML 配置。 # virsh edit <vm-name>
- 列表:找到与共享目录对应的 <filesystem > 条目,并将其删除。该条目类似如下: <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>
- 列表:保存配置。
- 命令/配置摘录:
# virsh edit <vm-name>
<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>20.1. 使用 web 控制台删除主机和 Linux 虚拟机之间共享的文件
- 要点:要使用 virtiofs 功能删除主机系统及其虚拟机(VM)之间共享的文件,您可以使用 RHEL web 控制台。
- 要点:先决条件
- 列表:Web 控制台 VM 插件 已安装在您的系统上。
- 列表:您要删除的共享目录不再被虚拟机使用。
- 列表:在 Virtual Machines 界面中,点击您要从中删除共享文件的虚拟机。 这时将打开一个新页面,其中有一个 Overview 部分,其中包含有关所选虚拟机和 Console 部分的基本信息。
- 列表:滚动到 Shared directories。 Shared directories 部分显示与该虚拟机共享的主机文件和目录的信息,以及 添加 或 删除 共享目录的选项。
- 列表:点击您要与虚拟机解除共享的目录旁边的 Remove。 此时会打开 Remove filesystem 对话框。
- 列表:点击 Remove。 所选目录与虚拟机解除共享。
第 21 章 诊断虚拟机问题
- 要点:使用虚拟机(VM)时,您可能会遇到不同级别和严重性的问题。对于更复杂的问题,您可能需要捕获与虚拟机相关的数据和日志来报告或诊断问题。
- 要点:以下章节提供了有关生成日志、诊断一些常见虚拟机问题以及报告这些问题的详细信息。
21.1. 生成 libvirt 调试日志
- 要点:要诊断虚拟机(VM)问题,生成和查看 libvirt 调试日志会很有帮助。当请求支持解决与虚拟机相关的问题时,附加调试日志也很有用。
21.1.1. 了解 libvirt 调试日志
- 要点:调试日志是文本文件,其中包含关于虚拟机(VM)运行期间所发生的事件的数据。日志提供有关服务器端功能的信息,如主机库和 libvirt 守护进程,并包含所有运行的虚拟机的标准错误输出 (stderr)。
- 要点:调试日志记录默认不启用,必须在 libvirt 启动时启用。您可以永久启用 libvirt 调试日志,或者只为当前会话启用 libvirt 调试日志。
- 列表:在运行时启用 libvirt 调试日志
- 列表:永久启用 libvirt 调试日志
- 列表:将 libvirt 调试日志附加到支持请求中
21.1.2. 永久启用 libvirt 调试日志
- 要点:要确保您的虚拟化主机自动记录调试信息,请将 libvirt 调试日志配置为在 libvirt 启动时自动启用。
- 要点:默认情况下,virtqemud 是 RHEL 10 中的主 libvirt 守护进程。要在 libvirt 配置中进行持久性更改,您必须编辑 /etc/libvirt 目录中的 virtqemud.conf 文件。
- 列表:在编辑器中打开 virtqemud.conf 文件。
- 列表:根据您的要求替换或设置过滤器。 Expand 表 21.1. 调试过滤器的值 1 记录 libvirt 生成的所有消息。 2 记录所有非调试信息。 3 记录所有警告和错误消息。这是默认值。 4 仅记录错误消息。 Show more 日志过滤器的守护进程设置示例 以下设置: 记录来自 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/l…
- 列表:记录来自 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 守护进程时,因为重启可以解决这个问题。
- 列表:当另一个进程(如迁移或备份)同时运行时。
- 列表:当您要在不编辑配置文件或重启 守护进程的情况下尝试 命令时。
- 列表:确保 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 日志过滤器的 virt-admin 设置示例 以下命令: 记录来自 远程、util.json 和 rpc 层的所有错误和警告消息 仅记录来自 event 层的错误消息。 # virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
- 命令/配置摘录:
# 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)内核转储保存有关虚拟机状态的信息,以帮助您调试它。
- 要点:虚拟机需要大量运行的进程来准确和高效地工作。在某些情况下,运行的虚拟机在使用时可能会意外终止或出现故障。重启虚拟机可能会导致数据被重置或丢失,因此很难诊断导致虚拟机崩溃的确切问题。
21.2.2. 创建虚拟机内核转储文件
- 要点:虚拟机(VM)内核转储包含在任何给定的时间有关虚拟机状态的详细信息。如果虚拟机出现故障或突然关闭,您可以使用这些信息来帮助检测问题。
- 要点:先决条件
- 列表:请确定您有足够的磁盘空间保存该文件。请注意,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 重要 crash 工具不再支持 virsh dump 命令的默认文件格式。要使用 crash 分析内核转储文件,您必须使用 --memory-only 选项创建文件。 另外,在创建内核转…
- 列表:开一个支持问题单
- 命令/配置摘录:
# 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 /…
- 列表:GNU Debugger (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 章 备份和恢复虚拟机
- 要点:如果您的当前主机不可用或无法正常工作,请确保您不会丢失虚拟机的设置和数据,请备份虚拟机的配置和存储。之后,对于灾难恢复,您可以创建一个使用备份的配置和存储的新虚拟机。
- 注意:注意 如果您计划创建备份以便在主机正常工作时恢复虚拟机,则使用虚拟机快照可能更高效。
22.1. 备份虚拟机
- 要点:要防止主机失败和存储崩溃,您可以使用 libvirt 工具保存其 XML 配置和磁盘数据来备份虚拟机。
- 要点:流程
- 列表:将虚拟机的 XML 配置保存到单独的文件中。例如,要将 testguest1 虚拟机的配置保存到 /home/backup/testguest1-backup.xml 文件中,请使用以下命令: # virsh dumpxml testguest1 > /home/backup/testguest1-backup.xml
- 列表:备份虚拟机的磁盘。为此,请使用 virsh backup-begin 工具。
- 列表:可选:自定义备份设置。默认情况下,libvirt 在与原始磁盘相同的目录中的虚拟机中创建所有磁盘的副本。如果要对备份使用不同的配置,请使用所需设置创建一个 XML 文件。例如: <domainbackup> <disks> <disk name='vda' backup='yes'/> <disk name='vdb' type='file'> <target file='/home/backup/vdb.backup'/> <driver type='raw'/> </disk> <disk name='vdc' backup='no'/> </disks> </domainbackup> 此示例配置确保 vda…
- 列表:启动虚拟机。 # virsh start <vm_name>
- 列表:使用 virsh backup-begin 工具备份虚拟机磁盘。以下命令使用默认的备份设置,它会创建虚拟机使用的所有磁盘的副本,并将它们保存在与原始磁盘相同的目录中 # virsh backup-begin <vm-name> 另外,要应用自定义备份设置,您可以指定之前创建的备份 XML 配置。 # virsh backup-begin <vm-name> --backupxml <backup-XML-location>
- 列表:确保备份操作已完成。 # virsh domjobinfo <vm-name> --completed 成功输出示例: Job type: Completed Operation: Backup Time elapsed: 20704 ms File processed: 40.000 GiB File remaining: 0.000 B File total: 40.000 GiB
- 命令/配置摘录:
# virsh dumpxml testguest1 > /home/backup/testguest1-backup.xml
<domainbackup> <disks> <disk name='vda' backup='yes'/> <disk name='vdb' type='file'> <target file='/home/backup/vdb.backup'/> <driver type='raw'/> </disk> <disk name='vdc' backup='no'/> </disks> </domainbackup>22.2. 恢复虚拟机
- 要点:要对虚拟机执行灾难恢复,您可以通过从保存的 XML 配置和磁盘镜像中定义新虚拟机来从备份中恢复它。
- 要点:先决条件
- 列表:您已创建了虚拟机的 XML 配置和存储的备份。具体步骤请参阅 备份虚拟机。
- 列表:检查虚拟机的备份 XML 配置以了解特定的存储设置。 # cat </path/to/backup.xml> output 部分示例: <disk type='file' device='disk'> <driver name='qemu' type='qcow2' discard='unmap'/> <source file='/var/lib/libvirt/images/vm-name.qcow2' index='3'/>
- 列表:将备份磁盘移到备份 XML 中指定的位置,并确保其名称与 XML 中的值对应。
- 列表:根据备份 XML 定义新虚拟机。 # virsh define --file </path/to/backup.xml>
- 列表:可选:修改新创建的虚拟机的 XML 配置,以调整与原始主机(如网络)不同的设置。 # virsh edit <vm_name>
- 列表:启动虚拟机并检查客户端操作系统是否已正确恢复。 # virsh start <vm_name>
- 命令/配置摘录:
# cat </path/to/backup.xml>
<disk type='file' device='disk'> <driver name='qemu' type='qcow2' discard='unmap'/> <source file='/var/lib/libvirt/images/vm-name.qcow2' index='3'/>第 23 章 创建嵌套虚拟机
- 要点:如果您需要与本地主机不同的主机操作系统,您可以使用嵌套虚拟机(VM)。这消除了对其他物理硬件的需求。
- 注意:警告 在大多数环境中,嵌套虚拟化在 RHEL 10 中仅作为 技术预览 提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
23.1. 什么是嵌套虚拟化?
- 要点:通过嵌套虚拟化,您可以在其他虚拟机中运行虚拟机(VM)。在物理主机上运行的标准虚拟机也可以充当第二个 hypervisor,并创建自己的虚拟机。
- 要点:因为第二个虚拟化级别会显著降低性能,所以它主要用于开发和测试。
- 列表:在受限环境中调试虚拟机监控程序
- 列表:在有限的物理资源中测试较大的虚拟部署
- 列表:对嵌套虚拟化的支持限制
- 注意:警告 在大多数环境中,嵌套虚拟化在 RHEL 10 中仅作为 技术预览 提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
23.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 及更新版本
23.3. 在 Intel 上创建嵌套虚拟机
- 要点:要在 Intel 主机上创建 L2 嵌套虚拟机(VM),您必须在 L0 主机和 L1 虚拟机上启用和配置嵌套虚拟化功能。
- 要点:先决条件
- 列表:运行 L1 虚拟机的 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 中仅作为 技术预览 提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
23.4. 在 AMD 上创建嵌套虚拟机
- 要点:要在 AMD 主机上创建 L2 嵌套虚拟机(VM),您必须在 L0 主机和 L1 虚拟机上启用和配置嵌套虚拟化功能。
- 要点:先决条件
- 列表:运行 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 中仅作为 技术预览 提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
23.5. 在 IBM Z 上创建嵌套的虚拟机
- 要点:要在 IBM Z 主机上创建 L2 嵌套虚拟机(VM),您必须在 L0 主机和 L1 虚拟机上启用和配置嵌套虚拟化功能。
- 要点:先决条件
- 列表:运行 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 中仅作为 技术预览 提供。 有关支持的和不支持环境的详细描述,请参阅嵌套虚拟化的支持限制。
第 24 章 RHEL 10 虚拟化中的功能支持和限制
- 要点:在生产环境中使用 Red Hat Enterprise Linux 10 (RHEL 10)虚拟化时,请注意相关的功能支持和限制。
24.1. RHEL 虚拟化支持如何工作
- 要点:一组适用于 Red Hat Enterprise Linux 10 中虚拟化的支持限制。当您为虚拟机使用某些功能或超过分配的资源限值时,红帽只会提供有限的支持,除非您有特定的订阅计划。
- 要点:RHEL 10 虚拟化中推荐功能中列出的功能 已被红帽测试并认证,以便与 RHEL 10 系统上的 KVM 管理程序一起工作。因此,它们被完全支持,并建议在 RHEL 10 中的虚拟化中使用。
- 注意:重要 这些限制不适用于红帽提供的其他虚拟化解决方案,如 OpenShift Virtualization 或 Red Hat OpenStack Platform (RHOSP)。
24.2. RHEL 10 虚拟化中推荐的功能
- 要点:为了获得最佳可靠性和红帽支持,请使用 Red Hat Enterprise Linux 10(RHEL 10)中包含的 KVM 管理程序推荐的功能。
- 要点:主机系统构架
- 列表:AMD64 和 Intel 64
- 列表:IBM Z - IBM z14 系统及更新版本
- 列表:ARM 64
- 列表:当使用 --os-variant 选项时,virt-install 会自动选择主机 CPU 推荐的和客户机操作系统支持的机器类型。
- 列表:如果不使用 --os-variant 或需要其他机器类型,请使用 --machine 选项来明确指定机器类型。
- 列表:如果您指定了一个不受支持或与主机不兼容的 --machine 值,virt-install 将会失败,并显示一条错误信息。
- 命令/配置摘录:
# virsh dumpxml VM-name | grep machine=
# /usr/libexec/qemu-kvm -M help- 注意:重要 在 RHEL 10 中,pc-i440fx-rhel7.6.0 和更早的机器类型(其在以前的 RHEL 主版本中是默认的)不再被支持。因此,在 RHEL 10 主机上尝试启动此类机器类型的虚拟机会失败,并显示 unsupported configuration 错误。如果您在将主机升级到 RHEL 10 后遇到这个问题,请参阅红帽知识库解决方案 以前可以与 RHEL 9 及更新版本的 hypervisor 一起工作的无效的虚拟机。
- 表格样本(共 4 行):
- 架构 | 推荐的机器类型 | 机器类型值
- Intel 64 和 AMD64 (x86_64) | pc-q35-rhel10.Y.0 | --machine=q35
- IBM Z (s390x) | s390-ccw-virtio-rhel10.Y.0 | --machine=s390-ccw-virtio
- ARM 64 (AArch64) | virt-rhel10.Y.0 | --machine=virt
24.3. RHEL 10 虚拟化不支持的功能
- 要点:RHEL 10 虚拟化不支持某些 KVM 功能和配置,包括 vCPU 热拔、增量实时备份和存储实时迁移。
- 要点:主机系统构架
- 列表: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)。 如果其他虚拟化解决方案支持某个功能,则会在此列表中的功能条目中记录此功能。 有关相应的虚拟化解决方案的支持详情,请查看相关文档。
24.4. RHEL 10 虚拟化中的资源分配限制
- 要点:以下限制适用于可分配给 Red Hat Enterprise Linux 10 (RHEL 10)主机上单个 KVM 虚拟机(VM)的虚拟化资源。如果您的虚拟机超过这些限制,则红帽 被视为一个技术预览。
- 要点:每个虚拟机的最大 vCPU
- 注意:重要 这些限制不适用于红帽提供的其他虚拟化解决方案,如 OpenShift Virtualization 或 Red Hat OpenStack Platform (RHOSP)。
24.5. Linux 和 Windows 虚拟机之间的支持差异
- 要点:在 RHEL 10 系统中,您可以创建并使用使用 Windows 客户机操作系统或 Linux 客户机操作系统的虚拟机(VM)。但是,某些虚拟化功能的工作方式不同,或者可能不被支持,具体取决于虚拟机所使用的客户机操作系统。
- 要点:其他资源
- 列表:配置和管理 Windows 虚拟机
- 列表:带有 KVM 的 RHEL 认证的客户机操作系统(红帽知识库)
- 表格样本(共 10 行):
- 功能 | Windows 客户机 | Linux 客户机
- 支持的构架 | Intel 64 和 AMD64 | Intel 64、AMD64、IBM Z 和 64 位 ARM
- 驱动程序可用性 | 需要外部安装。请参阅为 Windows 虚拟机安装 KVM 半虚拟驱动程序。 | Linux 内核的本地。
- 性能优化 | 主要使用 Hyper-V enlightenments。另请参阅 启用 Hyper-V enlightenments。 | 原生优化,使用 TuneD 配置集来进一步提高性能。另请参阅 使用 TuneD 优化虚拟机性能。
24.6. IBM Z 上的虚拟化与 AMD64 和 Intel 64 有什么不同
- 要点:IBM Z 系统中的 RHEL 10 虚拟化与 AMD64 和 Intel 64 系统中的 KVM 虚拟化在很多方面有所不同,如支持的设备、引导顺序配置、内存热插拔和迁移。
- 要点:IBM Z 不支持虚拟 PCI 和 USB 设备。这也意味着 virtio--pci 设备不受支持,必须使用 virtio--ccw 设备。例如,使用 virtio-net-ccw 而不是 virtio-net-pci。
- 列表:不要使用以 -base 结尾的 CPU 模式。
- 列表:不要使用 qemu、max 或 host CPU 模式。
- 列表:如果您的源主机和目标主机正在运行,您可以在目标主机上使用 virsh hypervisor-cpu-baseline 命令来获取合适的 CPU 模式。详情请参阅验证虚拟机迁移的主机 CPU 兼容性。
- 列表:有关 RHEL 10 中支持的机器类型的更多信息,请参阅 RHEL {ProductNumber} 虚拟化中的推荐功能。
- 列表:使用 vfio 的设备 passthrough
- 列表:使用 virsh domstats 和 virsh memstat 获取内存信息
- 命令/配置摘录:
<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/path/to/qcow2'/> <target dev='vda' bus='virtio'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> <boot order='1' loadparm='2'/> </disk>
<devices> <watchdog model='diag288' action='poweroff'/> </devices>- 注意:注意 在所有主机构架上建议对引导顺序管理使用 <boot order='number'> 。
24.7. ARM 64 上的虚拟化与 AMD64 和 Intel 64 上的虚拟化有何不同
- 要点:ARM 64 系统(也称为 AArch64)中的 RHEL 10 虚拟化与 AMD64 和 Intel 64 系统中的 KVM 虚拟化在很多方面有所不同,如支持的客户端操作系统、内存页面大小、迁移和可用设备。
- 要点:ARM 64 目前支持运行具有 64 KB 或 4 KB 内存页大小的虚拟机,但主机和客户机必须使用相同的内存页大小。不支持主机和客户机具有不同的内存页大小配置。
- 列表:2 MB
- 列表:512 MB
- 列表:16 GB 当您在具有 64 KB 内存页大小的 ARM 64 主机上使用透明巨页(THP)时,它只支持 512 MB 巨页。 具有 4 KB 内存页大小的 ARM 64 主机支持具有以下大小的内存巨页:
- 列表:64 KB
- 列表:32 MB
- 列表:1024 MB 当您在具有 4 KB 内存页大小的 ARM 64 主机上使用透明巨页(THP)时,它只支持 2 MB 巨页。
- 命令/配置摘录:
%packages -kernel kernel-64k %end
# grep -m 1 Features /proc/cpuinfo | grep -w sve Features: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm fcma dcpop sve24.8. RHEL 10 中支持的虚拟化功能的概述
- 要点:虚拟化功能的支持因 AMD64、Intel 64、IBM Z 和 ARM 64 架构而异。这包括资源热插拔、硬件调整和设备兼容性方面的不同。
- 要点:有关可用系统架构中 RHEL 10 中所选虚拟化功能支持状态的信息,请参考下表。
- 列表:RHEL 10 虚拟化不支持的功能
- 列表:IBM Z 上的虚拟化与 AMD 64 和 Intel 64 上的虚拟化有何不同
- 列表:ARM 64 上的虚拟化与 AMD 64 和 Intel 64 上的虚拟化有何不同
- 表格样本(共 2 行):
- Intel 64 和 AMD64 | IBM Z | ARM 64
- 支持 | 支持 | 支持
完整目录
- 配置主机、创建和管理虚拟机并了解虚拟化功能
- 对红帽文档提供反馈
- 第 1 章 RHEL 中虚拟化的基本概念
- 1.1. 什么是虚拟化?
- 1.2. 虚拟化的优点
- 1.3. 虚拟机组件及其交互
- 1.4. 用于虚拟化管理的工具和界面
- 1.5. 用于虚拟化的用户空间连接类型
- 1.6. 红帽虚拟化解决方案
- 第 2 章 准备 RHEL 来托管虚拟机
- 2.1. 准备一个 AMD64 或 Intel 64 系统来托管虚拟机
- 2.2. 准备一个 IBM Z 系统来托管虚拟机
- 2.3. 准备一个 ARM 64 系统来托管虚拟机
- 2.4. 配置 web 控制台以管理虚拟机
- 2.5. 配置对远程虚拟化主机更容易的访问
- 第 3 章 创建虚拟机
- 3.1. 使用命令行创建虚拟机
- 3.2. 使用 web 控制台创建虚拟机
- 3.2.1. 使用 web 控制台创建新的虚拟机
- 3.2.2. 使用 web 控制台通过导入磁盘镜像来创建虚拟机
- 3.2.3. 使用 web 控制台,使用云镜像身份验证创建虚拟机
- 3.3. 在虚拟机上启用 QEMU 客户机代理功能
- 3.3.1. 在 Linux 客户机上启用 QEMU 客户机代理
- 3.3.2. 需要 QEMU 客户机代理的虚拟化功能
- 第 4 章 启动虚拟机
- 4.1. 使用命令行启动虚拟机
- 4.2. 使用 web 控制台启动虚拟机
- 4.3. 当主机启动时自动启动虚拟机
- 第 5 章 将虚拟机转换为 Q35 机器类型
- 第 6 章 连接到虚拟机
- 6.1. 使用 web 控制台连接到虚拟机
- 6.1.1. 在 web 控制台中打开虚拟机图形控制台
- 6.1.2. 在 web 控制台中打开虚拟机串行控制台
- 6.2. 使用命令行打开虚拟机图形控制台
- 6.3. 使用 SSH 连接到虚拟机
- 6.4. 使用命令行打开虚拟机串行控制台
- 6.5. 使用命令行将 SPICE 远程显示协议替换为 VNC
- 6.1. 使用 web 控制台连接到虚拟机
- 第 7 章 关闭并重启虚拟机
- 7.1. 使用命令行关闭虚拟机
- 7.2. 使用 web 控制台关闭虚拟机
- 7.3. 使用命令行重启虚拟机
- 7.4. 使用 web 控制台重启虚拟机
- 第 8 章 删除虚拟机
- 8.1. 使用命令行删除虚拟机
- 8.2. 使用 web 控制台删除虚拟机
- 第 9 章 查看有关虚拟机的信息
- 9.1. 使用命令行查看虚拟机信息
- 9.2. 使用 web 控制台查看虚拟机信息
- 9.3. 虚拟机 XML 配置示例
- 第 10 章 克隆虚拟机
- 10.1. 克隆虚拟机的方式
- 10.2. 创建虚拟机模板
- 10.2.1. 使用 virt-sysprep 创建虚拟机模板
- 10.2.2. 手动创建虚拟机模板
- 10.3. 使用命令行克隆虚拟机
- 10.4. 使用 web 控制台克隆虚拟机
- 第 11 章 迁移虚拟机
- 11.1. 迁移虚拟机的工作方式
- 11.2. 迁移虚拟机的好处
- 11.3. 迁移虚拟机的限制
- 11.4. 使用命令行迁移虚拟机
- 11.5. 使用 web 控制台实时迁移虚拟机
- 11.6. 实时迁移附加了 Mellanox 虚拟功能的虚拟机
- 11.7. 使用附加的 NVIDIA vGPU 实时迁移虚拟机
- 11.8. 将虚拟机磁盘镜像与其他主机共享
- 11.9. 验证虚拟机迁移的主机 CPU 兼容性
- 11.10. 虚拟机迁移支持的主机
- 第 12 章 为虚拟机管理存储
- 12.1. 将存储附加到虚拟机的可用方法
- 12.2. 使用 web 控制台查看虚拟机存储信息
- 12.3. 使用命令行查看虚拟机存储信息
- 12.4. 将存储连接到虚拟机
- 12.4.1. 使用命令行将基于文件的虚拟磁盘连接到虚拟机
- 12.4.2. 使用 web 控制台将基于文件的虚拟磁盘连接到虚拟机
- 12.4.3. 使用命令行将基于磁盘的存储连接到虚拟机
- 12.4.4. 使用 web 控制台将基于磁盘的存储连接到虚拟机
- 12.4.5. 使用命令行将基于 LVM 的存储连接到虚拟机
- 12.4.6. 使用 web 控制台将基于 LVM 的存储连接到虚拟机
- 12.4.7. 使用命令行将基于 NFS 的存储连接到虚拟机
- 12.4.8. 使用 web 控制台将基于 NFS 的存储连接到虚拟机
- 12.5. 检查虚拟磁盘的一致性
- 12.6. 调整虚拟磁盘大小
- 12.7. 在虚拟磁盘格式之间转换
- 12.8. 使用命令行删除虚拟机存储
- 12.9. 使用 web 控制台删除虚拟机存储
- 12.10. 支持的磁盘镜像格式
- 第 13 章 使用快照保存和恢复虚拟机状态
- 13.1. 对虚拟机快照的支持限制
- 13.2. 使用命令行创建虚拟机快照
- 13.3. 使用 web 控制台创建虚拟机快照
- 13.4. 使用命令行还原到虚拟机快照
- 13.5. 使用 web 控制台恢复到虚拟机快照
- 13.6. 使用命令行删除虚拟机快照
- 13.7. 使用 web 控制台删除虚拟机快照
- 第 14 章 将主机设备连接到虚拟机
- 14.1. 虚拟设备的工作原理
- 14.2. 虚拟设备类型
- 14.3. 使用命令行将 USB 设备连接到虚拟机
- 14.4. 使用命令行将 PCI 设备连接到虚拟机
- 14.5. 使用 web 控制台将主机设备连接到虚拟机
- 14.6. 使用命令行从虚拟机中删除 USB 设备
- 14.7. 使用命令行从虚拟机中删除 PCI 设备
- 14.8. 使用 web 控制台从虚拟机中删除主机设备
- 14.9. 将 ISO 镜像连接到虚拟机
- 14.9.1. 使用命令行将 ISO 镜像连接到虚拟机
- 14.9.2. 使用虚拟光驱替换 ISO 镜像
- 14.9.3. 使用命令行从虚拟机中删除 ISO 镜像
- 14.10. 为虚拟机配置 SCSI 透传
- 14.11. 为虚拟机配置 SCSI3-Persistent Reservation
- 14.12. 将 DASD 设备附加到 IBM Z 中的虚拟机
- 14.13. 使用 web 控制台将 watchdog 设备附加到虚拟机
- 第 15 章 配置虚拟机网络连接
- 15.1. 虚拟网络的工作方式
- 15.2. 虚拟机网络的默认配置
- 15.3. 虚拟机的网络连接类型
- 15.3.1. 使用网络地址转换进行虚拟联网
- 15.3.2. 路由模式中的虚拟网络
- 15.3.3. 网桥模式中的虚拟网络
- 15.3.4. 隔离模式中的虚拟网络
- 15.3.5. 开放模式中的虚拟网络
- 15.3.6. 虚拟机连接类型的比较
- 15.4. 使用 web 控制台管理虚拟机网络接口
- 15.4.1. 在 web 控制台中查看和编辑虚拟网络接口信息
- 15.4.2. 在 web 控制台中添加和连接虚拟网络接口
- 15.4.3. 在 web 控制台中断开连接和删除虚拟网络接口
- 15.5. 管理 SR-IOV 网络设备
- 15.5.1. 什么是 SR-IOV?
- 15.5.2. 将 SR-IOV 网络设备附加到虚拟机
- 15.5.3. SR-IOV 分配支持的设备
- 15.6. 从 PXE 服务器启动虚拟机
- 15.6.1. 在虚拟网络中配置 PXE 引导服务器
- 15.6.2. 使用 PXE 和虚拟网络引导虚拟机
- 15.6.3. 使用 PXE 和桥接网络启动虚拟机
- 15.7. 配置外部可见的虚拟机
- 15.7.1. 使用命令行配置外部可见的虚拟机
- 15.7.2. 使用 web 控制台配置外部可见的虚拟机
- 15.7.3. 替换 macvtap 连接
- 15.8. 在网络绑定上配置网桥,以将虚拟机与网络连接
- 15.8.1. 使用 nmcli 在网络绑定上配置网络接口
- 15.8.2. 使用 nmcli 为网络绑定配置网桥
- 15.8.3. 使用现有绑定接口在 libvirt 中创建一个虚拟网络
- 15.8.4. 将虚拟机配置为使用绑定接口
- 15.9. 配置 passt 用户空间连接
- 第 16 章 在虚拟机中管理 GPU 设备
- 16.1. 为虚拟机分配 GPU
- 16.2. 管理 NVIDIA vGPU 设备
- 16.2.1. 配置 NVIDIA vGPU 设备
- 16.2.2. 删除 NVIDIA vGPU 设备
- 16.2.3. 配置 NVIDIA vGPU 旧设备
- 16.2.4. 删除 NVIDIA vGPU 传统设备
- 16.2.5. 获取有关您系统的 NVIDIA 传统 vGPU 信息
- 16.2.6. 使用附加的 NVIDIA vGPU 实时迁移虚拟机
- 16.2.7. 用于 NVIDIA vGPU 的远程桌面流服务
- 第 17 章 优化虚拟机性能
- 17.1. 影响虚拟机性能的因素
- 17.1.1. 虚拟化对系统性能的影响
- 17.1.2. 降低虚拟机性能损失
- 17.2. 使用 TuneD 优化虚拟机性能
- 17.3. 针对特定工作负载的虚拟机性能优化
- 17.4. 配置虚拟机内存
- 17.4.1. 内存过量使用
- 17.4.2. 使用 virtio-mem 添加和删除虚拟机内存
- 17.4.3. 配置虚拟机以使用巨页
- 17.5. 优化虚拟机 I/O 性能
- 17.5.1. 在虚拟机中调整块 I/O
- 17.5.2. 在虚拟机中配置磁盘 I/O 节流
- 17.5.3. 在存储设备上启用多队列
- 17.5.4. 配置专用的 IOThreads
- 17.5.5. 配置虚拟磁盘缓存
- 17.6. 优化虚拟机 CPU 性能
- 17.6.1. vCPU 过量使用
- 17.6.2. 使用命令行添加和删除虚拟 CPU
- 17.6.3. 使用 Web 控制台管理虚拟 CPU
- 17.6.4. 在虚拟机中配置 NUMA
- 17.6.5. 配置虚拟 CPU 固定
- 17.6.6. 配置虚拟 CPU 上限
- 17.6.7. 调整 CPU 权重
- 17.6.8. 启用和禁用内核相同页合并
- 17.7. 优化虚拟机网络性能
- 17.8. 虚拟机性能监控工具
- 17.1. 影响虚拟机性能的因素
- 第 18 章 保护虚拟机
- 18.1. 虚拟机中的安全性是如何工作的
- 18.2. 保护虚拟机的最佳实践
- 18.3. 虚拟机安全性的默认功能
- 18.4. 限制虚拟机用户可以使用哪些操作
- 18.5. 配置 VNC 密码
- 18.6. 用于虚拟化的 SELinux 布尔值
- 18.7. 创建安全引导 Linux 虚拟机
- 18.8. 在 IBM Z 上配置 IBM Secure Execution
- 18.8.1. 为 IBM 安全执行手动配置虚拟机
- 18.8.2. 从 IBM Secure Execution 的主机配置虚拟机
- 18.9. 将加密 coprocessors 附加到 IBM Z 上的虚拟机
- 18.10. 启用 SEV-SNP
- 18.10.1. 在 RHEL 主机上启用 SEV-SNP
- 18.10.2. 在 RHEL 客户端中启用 SEV-SNP
- 18.11. 启用 TDX
- 18.11.1. 在 RHEL 主机上启用 TDX
- 18.11.2. 在 RHEL 客户端中启用 TDX
- 第 19 章 在主机及其虚拟机间共享文件
- 19.1. 使用命令行在主机和 Linux 虚拟机之间共享文件
- 19.2. 使用 web 控制台在主机和 Linux 虚拟机之间共享文件
- 第 20 章 使用命令行删除主机和虚拟机之间共享的文件
- 20.1. 使用 web 控制台删除主机和 Linux 虚拟机之间共享的文件
- 第 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. 恢复虚拟机
- 第 23 章 创建嵌套虚拟机
- 23.1. 什么是嵌套虚拟化?
- 23.2. 对嵌套虚拟化的支持限制
- 23.3. 在 Intel 上创建嵌套虚拟机
- 23.4. 在 AMD 上创建嵌套虚拟机
- 23.5. 在 IBM Z 上创建嵌套的虚拟机
- 第 24 章 RHEL 10 虚拟化中的功能支持和限制
- 24.1. RHEL 虚拟化支持如何工作
- 24.2. RHEL 10 虚拟化中推荐的功能
- 24.3. RHEL 10 虚拟化不支持的功能
- 24.4. RHEL 10 虚拟化中的资源分配限制
- 24.5. Linux 和 Windows 虚拟机之间的支持差异
- 24.6. IBM Z 上的虚拟化与 AMD64 和 Intel 64 有什么不同
- 24.7. ARM 64 上的虚拟化与 AMD64 和 Intel 64 上的虚拟化有何不同
- 24.8. RHEL 10 中支持的虚拟化功能的概述
