第 3 章 克隆虚拟机
创建客户机副本时,有两种客户端虚拟机实例:
- 克隆 是单个虚拟机的实例。克隆可用于设置相同虚拟机的网络,也可以分发到其他目的地。
- 模板是虚拟机的 实例,设计为用作克隆的源。您可以从模板创建多个克隆,并对每个克隆进行小幅修改。这对于查看这些更改对系统的影响非常有用。
克隆和模板都是虚拟机实例。它们之间的区别在于如何使用它们。
要使创建的克隆正常工作,在克隆前通常必须删除要克隆的虚拟机的信息和配置。根据使用克隆方式,需要删除的信息有所不同。
要删除的信息和配置可能位于以下任意级别:
- 平台级别 信息和配置包括虚拟化解决方案分配给虚拟机的任何内容。示例包括网络接口卡(NIC)的数量及其 MAC 地址。
- 客户机操作系统级别 信息和配置包括虚拟机中配置的任何内容。例如,SSH 密钥。
- 应用程序级别 信息和配置包括在虚拟机上安装的应用程序所配置的任何内容。示例包括激活代码和注册信息。注意本章不包括关于删除应用程序级别的信息,因为信息和方法特定于每个应用程序。
因此,必须将一些信息和配置从虚拟机中删除,而其他信息和配置必须使用虚拟化环境(如虚拟机管理器或 VMware)从虚拟机中删除。
3.1. 为关闭准备虚拟机
在克隆虚拟机前,必须先在其磁盘镜像上运行 virt-sysprep 实用程序,或使用以下步骤来准备它:
过程 3.1. 准备虚拟机以进行克隆
设置虚拟机
- 构建要用于克隆或模板的虚拟机。
- 在克隆上安装任何所需的软件。
- 为操作系统配置任何非唯一的设置。
- 配置任何非唯一的应用设置。
删除网络配置
- 使用以下命令删除任何持久性的 udev 规则:
# rm -f /etc/udev/rules.d/70-persistent-net.rules
注意如果没有删除 udev 规则,则第一个 NIC 的名称可以是 eth1 而不是 eth0。 - 通过对
/etc/sysconfig/network-scripts/ifcfg-eth[x]
进行以下编辑,从 ifcfg 脚本中删除唯一的网络详情:- 删除 HWADDR 和 Static 行注意如果 HWADDR 与新 guest 的 MAC 地址不匹配,则将忽略 ifcfg。因此,务必要从文件中删除 HWADDR。
DEVICE=eth[x] BOOTPROTO=none ONBOOT=yes #NETWORK=10.0.1.0 <- REMOVE #NETMASK=255.255.255.0 <- REMOVE #IPADDR=10.0.1.20 <- REMOVE #HWADDR=xx:xx:xx:xx:xx <- REMOVE #USERCTL=no <- REMOVE # Remove any other *unique* or non-desired settings, such as UUID.
- 确保 DHCP 配置仍不包含 HWADDR 或任何唯一信息。
DEVICE=eth[x] BOOTPROTO=dhcp ONBOOT=yes
- 确保该文件包括以下行:
DEVICE=eth[x] ONBOOT=yes
- 如果存在以下文件,请确保它们包含相同的内容:
/etc/sysconfig/networking/devices/ifcfg-eth[x]
/etc/sysconfig/networking/profiles/default/ifcfg-eth[x]
注意如果虚拟机使用了 NetworkManager 或任何特殊设置,请确保从 ifcfg 脚本中删除任何其他唯一信息。
删除注册详情
- 使用以下之一删除注册详情:
- 对于 Red Hat Network(RHN)注册的客户机虚拟机,请运行以下命令:
# rm /etc/sysconfig/rhn/systemid
- 对于 Red Hat Subscription Manager(RHSM)注册的客户机虚拟机:
- 如果没有使用原始虚拟机,请运行以下命令:
# subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
- 如果使用原始虚拟机,则只运行以下命令:
# subscription-manager clean
注意原始 RHSM 配置集保留在门户网站中。
删除其他唯一详情
- 使用以下命令删除任何 sshd 公钥/私钥对:
# rm -rf /etc/ssh/ssh_host_*
注意删除 ssh 密钥可防止 ssh 客户端不信任这些主机时出现问题。 - 删除任何其它应用程序特定标识符或配置,如果在多个机器上运行时可能会导致冲突。
配置虚拟机,使其在下次引导时运行配置向导
- 配置虚拟机,使其在下次引导时通过执行以下操作之一来运行相关配置向导:
- 对于 Red Hat Enterprise Linux 6 及以下,使用以下命令在名为 .unconfigured 的 root 文件系统中创建一个空文件:
# touch /.unconfigured
- 对于 Red Hat Enterprise Linux 7,运行以下命令启用第一个引导和 initial-setup 向导:
# sed -ie 's/RUN_FIRSTBOOT=NO/RUN_FIRSTBOOT=YES/' /etc/sysconfig/firstboot # systemctl enable firstboot-graphical # systemctl enable initial-setup-graphical
注意在下次引导时运行的向导取决于从虚拟机中删除的配置。另外,在克隆第一次引导时,建议您更改主机名。