
很多朋友第一次接触ESXi手里的物理服务器可能就一台装好免费的ESXi之后第一件事就是想从现有的虚拟机复制出几个副本用来跑测试、做实验。打开ESXi的网页管理界面选中一台虚拟机右键从上到下翻菜单常见的“关闭”“编辑设置”“导出”但就是没有“克隆”选项。这时候很多人会怀疑是不是我用的ESXi授权太基础功能被锁了其实跟授权关系不大真正的原因是单台ESXi的Host Client里默认没有“克隆”这个入口VMware把这一类高级管理操作全部设计到了vCenter里。没有vCenter不代表就没法克隆只是需要一个绕开图形界面的思路。这篇文章我把实际用过的几种方法整理出来包括SSH命令行克隆、OVF导出导入、直接复制文件的注意事项以及克隆完成后的收尾工作希望能帮到没有vCenter管理节点的朋友。1. 先弄清楚为什么没有vCenter就找不到“克隆”按钮1.1 ESXi的网页界面到底缺了什么ESXi本身是一个虚拟化宿主机操作系统它的HTML5页面叫Host ClientvCenter安装后的管理页面叫vSphere Client。两者名字相近职责完全不同ESXi的Host Client负责单台主机的操作比如开关虚拟机、编辑配置、查看性能vCenter则是一个集中管理节点安装在VCSA或者Windows服务器上负责把多台ESXi纳管起来提供克隆、模板、分布式交换机、SDRS、HA、FT这些高级功能。所以你面对的是单台ESXi的网页界面当然看不到“克隆虚拟机”和“克隆为模板”按钮。这不是ESXi免费版被限制而是产品分工就是如此。很多从VMware Workstation转过来的朋友更不习惯Workstation里“克隆”就是一个菜单项到了ESXi里直接没了一时间确实懵。没有vCenter不等于没有能力克隆。ESXi底层文件系统VMFS上虚拟机就是一组文件夹和文件核心是VMX配置文件加VMDK磁盘文件。理解了这一层你会发现至少有三种绕开vCenter的方法通过SSH命令调用vmkfstools克隆磁盘、通过OVF导出导入整个虚拟机、直接复制文件目录后重新注册。下面逐个展开说清楚优缺点。1.2 三条替代路径先选好适合你的SSH vmkfstools性能最好适合主机内部克隆单台ESXi上复制虚拟机最推荐。OVF导出/导入适合没有SSH经验的新手也适合把虚拟机备份或迁移到其他主机。直接复制VMFS目录文件看上去最“快”但坑最多弄不好就“磁盘不存在”或“虚拟机无法启动”。这三条路径我都实际用过。日常单机测试我基本用SSHvmkfstools如果要把拷贝带走或落盘备份我用OVF导出直接复制目录文件这个方法只适合没有快照、虚拟机已经关机、且你对VMFS文件结构非常熟的情况否则建议不要碰。2. 方案一SSH vmkfstools性能最优的“手术刀”这个方法核心就两步用vmkfstools把源虚拟机的磁盘克隆出一份新VMDK再复制一份VMX文件改几行参数最后注册。整个过程不经过vCenter完全靠ESXi主机自带的命令完成速度非常快因为数据在本机存储上拷贝不走网络。2.1 前期准备打开SSH、找到虚拟机路径、确认电源状态打开ESXi的Web界面进入“管理”→“服务”找到SSH启动它。这一步十分关键很多朋友找半天没找到因为ESXi默认SSH是关闭的。启动后用Xshell、SecureCRT或者MobaXterm连接ESXi主机IP用户名root密码是ESXi管理密码。连接成功后先看一眼虚拟机所在的数据存储ls /vmfs/volumes/常见会看到datastore1、datastore2这类名称。接着进入具体目录看看虚拟机的文件ls -la /vmfs/volumes/datastore1/vm-name/你会看到一台虚拟机的所有文件其中VMX文件是虚拟机的“身份证”VMDK文件是数据盘。VMDK又分两种文件比如vm-name.vmdk是描述文件真正存储数据的是vm-name-flat.vmdk。命令ls -la里能看到两个文件大小差异极大描述文件只有几KBflat文件是实际大小。启动克隆操作前建议先把源虚拟机关机。虽然vmkfstools理论上可以在虚拟机运行状态下备份磁盘但运行中的数据库、应用可能处于脏状态克隆出来的磁盘数据不保证一致。我一般会先做两件事一是关机二是如果源虚拟机很重要先在Web界面上打一个“快照”克隆完成后删除快照防止中途出问题。这一条真的建议养成习惯防止克隆出来的是一台“坏掉”的系统。2.2 用vmkfstools克隆虚拟磁盘先在数据存储上新建一个目标目录避免和源虚拟机文件混在一起mkdir /vmfs/volumes/datastore1/new-vm然后执行克隆命令vmkfstools -i /vmfs/volumes/datastore1/vm-name/vm-name.vmdk /vmfs/volumes/datastore1/new-vm/new-vm.vmdk -d thin说明一下这个命令-i后面的参数是源VMDK的完整路径必须是描述文件不是-flat文件。第二个路径是目标VMDK文件路径。-d thin表示目标磁盘采用精简置备也就是用多少占多少。如果源是大文件目标用thin可以省空间。如果你希望目标磁盘是厚置备可以改成-d eagerzeroedthick。普通用户默认用thin足够。执行过程中终端会显示进度百分比磁盘越大等待越久。克隆完成后用ls -la查看目标目录你会看到new-vm.vmdk和new-vm-flat.vmdk都出现了。有一点要明确vmkfstools把它当成一个全新的磁盘来写会重新生成UUID、CID等信息所以克隆出来的VMDK和源VMDK在文件系统级不会互相“打架”。2.3 复制VMX文件修改关键参数磁盘克隆好接下来要做的是一台虚拟机“外壳”。最简单的办法复制源虚拟机的VMX文件过来再修改几个关键参数让新虚拟机使用克隆出的磁盘。cp /vmfs/volumes/datastore1/vm-name/vm-name.vmx /vmfs/volumes/datastore1/new-vm/new-vm.vmx然后编辑这个VMX文件。ESXi自带vi编辑器可以直接用vi /vmfs/volumes/datastore1/new-vm/new-vm.vmx重点修改以下几项把displayName vm-name改成displayName new-vm否则Web界面上显示的名称还是源虚拟机名字。把scsi0:0.fileName vm-name.vmdk改成scsi0:0.fileName new-vm.vmdk确保新虚拟机指向克隆出来的磁盘。删除uuid.bios ...这一行让ESXi在注册时自动生成新的BIOS UUID。删除ethernet0.address ...和ethernet0.addressType static或者直接把ethernet0.generatedAddress也删掉。这样新虚拟机的网卡MAC就不会和源虚拟机重复避免同一网络里出现MAC冲突。如果你觉得手工编辑麻烦用sed批量替换也可以但改VMX文件还是建议用vi逐行确认更稳妥。把所有改完之后保存退出。2.4 注册新虚拟机到ESXi清单新VMX文件准备好以后有两种注册方式一种是在Web界面创建新虚拟机不添加磁盘之后“编辑设置”里选择现有的VMDK另一种是我更推荐在SSH里用命令注册一次搞定vim-cmd solo/registervm /vmfs/volumes/datastore1/new-vm/new-vm.vmx执行后没有报错回到Web界面刷新就能看到新虚拟机出现在清单里。右键电源开启之后登录系统修改主机名、IP地址等。启动过程中如果提示“虚拟机文件无法访问”优先检查路径有没有写错特别是路径中包含空格时要用引号括起来或者路径层数不对。注册后可以用下面命令确认列表vim-cmd vmsvc/getallvms这个命令会列出ESXi上所有已注册的虚拟机包括VMID和VMX路径排查问题很方便。2.5 为什么不用“直接复制VMDK”而要用vmkfstools有人会觉得既然都是复制直接用cp把整个虚拟机目录拷贝一遍不就行了其实在VMFS上直接复制VMDK文件很容易掉进两个坑一是磁盘描述文件里的UUID还是原来的同一台ESXi上同时存在两个相同UUID的磁盘可能会被识别为同一个磁盘二是虚拟机如果有快照直接复制出来的磁盘文件之间依赖关系会断掉新虚拟机的VMDK链根本指向错误。vmkfstools不是简单复制文件它会重新构造一个完整的、独立的磁盘链把源磁盘所有数据“刷”到新磁盘里绕开UUID冲突和快照链断裂问题。3. 方案二OVF导出导入零命令行但要注意效率对很多刚接触ESXi的朋友来说开SSH敲命令有点压力。另外一种非常简单、完全图形化的方法就是通过Host Client自带的OVF导出功能把虚拟机导出成一个OVF包然后再部署出一个新虚拟机。这个方法虽然慢一点但安全可靠不需要动命令行。3.1 Host Client导出OVF的具体操作选中要克隆的虚拟机在“操作”菜单里找到“导出”系统会把虚拟机当前状态打包成一个OVF模板文件。导出时会提示你输入文件名也可以直接开始。页面会生成一个下载链接浏览器下载下来的文件通常有多个一个.ovf描述文件一个或多个.vmdk磁盘文件还有一个.mf校验文件。如果虚拟机磁盘很大这一步会等很久尤其是导出到本地网络硬盘速度可能比想象中慢。导出前一定要先关机虚拟机。和vmkfstools一样运行中的虚拟机导出虽然也能生成OVF但数据一致性没有保障。导出过程中不要断开网页连接否则任务会中断也会产生大量垃圾临时文件。3.2 从OVF部署新虚拟机导出完成后回到Host Client的首页选择“创建/注册虚拟机”选择“从OVF或OVA文件部署虚拟机”。实际上是选择导入指定OVF文件路径然后选择存放位置、部署名称和网络点击完成。ESXi会将OVF包里的VMDK解压到目标数据存储根据OVF里的默认配置生成一台新的虚拟机。这个过程中OVF包相当于一个“快递箱”里面包含了CPU、内存、网卡、磁盘等配置尤其适合跨管理器、跨主机迁移场景。如果你的ESXi之间版本差别很大或者你想把本地的虚拟机放到另一台服务器上用OVF导出导入是最稳妥的做法。3.3 OVF与SSH克隆适用场景对比对比项SSH vmkfstoolsOVF导出导入操作门槛需要SSH和命令行基础纯Web界面新手友好克隆速度极快本地磁盘拷贝慢需要打包和解包数据一致性推荐关机后克隆推荐关机后导出跨主机迁移需要手动复制文件天然支持一键部署磁盘链处理重新构造无快照遗留保留当前状态快照会被整合我的建议是如果你只是单一ESXi上做几个测试副本用SSHvmkfstools速度快还不容易出幺蛾子如果你要“搬家”比如换服务器、迁移到另一个机房那就规规矩矩用OVF导出导入避免手动搬文件后踩坑。4. 直接复制VMDK可以但必须知道这三个坑直接cp -r整个虚拟机目录听上去最直接不少人试了后发现新虚拟机注册不上或者启动就报错。下面来说说为什么经常失败以及如果非要这么干该怎么避开。4.1 坑一磁盘UUID和CID重复VMDK描述文件里有一个ddb.uuid还有一个CIDContent ID这是VMware用来识别磁盘版本的。直接复制VMDK文件这两个值会原封不动拷贝过来。一台ESXi上如果出现了两块“身份”完全相同的磁盘虚拟化平台就无法区分可能出现注册失败或者两个虚拟机共同“抢”同一块磁盘导致数据损坏。解决方法是复制文件后手工修改描述文件里的UUID和CID或者干脆不复制描述文件只复制-flat文件然后新建一个描述文件指向它。这种操作繁琐且容易出错所以我不推荐新手使用。既然vmkfstools已经能解决所有这些问题为什么还要用直接复制的方式呢4.2 坑二快照链断掉如果源虚拟机做过快照VMDK并不是一个完整的磁盘文件而是一串父子磁盘链。父磁盘保存最初的系统状态子磁盘是后续写入的增量数据每个子磁盘都通过描述文件记录父盘路径。直接复制整个目录从源文件到新文件如果路径变了或者某个父子文件没复制到新虚拟机就会找不到父盘启动时直接报“无法打开磁盘”。vmkfstools在克隆时会把整条磁盘链“拍扁”成一个完整盘新VMF文件只有一层不依赖任何父盘这也是它最省心的原因。所以遇到有快照的虚拟机尤其要避免目录复制方案。4.3 坑三磁盘描述文件里的内容与文件不匹配VMDK描述文件里有RW行记录了磁盘扇区总数、适配器类型、–flat文件名、实际大小等信息。直接复制出来的文件如果和源文件处于同一存储也许还能对上但如果你下载到本地改过名或者从另一个文件系统拷贝回来描述文件里的–flat文件名或者大小信息可能就和实际文件对不上虚拟机自然无法启动。我自己踩过这个坑有一次图省事从本地压缩包解压到ESXi注册后提示“指定的文件不是有效的虚拟磁盘”。后来用vmkfstools -i重新处理了一下才恢复可用。从那以后我基本不再尝试直接复制VMDK来克隆虚拟机。5. 克隆完成后的收尾别再带着“老身份证”开机无论用哪种方法克隆出来的虚拟机本质上都是源系统的一份“快照”里面所有配置都和源一模一样。如果直接开机网络里会出现两台机器抢同一个IPWindows的SID也相同域环境里更是容易声场冲突。所以克隆完成一定要做收尾工作。5.1 修改主机名、IP地址和SIDLinux虚拟机比较简单改/etc/hostname和/etc/hosts重启后主机名就变了然后修改网卡配置文件里的IP地址。Windows虚拟机就繁琐一点特别是要加入域的机器需要改计算机名再用工具重置Sysprep或者在克隆前做“通用化”准备。域环境里克隆前不清理会遇到计算机证书问题域账号也可能无法互信。如果没有域环境只是测试用改一下计算机名和IP即可。但强烈建议养成克隆后先断网再开机的好习惯防止网卡IP和MAC同时重复。如果你用的是VMX里删掉MAC的方法新网卡会拿到一个新的MACIP地址就不会因为DHCP记录冲突。但静态IP一定要手动改这点千万别忘。5.2 重新调整硬件设置与磁盘UUID克隆出来的虚拟机硬件配置和源虚拟机完全一样如果源虚拟机分配了8G内存、4核CPU而你的测试场景只需要2G内存、1核CPU可以在克隆后先关机然后编辑设置改小。磁盘UUID方面用vmkfstools克隆出来的新盘不会和源盘冲突但如果用的是OVF导出导入部署时VMware也会自动重新生成UUID。只有直接复制文件时才需要手动处理这一点前面已经说过。5.3 验证克隆系统开机之后不要急着扔到业务环境先做几个基本验证能ping通网关IP不冲突。能登录控制台系统没有报错。文件系统挂载正常特别是Windows的C盘和D盘。如果有数据库连接确认服务能正常启动。验证时间不固定至少观察十几分钟没有问题再考虑把这台克隆虚拟机投入测试使用。如果发现系统反复重启或者蓝屏多半是磁盘驱动问题检查一下是否用了源虚拟机不支持的新虚拟硬件版本。6. 常见问题速查表与独家技巧现象常见原因解决方法克隆后无法启动提示“磁盘不存在”VMX中的磁盘路径写错或VMDK描述文件路径不对检查VMX里scsi0:0.fileName指向的VMDK是否存在克隆后Windows蓝屏/无法引导磁盘控制器驱动不匹配或UUID冲突改用vmkfstools重新克隆或用OVF导入同时开两台虚拟机网络卡顿网卡MAC重复删除VMX中的ethernet0.address和addressType重启克隆过程中数据存储空间不足目标数据存储没有足够空间计算源磁盘大小并留出余量用df -h /vmfs/volumes/datastore1确认注册VMX后清单里没有出现新虚拟机registervm路径错误用vim-cmd vmsvc/getallvms查看确认路径无空格问题OVF导出一直转圈下载失败导出文件过大浏览器连接断开用支持断点续传的下载工具或分卷导出再分享几个我在实操中的小技巧不要用cp -r整个目录这样克隆虚拟机除非你对VMFS文件结构非常精通。我就曾经因为直接复制导致源虚拟机都启动不了最后只能把源删掉重新恢复。用vmkfstools虽然命令多一步但安全得多。在SSH里操作时尽量用Tab自动补全路径减少手误。如果路径里有空格一定用双引号包住比如/vmfs/volumes/datastore1/My VM/My VM.vmx。克隆前给源虚拟机打一个快照克隆完成后立即删除快照。这样做的好处是就算克隆出来的虚拟机有问题源虚拟机还是完好的。删除快照会合并增量数据源虚拟机性能也不会受影响。如果你开始管理的主机数量超过三台建议认真考虑部署一个vCenter。vCenter带来的不只是克隆按钮还有模板、资源池、报警、权限管理等能力。单宿主机的场景可以用SSH顶一阵扩大规模后vCenter的便利性是用命令行替代不了的。注意部署VCSA时证书过期之类的问题也要提前规划好否则又会遇到一堆麻烦。总结一下我的实际体会没有vCenter的ESXi克隆虚拟机完全可行SSHvmkfstools是我最推荐的方式速度快、可靠性高。只是它不像vCenter里点几下鼠标那么直观需要你稍微克服一下对命令行的恐惧。当你成功克隆出第一台虚拟机再回头看这个过程你会觉得ESXi的管理并没有想象中那么“缺零件”。后面再碰到“没有vCenter怎么办”这种问题也就知道该从哪里下手了。