VMware Worktation批量克隆虚拟机

env

  • window
  • vmware workstation

使用VMware WorkStation批量克隆虚拟机

1、前提需要先手动创建一台虚拟机,以这台虚拟机为模板进行克隆,请自行创建虚拟机模板,另外这里以vmware workstation14版本为例。

2、批量克隆虚拟机使用vmware自带的vmrun.exe命令行工具,工具所在目录默认为C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe

找到vmrun.exe 命令

3、复制如下内容,保存为windows批处理脚本,例如vmclone.bat,双击运行即可(先看脚本说明)

1
2
3
4
5
6
7
CD "C:\Program Files (x86)\VMware\VMware Workstation\"

vmrun -T ws snapshot "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx" centos7

for /l %%a in (61,1,65) do (
vmrun.exe -T ws clone "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx" "D:\VMware Workstation\%%a\%%a.vmx" full -snapshot=centos7 -cloneName=centos7-%%a
)

脚本命令说明:
CD “C:\Program Files (x86)\VMware\VMware Workstation”
进入vmrun.exe所在目录C:\Program Files (x86)\VMware\VMware Workstation

vmrun -T ws snapshot “D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx” centos7
使用虚拟机模板创建一个快照,其中需要注意D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx为虚拟机模板文件所在路径,在创建模板虚拟机时会自动生成,最后的centos7为快照名称,可以自定义。

for /l %%a in (61,1,65)
使用for循环语句,执行do后面的克隆虚拟机命令, (61,1,65)表示克隆61-65共5个虚拟机,数字自行定义。

vmrun.exe -T ws clone “D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx” “D:\VMware Workstation%%a%%a.vmx” full -snapshot=centos7 -cloneName=centos7-%%a
使用虚拟机快照进行克隆,其中:
D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx
是虚拟机模板所在路径,
D:\VMware Workstation\%%a%%a.vmx
是克隆出来的虚拟机存放路径。
full表示完整克隆,创建链接克隆改为linked,centos7是之前创建的快照名称,后一个centos7为克隆出来的虚拟机名称,可自定义。

自动生成的目录:

进入每个目录,找到以.vxm结尾的文件,双击将虚拟机添加到vmwareworkstation中。

深入了解vmrun命令行

你提供的命令 vmrun -T ws snapshot "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx" centos7 用于使用 VMware 的 vmrun 命令行工具创建虚拟机快照。

命令分解:

  • vmrun: VMware 命令行工具,用于管理虚拟机。
  • -T ws: 指定连接类型为 VMware Workstation。
  • snapshot: 指定要执行的操作是创建快照。
  • "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx": 虚拟机 .vmx 配置文件的完整路径。这是命令中最重要的部分,请务必确保路径正确。
  • centos7: 快照的名称。

潜在问题和改进:

  1. 虚拟机状态: 在创建快照之前,虚拟机必须处于已关闭已开启状态。如果虚拟机处于挂起(暂停)状态,创建快照可能会失败或导致快照不一致。建议在创建快照前先关闭虚拟机,以确保快照的完整性和一致性。你可以使用 vmrun stop 命令来关闭虚拟机:

    1
    vmrun -T ws stop "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx"
  2. 快照名称重复: 如果已经存在名为 centos7 的快照,再次运行此命令将会失败。为了避免这种情况,你可以使用不同的快照名称,或者在创建快照前先删除同名快照(谨慎操作)。删除快照的命令是:

    1
    vmrun -T ws deleteSnapshot "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx" centos7
  3. 完整命令流程(推荐): 结合以上几点,一个更健壮的创建快照的流程应该是:

    • 关闭虚拟机(如果需要):

      1
      vmrun -T ws stop "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx"
    • 删除同名快照(可选,如果需要覆盖现有快照):

      1
      vmrun -T ws deleteSnapshot "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx" centos7
    • 创建快照:

      1
      vmrun -T ws snapshot "D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx" centos7
  4. 路径中的空格: 你已经正确地使用了双引号 "" 来包含包含空格的路径。这是非常重要的,否则 vmrun 命令会解析错误。

  5. 错误处理: vmrun 命令执行失败时会返回错误代码。你可以通过检查返回值来判断命令是否成功执行。在批处理脚本或 Shell 脚本中,这尤其有用。

示例(批处理脚本):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set VM_PATH="D:\VMware Workstation\CentOS7虚拟机模板\CentOS7虚拟机模板.vmx"
set SNAPSHOT_NAME=centos7

vmrun -T ws stop %VM_PATH%
if errorlevel 1 echo Error stopping VM & goto :eof

vmrun -T ws deleteSnapshot %VM_PATH% %SNAPSHOT_NAME%
rem 忽略删除快照的错误,因为可能不存在同名快照

vmrun -T ws snapshot %VM_PATH% %SNAPSHOT_NAME%
if errorlevel 1 echo Error creating snapshot & goto :eof

echo Snapshot created successfully.

通过以上改进,你可以更可靠地使用 vmrun 命令创建虚拟机快照。请根据你的实际情况调整命令和脚本。记住仔细检查虚拟机路径和快照名称,并考虑虚拟机状态。