Appearance
vSphere 虚拟机克隆为 OVF 模板完整实战:从 VM 到内容库

手把手演示如何将 vCenter 中的虚拟机克隆为 OVF 模板,并存入内容库,完成导出备份
在日常 vSphere 运维中,将配置好的虚拟机固化为模板是一项高频操作。无论是批量部署集群节点,还是为 Homelab 保留一份干净的系统镜像,克隆为 OVF 模板 都是最标准、最可靠的方式之一。
本文将用 8 张实操截图,完整演示从虚拟机到 OVF 模板、再到内容库导出的全过程。本次实验以 k8s-infra-220 这台 Ubuntu Server 虚拟机为源,最终生成 ubuntu22.04-server-basic-template 模板。
一、操作入口:从虚拟机开始
首先,在 vSphere Client 的“虚拟机和模板”视图中,找到目标虚拟机(这里是 k8s-infra-220)。右键点击它,展开 “克隆” 子菜单,选择 “克隆为模板...”。

注意:这里有两个容易混淆的选项:
| 选项 | 用途 |
|---|---|
| 克隆为模板... | 生成一个 vCenter 原生模板(仅限本地部署) |
| 作为模板克隆到库... | 直接将模板存入内容库 |
本次我们选择 “克隆为模板...”,因为后续在向导中我们还可以指定目标为内容库,且模板类型可选 OVF。
二、第一步:基本信息配置
在弹出的向导中,关键配置如下:
| 配置项 | 本次选择 | 说明 |
|---|---|---|
| 模板类型 | OVF | 跨平台兼容、可导出备份 |
| 克隆为 | 新建模板 | 首次创建,不是覆盖更新 |
| 名称 | ubuntu22.04-server-basic-template | 建议命名规范,便于识别 |
| 备注 | Installation is based on the Ubuntu Server method. | 记录模板来源和特征 |
| 保留 MAC 地址 | 不勾选 | 避免多实例部署时 MAC 冲突 |
| 包括额外配置 | 勾选 | 保留自定义配置(如网卡设置) |

为什么选 OVF 而不是“虚拟机模板”?
- 虚拟机模板:仅限当前 vCenter 使用,无法导出迁移。
- OVF 模板:标准化打包格式(.ovf + .vmdk),可导出、备份、跨平台分发。
如果你将来需要将这个模板迁移到其他数据中心或分享给团队,OVF 是唯一正确的选择。
三、第二步:选择目标位置(内容库)
在“位置”步骤中,选择我们之前创建好的内容库 template(备注为 vm template storage)。

如果你还没有内容库,需要先创建。可以参考我之前写的 vSphere 内容库创建教程,几步就能搞定。
四、第三步:确认配置并执行
最后一步是概览确认,检查模板名称、类型和目标库是否正确。

确认无误后,点击 “完成”,vCenter 会开始执行克隆任务。
五、任务执行监控
点击“完成”后,vCenter 会在后台执行一系列子任务。你可以在 “任务控制台” 中查看进度:
| 任务名称 | 状态 | 说明 |
|---|---|---|
| 从虚拟机或虚拟设备克隆到内容库中的 OVF 软件包 | 已完成 | 主任务,将 VM 转换为 OVF 并存入库 |
| 创建虚拟机快照 | 已完成 | 克隆前自动创建快照,保证数据一致性 |
| 导出 OVF 模板 | 已完成 | 实际导出环节 |
| 移除快照 | 已完成 | 导出完成后自动清理快照 |
整个流程约 4-5 分钟,视虚拟机磁盘大小而定。

六、验证结果:模板已在内容库中
任务完成后,进入内容库 template,切换到 “OVF 和 OVA 模板” 选项卡,可以看到新生成的模板:

点击模板进入详情页,可以看到:
- 类型:OVF 模板
- 大小:6.03 GB
- 客户机操作系统:Ubuntu Linux (64-bit)
- 操作菜单:支持从此模板新建虚拟机、更新项目、导出项目等

七、导出到本地:最终备份
如果需要将模板保存到本地硬盘或迁移到其他环境,可以点击 “导出项目...”。这里有一个 关键细节:
| 导出位置 | 结果 |
|---|---|
| ❌ 在内容库列表页面点击“导出” | 只下载一个 CSV 元数据文件 |
| ✅ 进入模板详情页,在“操作”菜单中点击“导出项目...” | 下载完整的 OVF 包(.ovf + .vmdk + .nvram) |
本次导出得到了 3 个文件:
| 文件名 | 大小 | 说明 |
|---|---|---|
ubuntu22.04-server-basic-template.ovf | 11 KB | VM 硬件配置描述文件 |
ubuntu22.04-server-basic-template-1.vmdk | 2.36 GB | 虚拟磁盘(实际系统数据) |
ubuntu22.04-server-basic-template-2.nvram | 271 KB | UEFI 固件设置 |

