Red Hat Training

A Red Hat training course is available for RHEL 8

第 8 章 克隆虚拟机

要使用特定属性集合快速创建新虚拟机,您可以克隆现有虚拟机。

克隆会创建一个使用其自身磁盘镜像保存存储的新虚拟机,但大多数克隆的配置和源虚拟机的数据都是一样的。这样就可以准备很多虚拟机来满足特定的任务,而无需单独优化每个虚拟机。

8.1. 克隆虚拟机的方式

克隆虚拟机会复制源虚拟机及其磁盘镜像的 XML 配置,并对配置进行修改以确保新虚拟机的唯一性。这包括更改虚拟机的名称,并确保它使用磁盘镜像克隆。存储在克隆的虚拟磁盘上的数据与源虚拟机是一致的。

这个过程比创建新虚拟机要快,并使用客户端操作系统安装它,并可用于快速生成带有特定配置和内容的虚拟机。

如果您计划为虚拟机创建多个克隆,首先请创建一个不包含以下内容的虚拟机模板

  • 唯一设置,如持久性网络 MAC 配置,这可阻止克隆正常工作。
  • 敏感数据,如 SSH 密钥和密码文件。

具体步骤请查看 第 8.2 节 “创建虚拟机模板”

要克隆虚拟机,您可以使用 RHEL 8 CLI。详情请查看 第 8.3 节 “使用命令行界面克隆虚拟机”

8.2. 创建虚拟机模板

为确保虚拟机克隆正确运行,请在克隆源虚拟机前删除源虚拟机独有的信息和配置,如 SSH 密钥或持久性网络 MAC 配置。

这会创建一个虚拟机模板,可用于轻松和安全地创建虚拟机克隆。

先决条件

  • virt-sysprep 工具安装在您的主机上:

    # yum install /usr/bin/virt-sysprep
  • 用作模板的虚拟机将被关闭。
  • 您必须知道源虚拟机的磁盘镜像位于哪里,并且需要是虚拟机磁盘镜像文件的拥有者。

    请注意,在 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 root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • 可选: 虚拟机磁盘上的所有重要数据都已备份。如果要保留源虚拟机,请首先克隆它,并编辑克隆以创建模板。

流程

  1. 确保您已作为虚拟机磁盘镜像的所有者登录:

    # whoami
    root
  2. 可选: 复制虚拟机的磁盘镜像。

    # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2

    这用于验证虚拟机被成功转换为模板。

  3. 使用以下命令,将 /var/lib/libvirt/images/a-really-important-vm.qcow2 替换为源虚拟机磁盘镜像的路径。

    # virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
    [   0.0] Examining the guest ...
    [   7.3] Performing "abrt-data" ...
    [   7.3] Performing "backup-files" ...
    [   9.6] Performing "bash-history" ...
    [   9.6] Performing "blkid-tab" ...
    [...]

验证

  • 要确认进程成功,请将修改的磁盘镜像与原始镜像进行比较。以下示例显示了成功创建模板:

    # virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
    - - 0644       1001 /etc/group-
    - - 0000        797 /etc/gshadow-
    = - 0444         33 /etc/machine-id
    [...]
    - - 0600        409 /home/username/.bash_history
    - d 0700          6 /home/username/.ssh
    - - 0600        868 /root/.bash_history
    [...]

其它资源

  • 使用如上所示的 virt-sysprep 命令来执行标准虚拟机模板准备。如需更多信息,请参阅 OPERATIONS man page 中的 virt-sysprep 部分。

    要自定义您要 virt-sysprep 执行的特定操作,使用 --operations 选项,并将计划操作指定为用逗号分开的列表。

  • 有关克隆虚拟机模板的步骤,请参阅 第 8.3 节 “使用命令行界面克隆虚拟机”

8.3. 使用命令行界面克隆虚拟机

要使用特定属性集(如为测试目的)快速创建新虚拟机,您可以克隆现有的虚拟机。要使用 CLI 完成此操作,请遵循以下步骤。

先决条件

  • 源虚拟机被关闭。
  • 确保有足够的磁盘空间来存储克隆的磁盘镜像。
  • 可选: 在创建多个虚拟机克隆时,从源虚拟机中删除唯一数据和设置,以确保克隆的虚拟机正常工作。具体步骤请查看 第 8.2 节 “创建虚拟机模板”

流程

  1. 使用 virt-clone 工具以及适合您的环境和用例的选项。

    使用案例示例

    • 以下命令克隆一个名为 doppelganger 的本地虚拟机 ,并创建 doppelganger-clone 虚拟机。它还在与原始虚拟机磁盘镜像相同的位置,使用相同的数据创建 doppelganger-clone.qcow2 磁盘镜像:

      # virt-clone --original doppelganger --auto-clone
      Allocating 'doppelganger-clone.qcow2'                            | 50.0 GB  00:05:37
      
      Clone 'doppelganger-clone' created successfully.
    • 以下命令克隆一个名为 geminus1 的虚拟机,并创建一个名为 geminus2 的本地虚拟机,它只使用 geminus1的多个磁盘中的两个。

      # virt-clone --original geminus1 --name geminus2 --file /var/lib/libvirt/images/disk1.qcow2 --file /var/lib/libvirt/images/disk2.qcow2
      Allocating 'disk1-clone.qcow2'                                      | 78.0 GB  00:05:37
      Allocating 'disk2-clone.qcow2'                                      | 80.0 GB  00:05:37
      
      Clone 'geminus2' created successfully.
    • 要将虚拟机克隆到其他主机,请迁移虚拟机而无需在本地主机上取消它。例如,以下命令将之前创建的 geminus2 虚拟机克隆到 10.0.0.1 远程系统,包括本地磁盘。请注意,使用这些命令还需要 100.0.1 的 root 权限。

      # virsh migrate --offline --persistent geminus2 qemu+ssh://root@10.0.0.1/system
      root@10.0.0.1's password:
      
      # scp /var/lib/libvirt/images/disk1-clone.qcow2 root@10.0.0.1/user@remote_host.com://var/lib/libvirt/images/
      
      # scp /var/lib/libvirt/images/disk2-clone.qcow2 root@10.0.0.1/user@remote_host.com://var/lib/libvirt/images/

验证

验证虚拟机是否已成功克隆,且正在正常工作:

  1. 确认克隆已添加到主机上的虚拟机列表中。

    # virsh list --all
    Id   Name                  State
    ---------------------------------------
    -    doppelganger          shut off
    -    doppelganger-clone    shut off
  2. 启动克隆并观察它是否引导。

    # virsh start doppelganger-clone
    Domain doppelganger-clone started

其它资源

  • 有关克隆虚拟机的额外选项,请参阅 virt-clone man page。
  • 有关将虚拟机克隆移动到不同主机的详情,包括故障排除信息,请参阅 第 9 章 迁移虚拟机

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。