Skip to content

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

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)。右键点击它,展开 “克隆” 子菜单,选择 “克隆为模板...”

图1 虚拟机右键菜单 - 克隆为模板

注意:这里有两个容易混淆的选项:

选项用途
克隆为模板...生成一个 vCenter 原生模板(仅限本地部署)
作为模板克隆到库...直接将模板存入内容库

本次我们选择 “克隆为模板...”,因为后续在向导中我们还可以指定目标为内容库,且模板类型可选 OVF。

二、第一步:基本信息配置

在弹出的向导中,关键配置如下:

配置项本次选择说明
模板类型OVF跨平台兼容、可导出备份
克隆为新建模板首次创建,不是覆盖更新
名称ubuntu22.04-server-basic-template建议命名规范,便于识别
备注Installation is based on the Ubuntu Server method.记录模板来源和特征
保留 MAC 地址不勾选避免多实例部署时 MAC 冲突
包括额外配置勾选保留自定义配置(如网卡设置)

图2 基本信息配置界面

为什么选 OVF 而不是“虚拟机模板”?

  • 虚拟机模板:仅限当前 vCenter 使用,无法导出迁移。
  • OVF 模板:标准化打包格式(.ovf + .vmdk),可导出、备份、跨平台分发。

如果你将来需要将这个模板迁移到其他数据中心或分享给团队,OVF 是唯一正确的选择

三、第二步:选择目标位置(内容库)

在“位置”步骤中,选择我们之前创建好的内容库 template(备注为 vm template storage)。

图3 选择内容库作为目标位置

如果你还没有内容库,需要先创建。可以参考我之前写的 vSphere 内容库创建教程,几步就能搞定。

四、第三步:确认配置并执行

最后一步是概览确认,检查模板名称、类型和目标库是否正确。

图4 确认配置概览

确认无误后,点击 “完成”,vCenter 会开始执行克隆任务。

五、任务执行监控

点击“完成”后,vCenter 会在后台执行一系列子任务。你可以在 “任务控制台” 中查看进度:

任务名称状态说明
从虚拟机或虚拟设备克隆到内容库中的 OVF 软件包已完成主任务,将 VM 转换为 OVF 并存入库
创建虚拟机快照已完成克隆前自动创建快照,保证数据一致性
导出 OVF 模板已完成实际导出环节
移除快照已完成导出完成后自动清理快照

整个流程约 4-5 分钟,视虚拟机磁盘大小而定。

图5 任务控制台中的任务执行状态

六、验证结果:模板已在内容库中

任务完成后,进入内容库 template,切换到 “OVF 和 OVA 模板” 选项卡,可以看到新生成的模板:

图6 内容库中的模板列表

点击模板进入详情页,可以看到:

  • 类型:OVF 模板
  • 大小:6.03 GB
  • 客户机操作系统:Ubuntu Linux (64-bit)
  • 操作菜单:支持从此模板新建虚拟机、更新项目、导出项目等

图7 模板详情页面

七、导出到本地:最终备份

如果需要将模板保存到本地硬盘或迁移到其他环境,可以点击 “导出项目...”。这里有一个 关键细节

导出位置结果
❌ 在内容库列表页面点击“导出”只下载一个 CSV 元数据文件
进入模板详情页,在“操作”菜单中点击“导出项目...”下载完整的 OVF 包(.ovf + .vmdk + .nvram)

本次导出得到了 3 个文件:

文件名大小说明
ubuntu22.04-server-basic-template.ovf11 KBVM 硬件配置描述文件
ubuntu22.04-server-basic-template-1.vmdk2.36 GB虚拟磁盘(实际系统数据)
ubuntu22.04-server-basic-template-2.nvram271 KBUEFI 固件设置

图8 导出到本地的 OVF 文件列表

为什么只有 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 GBUbuntu Server + 基础软件包的实际占用
内容库存储模板6.03 GB转换为精简置备格式后的存储占用
导出 OVF 的 VMDK2.36 GB导出时进一步压缩/去重后的文件大小

3. 为什么导出后更小了?

导出 OVF 时,vSphere 会做两件事:

  1. 空洞消除:丢弃未使用的磁盘块(如未格式化的空闲空间、已删除文件占用的空间)
  2. 流式压缩:对实际数据进行压缩,生成体积更小的 .vmdk 文件

4. 导入后会怎样?

当你从 OVF 部署虚拟机时:

  • 默认会保持精简置备,导入后磁盘占用仍为 ~2.36 GB,随着使用逐渐增长
  • 如果选择厚置备,则会扩展为完整大小(如 60 GB),但实际数据仍只有 2.36 GB

5. 结论

显示位置大小含义
内容库模板列表6.03 GB模板在内容库中的存储占用(精简置备)
导出后的 .vmdk2.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.sha256
bash
shasum -a 256 ubuntu22.04-server-basic-template-20260816-0004.tar.gz > \
  ubuntu22.04-server-basic-template-20260816-0004.tar.gz.sha256
bash
# 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/ \
  --progress

3. 在 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 秒
3vSphere 中导入 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 验证完整性

下载地址

最后更新2026/08/15 16:24
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal