本节介绍了封装(seal) Linux 虚拟机和 Windows 虚拟机的方法。封装就是在基于虚拟机创建模板前,把只对特定虚拟机有效的信息删除的过程。这可以防止在通过同一个模板创建多个虚拟机时,相同的信息出现在 不同的虚拟机上(这些信息在不同的虚拟机上需要有所不同)。同时,封装也可以保证相关功能的确定性,例如保证 vNIC 的顺序是可以预测的。
有两种方法封装一个 Linux 虚拟机:手工封装或使用 sys-unconfig 命令。 当手工封装一个 Linux 虚拟机时,您需要在虚拟机上创建一个文件。这个文件作为一个标记,指示了在虚拟机下一次启动时需要进行的多个配置任务。sys-unconfig 命令会自动化这个过程。但是,无论使用这两个方法中的哪一个,您都需要在虚拟机上手工删除那些只适用于特定虚拟机的文件。使用这两个方法封装 Linux 虚拟机的结果是相同的。 一. 手动封装 Linux 虚拟机来为创建模板做准备 1、登录到虚拟机。 2、把这个系统标识为重新配置: # touch /.unconfigured 3、删除 ssh 主机密钥: # rm -rf /etc/ssh/ssh_host_* 4、在 /etc/sysconfig/network 中设置 HOSTNAME=localhost.localdomain。 5、删除 /etc/udev/rules.d/70-*: # rm -rf /etc/udev/rules.d/70-* 6、从 /etc/sysconfig/network-scripts/ifcfg-eth* 中删除 HWADDR 行和 UUID 行。 7、另外,从 /var/log 中删除所有日志,从 /root 中删除 build 日志。 8、关闭虚拟机: # poweroff 注:虚拟机现在已被封装,并可以被用来创建模板。您可以使用这个模板部署 Linux 虚拟机,不会有与配置文件相关的冲突。
二. 使用 sys-unconfig 封装一个 Linux 虚拟机 1、登录到虚拟机。 2、删除 ssh 主机密钥: # rm -rf /etc/ssh/ssh_host_* 3、在 /etc/sysconfig/network 中设置 HOSTNAME=localhost.localdomain。 4、从 /etc/sysconfig/network-scripts/ifcfg-eth* 中删除 HWADDR 行和 UUID 行。 5、另外,从 /var/log 中删除所有日志,从 /root 中删除 build 日志。 6、请运行以下命令: # sys-unconfig 注:虚拟机被关机。它已被封装,并可用来创建模板。您可以使用这个模板部署 Linux 虚拟机,不会有与配置文件相关的冲突。 参考: https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_virtualization/3.6/html/virtual_machine_management_guide/sect-sealing_virtual_machines_in_preparation_for_deployment_as_templates