快速克隆千台虚拟机
2017-11-23
在前面的内容中,无论是创建“完全克隆”的虚拟机,还是“克隆链接”的虚拟机,都是在VMware Workstation的图形界面中以向导的方式创建的,每次创建一个虚拟机都需要多个步骤才能完成。在创建的虚拟机数量有限的情况下,使用图形界面创建虚拟机还可以接受,如果需要批量创建多台虚拟机,例如创建几十台、上百台甚至上千台虚拟机时,反复的操作会让人“崩溃”。
本文介绍采用VMware提供的命令行工具VMRun.exe并通过编写批处理脚本的方式,实现虚拟机的批量创建、批量启动与批量关机。
VMRun命令
VMRun.exe是VMware Workstation中提供的一个命令行接口程序,可以实现对VMware Workstation虚拟机或远程VMware ESXi虚拟机的大多数管理功能,例如虚拟机的电源管理(开机、关机、休眠、重启、暂停、恢复)、快照管理(创建快照、列出快照、删除快照、恢复到指定快照点)、客户机命令管理(执行客户机中程序、添加管理共享文件夹、列表客户机进程、清除客户机进程)、注册虚拟机、删除虚拟机、克隆虚拟机等功能。可以在命令行中执行该程序。在命令窗口中进入C:Program Files(x86)VMwareVMware Workstation文件夹,执行vmrun /?可以查看帮助参数。vmrun的命令格式如下:
vmrun 认证标志 命令参数
其中“认证标志(AUTHENTICATION-FLAGS)”包括以下选项。
VMRun的命令包括POWER(电 源)、SNAPSHOT(快 照)、GUEST OS(客户机操作系统)、GENERAL(常规)等几项命令,每个命令又有参数及可选参数。下面介绍主要的VMRun命令。
为了在命令提示窗口中的任何位置执行VMRun.exe命令,你可以将VMRun.exe程序所在的路径添加到系统的PATH路径中。
1.进入“系统属性”,在“高级”选项卡中单击“环境变量”按钮(如图5)。
图5 环境变量
图6 查看path路径
2.在“环境变量”中的“系统变量”中找到Path,单击“编辑”按钮,在“变量值”后面先输入一个英文的分 号( :),然 后 将 VMRun.exe程序的路径(C:Program Files (x86)VMwareVMware Workstation )“粘贴”到此。然后单击“确定”按钮完成设置。
说明:当前示例计算机添加后的环境变量如下:
你可以进入命令提示窗口之后通过执行path命令查看这一参数(如图6)。
(1)POWER COMMANDS(电源命令)
POWER COMMANDS包 括start(启动虚拟机或Team)、stop(关闭虚拟机或Team)、reset(虚拟机复位命令,可选参数为hard或soft)、suspend(休 眠)、pause(暂停,暂停虚拟机的运行)、unpause(从暂停恢复)。这些命令的参数为“Path to vmx file”,即包括详细路径的虚拟机配置文件。
例如,在一台Windows主机中(当前安装了VMware Workstation),启动一个虚拟机的命令如下。
vmrun -T ws start"c:my VMsmyVM.vmx"
在安装了VMware Workstation的Windows主机中,启动远程ESXi主机中一个虚拟机的命令如下。
vmrun -T esx -h https://esxi主机的IP地址或域名/sdk -u hostUser-p hostPassword stop"[storage1] vm/myVM.vmx"
如果要停止、重启、休眠虚拟机,只要将这start换成stop、reset、suspend即可。
如果要在Mac计算机上安装了VMware Fusion,想启动其中的虚拟机,则需要如下的命令。
图7 命令执行结果
(2)SNAPSHOT COMMANDS(快照命令)
使用snapshot命令,可以管理指定虚拟机的快照,包 括 listSnapshots(列出指定虚拟机的快照,可选参数showTree,以树型方 式 显 示)、snapshot(为指定虚拟机创建快照)、deleteSnapshot(删除快照)、revertToSnapshot(恢复到指定快照)。
例如,在一台安装了VMware Workstation的Windows主机中,有一台Windows Server 2008 R2的虚拟机,这个虚拟机有多个快照。
如果要显示该虚拟机的所有快照,可以执行如下命令:
如果要以树型方式显示快照,则在vmx文件后面添加showtree参数。
vmrun -tws listsnapshots "F:VM_TempWS08R2-SP1数据中心 版WS08R2-SP1.vmx"showtree
该命令执行的结果如图7所示。
(3)GUEST OS COMMANDS(客户机系统命令)
使用GUESTOS COMMANDS命令参数,可以检查指定虚拟机中文件(fileExistsInGuest)或目录(directoryExistsIn Guest)是否存在、设置共享文件夹(setSharedFolder State)、删除共享文件夹(removeSharedFolder)、启动虚拟机中指定的程序(runProgramInGuest)、列 出虚拟机中执行程序进程、在虚拟机与主机之间拷贝文件等。
runProgramInGuest——在客户机中执行程序,必须参数为包括详细路径的vmx文件,可选参数为-noWait、-activeWindow、-interactive。
例如,当前有一台Windows XP的虚拟机正在运行(这个虚拟机的配置文件为 c:VMSXPXP.vmx)。
图8 列出所有进程
当前虚拟机的登录账户为Linna,密码为1234。
如果要在主机启动这个虚拟机中的“计算器”程序,则可以执行如下命令:
vmrun -T ws -gu linna-gp 1234 runProgramInGuest"C:VMSXpXP.vmx" "C:windowssystem32calc.exe"
当虚拟机中的“计算器”程序退出时,命令提示符中命令行才会返回到C:提示符。如果不想让执行的程序“退出”后才返回到命令行,则可以添加-noWait。
如果要检查虚拟机C: emp中是否存在test.txt文件,则执行:
如果要想检查C: emp文件夹是否存在,则执行:
如果要执行脚本(脚本程序为C:perlperl.exe,脚本文件在根目录script.pl),格式如下 :
如果要禁用共享文件夹(以C:VMSXpXP.vmx为例,下同),则执行:
如果要为指定虚拟机启用共享文件夹,则执行:
将主机D盘根目录为指定虚拟机设置为共享文件夹,设置共享名为DDDD,命令如下:
如果要列出虚拟机中所有进程,则执行如下命令:
如图8所示。
如果要杀除某个进程(如图8中的“记事本”进程,该进程ID为636),则执行:
可以在主机与虚拟机之间拷贝文件,从主机到虚拟机拷贝文件命令为CopyFileFromHostToGuest,从虚拟机到主机拷贝文件命令为CopyFileFromGuestToHost。例如,如果要将主机g: emp中的vncviewer-6.0.2.exe文件复制到虚拟机的C盘temp文件夹,命名为vnc2.exe,命令如下:
如果要复制的程序是带中文或空格,则需要用英文双引号包括,例如:
如果要从虚拟机复制到主机,则命令如下(从虚拟机C盘temp复制RAR3.51官方版.exe到G盘temp中命名为rar.exe。
如果要列出所有正在运行的虚拟机,则执行:
如果要为指定的虚拟机安装VMware Tools,则执行:
如果要克隆虚拟机,则可以先关闭虚拟机,为虚拟机创建快照,之后再克隆虚拟机。
执行上述命令之后,将为C:vmsxpxp.vmx虚拟机关机、创建一个名为fix1的快照,并从此快照创建出一个名为XP01、保存在C:vmsxp01下的虚拟机。克隆的方式为“链接克隆”,如果要创建完全克隆的虚拟机,则参数改为full,命令如下:
如果要删除快照,例如删除c:vmsxpxp.vmx中的快照fix1,则执行:
编写脚本批量创建虚拟机
下面是一个编写好的批处理程序,可以实现批量创建虚拟机、批量启动虚拟机,并向虚拟机中添加配置文件、实现添加启用VNC连接并为不同虚拟机设置不同VNC连接端口的功能。
在本示例中,源虚拟机保存配置文件为“F:VMS-2016Windows 7Windows 7.vmx”,该虚拟机安装好操作系统、应用程序之后关闭虚拟机。该脚本实现的功能主要如下。
1.之后脚本会创建一个名为VM11的快照。
2.克隆创建10个虚拟机(参数从1001到1010,如果你要修改虚拟机的数量,只需要修改文中的1010即可,例如要创建100个虚拟机则改为1100)。新克隆的虚拟机保存在F:VMS-2017文件夹中。每个虚拟机分别保存在1001开始的子文件夹中,虚拟机名称以1001开始。
3.向每个虚拟机添加启用VNC命令、添加虚拟机己复制命令、并指定VNC连接端口为虚拟机的顺序号,例如1001的虚拟机的VNC连接端口为1001。
4.创建虚拟机完成后,可以间隔30秒启动虚拟机。如果你要修改启动间隔,修改ping -n 30 127.0.0.1中的30即可。
5.之后可以间隔10秒停止虚拟机。
注意:如果创建“克隆链接”的虚拟机,父虚拟机所在位置最好是在SSD磁盘,这样可以提高虚拟机的性能。如果要创建“完全克隆”的虚拟机,则将以下脚本中linked改为full。在实际的环境中,需要用你的虚拟机路径、克隆目标代替脚本中的路径。
编写的脚本内容如下所示。
REM 本批处理完成为虚拟机创建快照、从快照创建克隆链接的虚拟机、为虚拟机配置参数、启动虚拟机、停止虚拟机的功能
REM 王春海,2017年2月20日
PAUSE 关闭所有正在运行的虚拟机完成,按任意键退出。