背景需求

需要给客户提供预先封装好的虚拟机系统模版,供客户导入安装;因此需要从ESXi导出 OVAOVF虚拟机模版提供给客户;

需要在保证虚拟机完整性的前提下导出的体积最小的虚拟机模版,因此本文章将从2个方面记录具体的导出步骤;

虚拟机瘦身

当虚拟机完整安装,功能测试通过后,需要对虚拟机的磁盘进行剩余空间置零填充,这样可以保证在导出模版时,尽可能释放未使用的磁盘空间:

  1. 虚拟机系统内,删除所有不需要的文件,包括安装包,日志等;
  2. 对磁盘所有未使用的剩余空间全部填充置零操作
# 填充磁盘所有剩余空间,填满自动停止
dd if=/dev/zero of=/zero.fill bs=1M
rm -f /zero.fill
sync
  1. 关闭虚拟机

压缩导出(ovf/ova)

通常可以从 ESXi 的 web client 或 VCenter 管理界面上进行虚拟机的模版导出,但针对单机的 ESXi 我更喜欢使用瑞士军刀般的命令行工具 voftool 单刀直入,一键搞定!

voftoolvmware 官方出品的命令行工具(现在是博通 broadcom)可以快速方便地从 ESXi 上导出指定虚拟机的 ovf 或 ova 镜像,并支持设置压缩等级,可进一步压缩镜像体积;

安装 voftool 工具

官方下载地址,选择对应的操作系统版本下载,选择最新版本即可

下载后解压缩,进入目录就可以直接执行 voftool 指令

导出虚拟机

简单使用如下指令,就可以一键轻松导出 ovf 格式的虚拟机模版:

# 将 ESXi 上的 test 虚拟机导出为 test_vm.ovf
./ovftool --compress=9 vi://192.168.50.51/test_vm ~/test_vm.ovf
# 根据提示输入 ESXi 的登陆账号和密码即可开始导出

voftool 导出 ova

如果导出 ova 模版,只需要将要保存的目标文件后缀名改为 .ova 即可

压缩率实测试

虚拟机内实际数据占用 7.8GB

Linux disk usage

导出后的 ova 模版实际体积为 3.6G
ova-size.png

导入部署OVA

导入部署到 ESXi

导出的 ova 虚拟机模版,自然也可以通过 ovatool 命令直接导入部署到 ESXi 系统中,指令如下:

./ovftool --name=VM_Name --datastore=Datastore_name --diskMode=Disk_mode_options \
--network="VM Network" /opt/test_vm.ova vi://root@192.168.50.51

命令参数说明

  • --name= 指定导入后的虚拟机名称
  • --datastore= 指定虚拟机导入后要存放的数据存储名称
  • --diskMode= 指定导入后的虚拟机磁盘模式,支持 monolithicSparse, monolithicFlat, twoGbMaxExtentSparse, twoGbMaxExtentFlat, seSparse (VI target), eagerZeroedThick (VI target), thin (VI target), thick (VI target), thick (VI target), sparse, flat
  • --network= 指定导入后的虚拟机网卡要接入的端口组名称

导入部署到 VCenter

./ovftool --name=VM_Name --datastore=Datastore_name --diskMode=Disk_mode_options \
--network="VM Network" /opt/test_vm.ova \ vi://username@vCenter.example.org/Datacenter_name/host/Cluster_name/esxi.example.org

与导入 ESXi 的命令参数基本相同,只是导入的目标VCenter路径需要按照实际的 VCenter 架构来进行设定;

KVM 虚拟机的最小化镜像导出参考我之前写的文章

Last modification:March 26, 2025
如果觉得我的文章对你有用,请随意赞赏