第 3 章 创建虚拟机

要在 RHEL 9 中创建虚拟机(VM),请使用命令行界面(CLI)RHEL 9 web 控制台

3.1. 使用命令行界面创建虚拟机

要使用 virt-install 工具在 RHEL 9 主机上创建虚拟机(VM),请按照以下说明操作。

先决条件

  • 虚拟化已在您的主机系统中启用
  • 您有足够的系统资源来分配给虚拟机,如磁盘空间、RAM 或 CPU。根据虚拟机的预期任务和工作负载,推荐的值可能会有很大不同。
  • 操作系统(OS)安装源可存在于本地或者网络中。可以是以下之一:

    • 安装介质的 ISO 镜像
    • 现有虚拟机安装的磁盘镜像

      警告

      在 RHEL 9 中无法从主机 CD-ROM 或者 DVD-ROM 设备安装。当使用 RHEL 9 中的任何虚拟机安装方法时,如果选择了 CD-ROM 或者 DVD-ROM 作为安装源,则安装将失败。如需更多信息,请参阅红帽知识库

      另请注意,红帽只对 一组有限的客户机操作系统 提供支持。

  • 可选:对于快速、简单的配置安装,可以使用 Kickstart 文件。

流程

要创建虚拟机并启动其操作系统安装,请使用 virt-install 命令以及以下强制参数:

  • --name: 新机器的名称
  • --memory :分配的内存量
  • --vcpus :分配的虚拟 CPU 数
  • --disk :分配的存储的类型和大小
  • --cdrom--location :操作系统安装源的类型和位置

根据所选安装方法,所需选项和值可能会有所不同。请参阅以下命令的示例:

  • 以下命令创建一个名为 demo-guest1 的虚拟机,它从本地存储在 /home/username/Downloads/Win10install.iso 文件中的 ISO 镜像安装 Windows 10 OS。此虚拟机还可分配 2048 MiB RAM 和 2 个 vCPU,为虚拟机自动配置 80 GiB qcow2 虚拟磁盘。

    # virt-install \
        --name demo-guest1 --memory 2048 \
        --vcpus 2 --disk size=80 --os-variant win10 \
        --cdrom /home/username/Downloads/Win10install.iso
  • 以下命令创建一个名为 demo-guest2 的虚拟机,它使用 /home/username/Downloads/rhel9.iso 镜像从 live CD 运行 RHEL 9 OS。没有为这个虚拟机分配磁盘空间,因此在此会话中所做的更改不会被保留。另外,虚拟机被分配 4096 MiB RAM 和 4 个 vCPU。

    # virt-install \
        --name demo-guest2 --memory 4096 --vcpus 4 \
        --disk none --livecd --os-variant rhel9.0 \
        --cdrom /home/username/Downloads/rhel9.iso
  • 以下命令创建一个名为 demo-guest3 的 RHEL 9 虚拟机,它连接到现有磁盘镜像 /home/username/backup/disk.qcow2。这和在不同的机器间物理地移动硬盘驱动器类似,因此 demo-guest3 可用的操作系统和数据由之前处理镜像的方式决定。另外,这个虚拟机还会分配 2048 MiB RAM 和 2 个 vCPU。

    # virt-install \
        --name demo-guest3 --memory 2048 --vcpus 2 \
        --os-variant rhel9.0 --import \
        --disk /home/username/backup/disk.qcow2

    请注意,在导入磁盘镜像时,强烈建议使用 --os-variant 选项。如果没有提供,创建虚拟机的性能将会受到负面影响。

  • 以下命令创建一个名为 demo-guest4 的虚拟机,它从 http://example.com/OS-install URL 安装。要使安装成功启动,URL 必须包含可正常工作的操作系统安装树。另外,操作系统使用 /home/username/ks.cfg kickstart 文件自动进行配置。此虚拟机还可分配 2048 MiB RAM、2 个 vCPU 和 160 GiB qcow2 虚拟磁盘。

    # virt-install \
        --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 \
        --os-variant rhel9.0 --location http://example.com/OS-install \
        --initrd-inject /home/username/ks.cfg --extra-args="inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
  • 以下命令创建一个名为 demo-guest5 的虚拟机,它以纯文本模式从 RHEL9.iso 镜像文件安装,而无需图形。它将客户端控制台连接到串行控制台。虚拟机有 16384 MiB 内存、16 个 vCPU 和 280 GiB 磁盘。当通过慢速网络连接连接到主机时这种安装很有用。

    # virt-install \
        --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 \
        --os-variant rhel9.0 --location RHEL9.iso \
        --graphics none --extra-args='console=ttyS0'
  • 以下命令创建一个名为 demo-guest6 的虚拟机,其与 demo-guest5 有相同的配置,但位于 192.0.2.1 远程主机上。

    # virt-install \
        --connect qemu+ssh://root@192.0.2.1/system --name demo-guest6 --memory 16384 \
        --vcpus 16 --disk size=280 --os-variant rhel9.0 --location RHEL9.iso \
        --graphics none --extra-args='console=ttyS0'
  • 以下命令创建一个名为 demo-guest-7 的虚拟机,其与 demo-guest5 有相同的配置,但对于其存储,它使用 DASD 介质设备 mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,并给其分配了设备号 1111

    # virt-install \
        --name demo-guest7 --memory 16384 --vcpus 16 --disk size=280 \
        --os-variant rhel9.0 --location RHEL9.iso --graphics none \
        --disk none --hostdev mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,address.type=ccw,address.cssid=0xfe,address.ssid=0x0,address.devno=0x1111,boot-order=1 \
        --extra-args 'rd.dasd=0.0.1111'

    请注意,可以使用 virsh nodedev-list --cap mdev 命令来检索可用于安装的介质设备的名称。

验证

  • 如果成功创建虚拟机,则使用虚拟机的图形控制台打开 virt-viewer 窗口并启动客户端操作系统安装。

故障排除

  • 如果 virt-install 失败,且出现 cannot find default network 错误:

    • 确定 libvirt-daemon-config-network 软件包已安装:

      # {PackageManagerCommand} info libvirt-daemon-config-network
      Installed Packages
      Name         : libvirt-daemon-config-network
      [...]
    • 验证 libvirt 默认网络是否处于活动状态,并且已配置为自动启动:

      # virsh net-list --all
       Name      State    Autostart   Persistent
      --------------------------------------------
       default   active   yes         yes
    • 如果没有,激活默认网络并将其设置为 auto-start:

      # virsh net-autostart default
      Network default marked as autostarted
      
      # virsh net-start default
      Network default started
      • 如果激活默认网络失败并显示以下错误,则代表还没有正确安装 libvirt-daemon-config-network 软件包。

        error: failed to get network 'default'
        error: Network not found: no network with matching name 'default'

        要解决这个问题,请重新安装 libvirt-daemon-config-network

        # {PackageManagerCommand} reinstall libvirt-daemon-config-network
      • 如果激活默认网络失败并显示类似如下的错误,则默认网络子网和主机上现有接口之间出现了冲突。

        error: Failed to start network default
        error: internal error: Network is already in use by interface ens2

        要解决这个问题,请使用 virsh net-edit default 命令,并将配置中的 192.0.2.* 值改为主机上未被使用的子网。