免费版的VMWare ESXi非常强大,但是遗憾的是它的客户端vSphere Client不提供克隆虚拟机的功能。其实它的命令行工具已经支持克隆,我们可以手动的方式完成这项工作。

首先,复制虚拟机配置文件:

1.进入vSphere Client:在左侧选择主机->右侧标签页上选择Summary->在DataStore项上单击右建->运行Browse DataStore
2.在Datastore Browser里创建新虚拟机的文件夹,然后把要克隆的虚拟机文件夹中的.vmx文件复制过来(可以改名为新的名字)


然后,用命令行执行克隆:
1.进入命令行界面: 可以用putty,也可以在主机上按Alt-F1,然后输入unsupported进入命令行。回来时按Alt-F2.
2.使用命令创建克隆虚拟机磁盘文件: 
   vmkfstools -i /vmfs/volumes/datastore/BaseVM/BaseVM.vmdk  /vmfs/volumes/datastore/NewVM/newvm.vmdk

这个命令会显示进度,如果文件大的话时间会比较长。

(这个命令是支持克隆快照的。如果要克隆某个快照(Snapshot)的话,以上BaseVM.vmdk就换成要克隆的那个Snapshot文件,如BaseVM-000008.vmdk,vmkfstools会最动生成合并的新文件。)

在管理界面重新配置新虚拟机:

1.回到Datastore Browser界面,右键点击.vmx文件,选择Add to inventory,把这个新虚拟机加入管理界面。
2.在vSphere里面修改新虚拟机的配置:删除原来的Hard Disk,因为它是指向旧的虚拟机的磁盘文件,然后新加一个Hard Disk,并选择使用已有的磁盘文件,选择刚用命令行创建的那个文件。
3.启动新的虚拟机,完成。


克隆了虚拟机以后,发现新的虚拟机的网络设置会有点问题。这是因为克隆的虚拟机会与原来的那个有同样的MAC地址。当你启动它以后,vmware会自动为它分配一个新的MAC地址,而Linux会认为这是一个新的网络接口(或网卡),但机器里的配置文件可能还引用旧的网络接口。比如说,你的网络配置文件/etc/network/interfaces文件里可能会引用eth0,而虚拟机分配新的MAC地址以后,你的Linux里的网络接口可能就是eth1了。

检查是否有这个问题,可以用ifconfig看一下,列出的是否与配置文件中的一致。如果不同,则可以用下面的方法解决。

打开文件 /etc/udev/rules.d/70-persitent-net.rules

可以看到这里了两个MAC地址。第一个是与原来那个虚拟机相同。那么要做的是把第一条删掉(或者要保险的话注释掉),第二条改成eth0。重启虚拟机应能把问题解决了。