背景需求
需要给客户提供预先封装好的虚拟机系统模版,供客户导入安装;因此需要从ESXi
导出 OVA
或 OVF
虚拟机模版提供给客户;
需要在保证虚拟机完整性的前提下导出的体积最小的虚拟机模版,因此本文章将从2个方面记录具体的导出步骤;
虚拟机瘦身
当虚拟机完整安装,功能测试通过后,需要对虚拟机的磁盘进行剩余空间置零填充,这样可以保证在导出模版时,尽可能释放未使用的磁盘空间:
- 虚拟机系统内,删除所有不需要的文件,包括安装包,日志等;
- 对磁盘所有未使用的剩余空间全部填充置零操作
# 填充磁盘所有剩余空间,填满自动停止
dd if=/dev/zero of=/zero.fill bs=1M
rm -f /zero.fill
sync
- 关闭虚拟机
压缩导出(ovf/ova)
通常可以从 ESXi
的 web client 或 VCenter
管理界面上进行虚拟机的模版导出,但针对单机的 ESXi 我更喜欢使用瑞士军刀般的命令行工具 voftool
单刀直入,一键搞定!
voftool
是 vmware
官方出品的命令行工具(现在是博通 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 的登陆账号和密码即可开始导出
如果导出 ova 模版,只需要将要保存的目标文件后缀名改为
.ova
即可
压缩率实测试
虚拟机内实际数据占用 7.8GB
导出后的 ova 模版实际体积为 3.6G
导入部署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 虚拟机的最小化镜像导出参考我之前写的文章