目前Azure上复制VM可以有多种方法:
1 创建User Image,可以快速复制多台VM,但目前托管磁盘只支持Generalized的模式,需要对User和配置进行重置。
2 从VHD或托管磁盘复制VM,通过Json Template、Powershell、CLI或SDK的方式等,都可以快速复制VM,但需要自己添加数据盘
本文的Powershell脚本将通过采用对VHD或托管磁盘的复制实现对VM的复制,包括OS Disk和Data Disk。
具体实现方式:
1 读取csv配置文件
具体参数如下
- location:chinanorth或chinaeast
- oldrgname:源VM的资源组名称
- vmname:源VM的名称
- vnetrgname:新VM将要加入的VNET的资源组名称
- vnetname:新VM将要加入的VNET的名称
- subnetname:新VM将要加入的Subnet名称
- newrgname:新VM的资源组名称,如果没有将新建
- newvmname:新VM的名称
- DiagStorageAccountName:新VM诊断的存储账户名称,如果没有这个存储账户,将新建
- vmsize:新VM的型号
- vmStorageType:新VM的存储类型,Standard_LRS或Premium_LRS
- osType:Linux或Windows
- avsname:Availability Set的名称,如果没有将新建
2 复制Disk
根据源VM的信息,把源VM的OS Disk和Data Disk进行复制。
具体复制方式为:如果是托管磁盘,直接进行复制;如果是VHD文件,先在同存储账号下创建临时的container,把vhd文件复制到这个container里,再通过这个临时container内的VHD文件复制托管磁盘。
3 创建VM
根据参数文件的参数创建:
- 创建NIC
- 把复制的OS Disk挂载到VM
- 创建VM
- 把Data Disk挂载到VM
具体的脚本链接:
https://github.com/hengv/Azure/tree/master/VM/Create-vmfromvm-withdatadisk
总结:
采用Powershell把源VM的OS Disk和Data Disk进行复制,由复制的托管磁盘创建VM,实现Azure VM的复制。