为什么只有 3 个文件而不是 4 个?
因为本次源虚拟机的 CD/DVD 驱动器中没有残留的 ISO 文件路径,所以导出时没有额外的
.iso文件。如果你导出的 OVF 包中多出一个.iso,说明源虚拟机的光驱设备中曾挂载过 ISO 镜像,建议在导出前将 CD/DVD 设备类型改为“客户端设备”再重新导出。
八、为什么内容库显示 6.03 GB,导出的 VMDK 只有 2.36 GB?
这是一个非常常见的疑惑——明明内容库里显示模板大小为 6.03 GB,但导出到本地后,.vmdk 文件只有 2.36 GB。这并非错误,而是 vSphere 存储机制的正常表现。
1. 根本原因:精简置备 vs 厚置备
| 存储方式 | 说明 | 占用空间 |
|---|---|---|
| 厚置备(Thick Provision) | 创建时立即分配全部磁盘空间 | 60 GB(立即占用) |
| 精简置备(Thin Provision) | 按需分配,用多少占多少 | 仅写入数据的大小 |
| 内容库存储 | 存储模板时,vSphere 会转换为精简置备格式存储 | 6.03 GB(实际写入的数据量) |
| 导出 OVF 的 VMDK | 导出的 .vmdk 文件只包含实际数据块,不包含未使用的空闲空间 | 2.36 GB(压缩后的有效数据) |
2. 本次场景还原
| 阶段 | 大小 | 说明 |
|---|---|---|
| 源虚拟机配置 | 60 GB(厚置备) | 虚拟机创建时分配的虚拟磁盘大小 |
| 源虚拟机实际使用 | ~6 GB | Ubuntu Server + 基础软件包的实际占用 |
| 内容库存储模板 | 6.03 GB | 转换为精简置备格式后的存储占用 |
| 导出 OVF 的 VMDK | 2.36 GB | 导出时进一步压缩/去重后的文件大小 |
3. 为什么导出后更小了?
导出 OVF 时,vSphere 会做两件事:
- 空洞消除:丢弃未使用的磁盘块(如未格式化的空闲空间、已删除文件占用的空间)
- 流式压缩:对实际数据进行压缩,生成体积更小的
.vmdk文件
4. 导入后会怎样?
当你从 OVF 部署虚拟机时:
- 默认会保持精简置备,导入后磁盘占用仍为 ~2.36 GB,随着使用逐渐增长
- 如果选择厚置备,则会扩展为完整大小(如 60 GB),但实际数据仍只有 2.36 GB
5. 结论
| 显示位置 | 大小 | 含义 |
|---|---|---|
| 内容库模板列表 | 6.03 GB | 模板在内容库中的存储占用(精简置备) |
导出后的 .vmdk | 2.36 GB | 实际有效数据的压缩大小 |
所以,导出的 VMDK 比内容库显示小是完全正常的。 这也是 OVF 格式的优势之一——只携带有效数据,不传输空洞,让模板更轻量、传输更快。
九、打包并上传到 R2 对象存储
导出到本地的 OVF 文件是分散的(.ovf + .vmdk + .nvram),不便于传输和归档。建议将它们打包为 tar.gz 压缩包,然后上传到 Cloudflare R2(或其他 S3 兼容对象存储),实现集中存储、按需拉取。
1. 打包为 tar.gz
在终端中进入 OVF 文件所在目录,执行以下命令:
bash
# 进入文件所在目录
cd ~/Downloads/
# 打包压缩(文件名建议包含日期和版本信息)
tar -czvf ubuntu22.04-server-basic-template-20260816-0004.tar.gz \
ubuntu22.04-server-basic-template.ovf \
ubuntu22.04-server-basic-template-1.vmdk \
ubuntu22.04-server-basic-template-2.nvram压缩后,文件大小会从约 2.36 GB 降低至 1.2-1.5 GB(具体取决于磁盘数据的压缩率),显著提升上传和下载速度。
2. 生成校验文件
为了确保下载者能够验证文件完整性,需要生成 .sha256 校验文件。
bash
sha256sum ubuntu22.04-server-basic-template-20260816-0004.tar.gz > \
ubuntu22.04-server-basic-template-20260816-0004.tar.gz.sha256bash
shasum -a 256 ubuntu22.04-server-basic-template-20260816-0004.tar.gz > \
ubuntu22.04-server-basic-template-20260816-0004.tar.gz.sha256bash
# PowerShell
(Get-FileHash -Path "ubuntu22.04-server-basic-template-20260816-0004.tar.gz" -Algorithm SHA256).Hash + " ubuntu22.04-server-basic-template-20260816-0004.tar.gz" | Out-File -FilePath "ubuntu22.04-server-basic-template-20260816-0004.tar.gz.sha256"💡 注意
关于 sha256 如何进行下载后校验可以参考,我的另一篇博文《使用 R2 搭建私有软件镜像站:从路径规划到文件上传》
2. 上传到 Cloudflare R2
安装并使用 rclone 命令行工具,将压缩包上传到 R2 存储桶。
上传 package
bash
rclone copy ubuntu22.04-server-basic-template-20260816-0004.tar.gz \
cloudflare-r2:fishfinal-dl/vmware/templates/ubuntu/22.04/server/ \
--progress上传 sha256
bash
rclone copy ubuntu22.04-server-basic-template-20260816-0004.tar.gz.sha256 \
cloudflare-r2:fishfinal-dl/vmware/templates/ubuntu/22.04/server/ \
--progress3. 在 R2 中组织模板目录结构
建议在存储桶中按以下结构组织模板,便于管理和检索:
cloudflare-r2:fishfinal-dl/
├── vmware/
├── esxi/
│ └── 8.0/
│ └── VMware-VMvisor-Installer-8.0U3e-*.iso
├── vsphere/
│ └── vcsa/
│ └── 8.0/
│ └── VMware-VCSA-all-8.0.3-*.iso
└── templates/
└── ubuntu/
│ └── 22.04/
│ └── server/
│ └── ubuntu22.04-server-basic-template-*.tar.gz
└── rocky/
└── 9/
└── minimal/
└── rocky9-minimal-template-*.tar.gz十、模板配置说明(Ubuntu 22.04)
本模板在基础 Ubuntu 22.04 Server 之上,已完成以下预配置,导入后立即可用,只需修改静态 IP 地址即可投入生产。
系统基本信息
| 配置项 | 详情 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS (Jammy) Server |
| 内核版本 | 5.15.0-119-generic |
| root 密码 | fishfinal |
| 网络配置 | 静态 IP(需按环境调整) |
已启用的核心服务与配置
1. root 用户已启用并配置 SSH 远程登录
bash
# /etc/ssh/sshd_config 关键配置
PermitRootLogin yes # 允许 root 远程登录
PasswordAuthentication yes # 允许密码认证
PubkeyAuthentication yes # 同时支持密钥认证(推荐生产环境使用)⚠️ 安全提醒:生产环境中建议改用
PermitRootLogin prohibit-password+ 密钥认证,本模板默认保留密码登录仅为快速部署便利。
2. 已安装的基础软件包
bash
# 系统更新(相当于 yum upgrade -y 的 Ubuntu 等效命令)
sudo apt update && sudo apt upgrade -y
# 已安装的常用工具
sudo apt install -y \
vim \ # 文本编辑器
curl \ # HTTP 请求工具
wget \ # 下载工具
net-tools \ # ifconfig、netstat 等网络工具
git \ # 版本控制
htop \ # 交互式进程查看器
tree \ # 目录树显示
unzip \ # 解压工具
software-properties-common # 管理 PPA 源3. Shell 环境优化(~/.bashrc)
已启用彩色提示符并配置常用别名:
bash
# 启用彩色提示符(取消注释 force_color_prompt=yes)
# uncomment for a colored prompt, if the terminal has the capability;
# turned off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
# 已配置的别名
alias ll='ls -lh' # 以人类可读格式显示详细列表4. 网络配置(静态 IP 示例)
模板使用静态 IP 配置,默认 IP 为 192.168.0.220/24(源虚拟机 IP)。导入后请根据实际网络环境修改。
yaml
# /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens160:
dhcp4: false
addresses:
- 192.168.0.220/24 # 导入后修改此行
routes:
- to: default
via: 192.168.0.1 # 按实际网关修改
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
version: 2十一、基于模板快速创建虚拟机(仅需修改 IP)
有了 R2 中的 OVF 压缩包,你可以随时拉取模板并快速部署新虚拟机。典型流程如下:
快速部署工作流
具体操作步骤
| 步骤 | 操作 | 耗时 |
|---|---|---|
| 1 | 从 R2 下载压缩包:rclone copy r2:my-vm-templates/ubuntu22.04-server-basic-template-20260815.tar.gz ./ | ~2-5 分钟(取决于带宽) |
| 2 | 解压:tar -xzvf ubuntu22.04-server-basic-template-20260815.tar.gz | ~10 秒 |
| 3 | vSphere 中导入 OVF:右键集群 → “部署 OVF 模板” → 选择 .ovf 文件 | ~2 分钟(向导操作) |
| 4 | 等待 OVF 部署完成(磁盘克隆) | ~1-3 分钟 |
| 5 | 修改静态 IP(关键步骤):vim /etc/netplan/00-installer-config.yaml → 改 IP → netplan apply | ~1 分钟 |
| 6 | 可选:修改 root 密码(passwd root)或添加新用户 | ~1 分钟 |
| 7 | 创建快照作为新的“黄金镜像”基线 | ~10 秒 |
总耗时:约 6-12 分钟(从零部署一台配置完好的 Ubuntu 服务器,相比从头安装节省 40-60 分钟)
修改 IP 的快捷命令
bash
# 登录模板(默认 root/fishfinal)
ssh root@<模板当前IP>
# 修改 IP 地址(假设新 IP 为 192.168.0.101)
sed -i 's/192.168.0.220/192.168.0.101/g' /etc/netplan/00-installer-config.yaml
# 应用网络配置
netplan apply
# 验证新 IP
ip a | grep ens160十二、总结与避坑指南
核心操作流程
| 步骤 | 操作 |
|---|---|
| 1 | 右键虚拟机 → 克隆 → 克隆为模板... |
| 2 | 模板类型选 OVF,命名规范 |
| 3 | 目标位置选择 内容库 |
| 4 | 确认配置,点击完成 |
| 5 | 在内容库中验证模板 |
| 6 | 进入模板详情页 → 操作 → 导出项目... |
| 7 | 打包为 tar.gz → 上传到 R2 对象存储 |
三个易错点提醒
| 易错点 | 正确做法 |
|---|---|
| 导出位置错误 | 必须进入模板详情页导出,而不是在库列表页面导出 |
| MAC 地址保留 | 多实例部署时不要勾选,否则网络冲突 |
| CD/DVD 残留 ISO | 导出前检查光驱设备,如有 ISO 路径残留,改为“客户端设备” |
模板优势总结
| 维度 | 对比 |
|---|---|
| 部署速度 | 模板部署 6-12 分钟 vs 全新安装 50-70 分钟 |
| 配置一致性 | 所有 VM 使用相同基线,避免“环境不一致”问题 |
| 跨环境迁移 | OVF + R2 存储,随时随地拉取部署 |
| 批量部署 | 可并行部署多个 VM,仅需修改 IP 即可投入生产 |
结语
通过以上步骤,你已经掌握了一套完整的 vSphere 虚拟机 → OVF 模板 → R2 存储 → 快速批量部署 的工作流。
这套方法论适用于:
- Homelab 系统镜像备份与快速还原
- 标准化的 K8s 节点模板制作(1 个 master + N 个 worker 分钟级批量创建)
- 跨 vCenter 的虚拟机迁移与分发
- 团队协作中的模板共享与版本管理
相关阅读推荐:
附加
如果你不想从头开始制作模板,可以直接下载我已制作好的 Ubuntu 22.04 模板压缩包。该模板包含了本文第十章所列的所有预配置,下载解压后即可在 vSphere 中直接部署使用。
| 项目 | 说明 |
|---|---|
| 适用场景 | Homelab 快速搭建、K8s 集群节点批量部署、开发测试环境 |
| 系统版本 | Ubuntu 22.04.5 LTS Server |
| 预配置内容 | root 启用 + SSH 密码/密钥登录 + 基础软件包(vim/curl/wget/net-tools/git/htop)+ Shell 别名优化 |
| 网络配置 | 静态 IP(默认 192.168.0.220/24,导入后按需修改) |
| 默认密码 | fishfinal(导入后请及时修改) |
| 校验方式 | 下载 .sha256 文件,执行 sha256sum -c *.sha256 验证完整性 |
