Show Table of Contents
第 7 章 模板
模板就是一个被预先配置好的虚拟机备份,它可以被用来简化重复创建相似虚拟机的过程。模板包括了所基于的虚拟机上安装的软件,以及虚拟机的软件和硬件配置。这个模板所基于的虚拟机被称为源虚拟机。
当通过虚拟机创建一个模板时,一个虚拟机磁盘的只读备份会被创建。这个只读磁盘备份会被作为新模板的基本磁盘镜像,并可以被用来创建其它虚拟机。当有基于这个模板创建的虚拟机存在于环境中时,这个模板不能被删除。
基于模板所创建的虚拟机会使用和模板的源虚拟机相同的 NIC 类型和驱动,但是会被分配一个不同的 MAC 地址。
7.1. 为准备创建模板封装虚拟机
本节介绍了封装(seal) Linux 虚拟机和 Windows 虚拟机的方法。封装就是在基于虚拟机创建模板前,把只对特定虚拟机有效的信息删除的过程。这可以防止在通过同一个模板创建多个虚拟机时,相同的信息出现在不同的虚拟机上(这些信息在不同的虚拟机上需要有所不同)。同时,封装也可以保证相关功能的确定性,例如保证 vNIC 的顺序是可以预测的。
7.1.1. 封装 Linux 虚拟机来为创建模板做准备
有两种方法封装一个 Linux 虚拟机:手工封装或使用
sys-unconfig 命令。当手工封装一个 Linux 虚拟机时,您需要在虚拟机上创建一个文件。这个文件作为一个标记,指示了在虚拟机下一次启动时需要进行的多个配置任务。sys-unconfig 命令会自动化这个过程。但是,无论使用这两个方法中的哪一个,您都需要在虚拟机上手工删除那些只适用于特定虚拟机的文件。使用这两个方法封装 Linux 虚拟机的结果是相同的。
7.1.1.1. 手动封装 Linux 虚拟机来为创建模板做准备
在基于虚拟机创建一个模板前,您必须“封装”这个虚拟机。
过程 7.1. 封闭一个 Linux 虚拟机
- 登录到虚拟机。
- 把这个系统标识为重新配置:
# touch /.unconfigured
- 移除 SSH 主机密钥:
# rm -rf /etc/ssh/ssh_host_*
- 将主机名称更改为
localhost.localdomain。- 对于 Red Hat Enterprise Linux 6,编辑
/etc/sysconfig/network中的HOSTNAME值:HOSTNAME=localhost.localdomain
- 对于 Red Hat Enterprise Linux 7,使用
hostnamectl命令:# hostnamectl set-hostname localhost.localdomain
- 删除
/etc/udev/rules.d/70-*:# rm -rf /etc/udev/rules.d/70-*
- 从
/etc/sysconfig/network-scripts/ifcfg-eth*中删除HWADDR行和UUID行。 - 另外,从
/var/log中删除所有日志,从/root中删除 build 日志。 - 关闭虚拟机:
# poweroff
虚拟机现在已被封装,并可以被用来创建模板。您可以使用这个模板部署 Linux 虚拟机,不会有与配置文件相关的冲突。
这里所介绍的步骤是封装一个 Red Hat Enterprise Linux 虚拟机器作为模板所需的最少步骤。除此之外,可能还需要一些与主机和特定环境相关的额外步骤。
7.1.1.2. 使用 sys-unconfig 封装一个 Linux 虚拟机
在基于虚拟机创建一个模板前,您必须“封装”这个虚拟机。
过程 7.2. 使用 sys-unconfig 封装一个 Linux 虚拟机
- 登录到虚拟机。
- 移除 SSH 主机密钥:
# rm -rf /etc/ssh/ssh_host_*
- 将主机名称更改为
localhost.localdomain。- 对于 Red Hat Enterprise Linux 6,编辑
/etc/sysconfig/network中的HOSTNAME值:HOSTNAME=localhost.localdomain
- 对于 Red Hat Enterprise Linux 7,使用
hostnamectl命令:# hostnamectl set-hostname localhost.localdomain
- 从
/etc/sysconfig/network-scripts/ifcfg-eth*中删除HWADDR行和UUID行。 - 另外,从
/var/log中删除所有日志,从/root中删除 build 日志。 - 请运行以下命令:
# sys-unconfig
虚拟机被关机。它已被封装,并可用来创建模板。您可以使用这个模板部署 Linux 虚拟机,不会有与配置文件相关的冲突。
7.1.2. 封装 Windows 虚拟机来为创建模板做准备
为 Windows 虚拟机所创建的模板在被用来部署虚拟机前需要被封装,这会确保那些针对于特定机器的设置不会出现在模板中。
Sysprep 是一个用来封装 Windows 模板的工具。
重要
在进行这个操作的过程中不要重新启动虚拟机。
在运行 Sysprep 前,请确保以下设置已经被配置:
- Windows Sysprep 参数已经被正确定义。如果还没有定义,点并在操作系统和域项中输入相应的信息。
- 正确的产品密钥在 Manager 的一个覆盖文件中指定。这个覆盖文件需要在
/etc/ovirt-engine/osinfo.conf.d/中创建,它的文件名需要在/etc/ovirt-engine/osinfo.conf.d/00-defaults.properties文件之后,并需要以.properties结束。例如,/etc/ovirt-engine/osinfo.conf.d/10-productkeys.properties。后面文件中的设置会覆盖以前文件中的相同设置。如果还没有设置,请把您的 Windows 操作系统的默认值从/etc/ovirt-engine/osinfo.conf.d/00-defaults.properties复制到覆盖文件中,并在productKey.value和sysprepPath.value项中输入正确的值。例 7.1. Windows 7 默认配置值
# Windows7(11, OsType.Windows, false),false os.windows_7.id.value = 11 os.windows_7.name.value = Windows 7 os.windows_7.derivedFrom.value = windows_xp os.windows_7.sysprepPath.value = ${ENGINE_USR}/conf/sysprep/sysprep.w7 os.windows_7.productKey.value = os.windows_7.devices.audio.value = ich6 os.windows_7.devices.diskInterfaces.value.3.3 = IDE, VirtIO_SCSI, VirtIO os.windows_7.devices.diskInterfaces.value.3.4 = IDE, VirtIO_SCSI, VirtIO os.windows_7.devices.diskInterfaces.value.3.5 = IDE, VirtIO_SCSI, VirtIO os.windows_7.isTimezoneTypeInteger.value = false
7.1.2.1. 封装 Windows 7、Windows 2008 或 Windows 2012 模板
在使用模板部署虚拟机前,需要封装一个 Windows 7、Windows 2008 或 Windows 2012 模板。
过程 7.3. 封装 Windows 7、Windows 2008 或 Windows 2012 模板
- 通过
C:\Windows\System32\sysprep\sysprep.exe运行 Sysprep。 - 在 Sysprep 中输入以下信息:
- 在 System Cleanup Action 下,选择 Enter System Out-of-Box-Experience (OOBE)。
- 如需修改系统的 ID(SID),选择 Generalize。
- 在 Shutdown Options 下,选择 Shutdown。
- 点 完成封装的过程,在封装完成后,虚拟机会被自动关闭。
Windows 7、Windows 2008 或 Windows 2012 模板已被封装,并可以用来部署虚拟机。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.