通过使用 Powershell 将专用托管磁盘附加为 OS 磁盘来创建新 VM。 专用磁盘是保留原始 VM 中的用户帐户、应用程序和其他状态数据的现有 VM 中虚拟硬盘 (VHD) 的副本。
使用专用 VHD 创建新 VM 时,新 VM 将保留原始 VM 的计算机名。 还会保留其他计算机特定信息,在某些情况下,这种重复信息可能会导致问题。 请注意,在复制 VM 时,应用程序依赖哪些类型的计算机特定信息。
可以使用两个选项:
本主题演示如何使用托管磁盘。 如果有需要使用存储帐户的旧版部署,请参阅从存储帐户中的专用 VHD 创建 VM
开始之前
如果使用 PowerShell,请确保使用的是最新版本的 AzureRM.Compute PowerShell 模块。
PowerShell复制
Install-ModuleAzureRM.Compute-RequiredVersion2.6.0
有关详细信息,请参阅Azure PowerShell 版本控制。
选项 1:上传专用 VHD
可从使用本地虚拟化工具(如 Hyper-V)创建的专用 VM 或从另一个云导出的 VM 上传 VHD。
准备 VM
如果想要使用当前 VHD 创建新 VM,请确保完成以下步骤。
准备好要上传到 Azure 的 Windows VHD。不要使用 Sysprep 通用化 VM。
删除 VM 上安装的所有来宾虚拟化工具和代理(例如 VMware 工具)。
确保 VM 配置为通过 DHCP 来提取其 IP 地址和 DNS 设置。 这确保服务器在启动时在 VNet 中获取 IP 地址。
获取存储帐户
需要 Azure 中的存储帐户来存储上传的 VHD。 可以使用现有存储帐户,也可以创建新存储帐户。
显示可用的存储帐户,请键入:
PowerShell复制
Get-AzureRmStorageAccount
如果要使用现有存储帐户,请转到上传 VHD部分。
若要创建存储帐户,请执行以下步骤:
需要应在其中创建存储帐户的资源组的名称。 若要查找订阅中的所有资源组,请键入:
PowerShell复制
Get-AzureRmResourceGroup
若要在中国北部区域中创建名为myResourceGroup的资源组,请键入:
PowerShell复制
New-AzureRmResourceGroup-NamemyResourceGroup-Location"China North"
使用New-AzureRmStorageAccountcmdlet 在此资源组中创建名为mystorageaccount的存储帐户:
PowerShell复制
New-AzureRmStorageAccount-ResourceGroupNamemyResourceGroup-Namemystorageaccount-Location"China North"`-SkuName"Standard_LRS"-Kind"Storage"
将 VHD 上传到存储帐户
使用Add-AzureRmVhdcmdlet 将 VHD 上传到存储帐户中的容器。 本示例将文件myVHD.vhd从"C:\Users\Public\Documents\Virtual hard disks\"上传到myResourceGroup资源组中名为mystorageaccount的存储帐户。 该文件存储在名为mycontainer的容器中,新文件名为myUploadedVHD.vhd。
PowerShell复制
$resourceGroupName="myResourceGroup"$urlOfUploadedVhd="https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer/myUploadedVHD.vhd"Add-AzureRmVhd-ResourceGroupName$resourceGroupName-Destination$urlOfUploadedVhd`-LocalFilePath"C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd"
如果成功,会显示类似于下面的响应:
PowerShell复制
MD5 hash is being calculatedforthe file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd.MD5 hash calculation is completed.Elapsed timeforthe operation:00:03:35Creating new page blob of size53687091712...Elapsed timeforupload:01:12:49LocalFilePath DestinationUri------------- --------------C:\Users\Public\Doc... https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer/myUploadedVHD.vhd
完成执行此命令可能需要一段时间,具体取决于网络连接速度和 VHD 文件的大小
从 VHD 创建托管磁盘
使用New-AzureRMDisk通过存储帐户中的专用 VHD 创建托管磁盘。 此示例使用myOSDisk1作为磁盘名称,将磁盘置于StandardLRS存储中并使用https://storageaccount.blob.core.chinacloudapi.cn/vhdcontainer/osdisk.vhd作为源 VHD 的 URI。
创建适用于新 VM 的新资源组。
PowerShell复制
$destinationResourceGroup='myDestinationResourceGroup'New-AzureRmResourceGroup-Location$location-Name$destinationResourceGroup
从上传的 VHD 创建新 OS 磁盘。
PowerShell复制
$sourceUri= (https://storageaccount.blob.core.chinacloudapi.cn/vhdcontainer/osdisk.vhd)$osDiskName='myOsDisk'$osDisk=New-AzureRmDisk-DiskName$osDiskName-Disk` (New-AzureRmDiskConfig-AccountTypeStandardLRS-Location$location-CreateOptionImport `-SourceUri$sourceUri) `-ResourceGroupName$destinationResourceGroup
选项 2:复制现有 Azure VM
通过拍摄 VM 快照来创建使用托管磁盘的 VM 副本,并使用该快照创建一个新的托管磁盘和一个新 VM。
拍摄 OS 磁盘快照
可拍摄整个 VM(包括所有磁盘)快照或仅拍摄单个磁盘快照。 以下步骤展示了如何使用New-AzureRmSnapshotcmdlet 拍摄仅 VM 的 OS 磁盘的快照。
设置一些参数。
PowerShell复制
$resourceGroupName='myResourceGroup'$vmName='myVM'$location='chinanorth'$snapshotName='mySnapshot'
获取 VM 对象。
PowerShell复制
$vm=Get-AzureRmVM-Name$vmName-ResourceGroupName$resourceGroupName
获取 OS 磁盘名称。
PowerShell复制
$disk=Get-AzureRmDisk-ResourceGroupName$resourceGroupName-DiskName$vm.StorageProfile.OsDisk.Name
创建快照配置。
PowerShell复制
$snapshotConfig=New-AzureRmSnapshotConfig-SourceUri$disk.Id-OsTypeWindows-CreateOptionCopy-Location$location
创建快照。
PowerShell复制
$snapShot=New-AzureRmSnapshot-Snapshot$snapshotConfig-SnapshotName$snapshotName-ResourceGroupName$resourceGroupName
如果计划使用快照创建需要高性能的 VM,请结合使用-AccountType Premium_LRS参数和 New-AzureRmSnapshot 命令。 该参数创建快照,使其作为高级托管磁盘进行存储。 高级托管磁盘比标准托管磁盘开销大。 因此使用该参数前,请确保确实需要高级托管磁盘。
从快照创建新磁盘
使用New-AzureRMDisk从快照创建托管磁盘。 此示例使用“myOSDisk”作为磁盘名称。
创建适用于新 VM 的新资源组。
PowerShell复制
$destinationResourceGroup='myDestinationResourceGroup'New-AzureRmResourceGroup-Location$location-Name$destinationResourceGroup
设置 OS 磁盘名称。
PowerShell复制
$osDiskName='myOsDisk'
创建托管磁盘。
PowerShell复制
$osDisk=New-AzureRmDisk-DiskName$osDiskName-Disk` (New-AzureRmDiskConfig-Location$location-CreateOptionCopy `-SourceResourceId$snapshot.Id) `-ResourceGroupName$destinationResourceGroup
创建新 VM
创建新 VM 使用的网络和其他 VM 资源。
创建子网和 vNet
创建虚拟网络的 vNet 和子网。
创建子网。 本示例在资源组“myDestinationResourceGroup”中创建名为“mySubNet”的子网,并将子网地址前缀设置为 10.0.0.0/24。
PowerShell复制
$subnetName='mySubNet'$singleSubnet=New-AzureRmVirtualNetworkSubnetConfig-Name$subnetName-AddressPrefix10.0.0.0/24
创建 vNet。 本示例将虚拟网络名称设置为myVnetName,将位置设置为“中国北部”,将虚拟网络的地址前缀设置为10.0.0.0/16。
PowerShell复制
$vnetName="myVnetName"$vnet=New-AzureRmVirtualNetwork-Name$vnetName-ResourceGroupName$destinationResourceGroup-Location$location`-AddressPrefix10.0.0.0/16-Subnet$singleSubnet
创建网络安全组和 RDP 规则
若要使用 RDP 登录到 VM,需要创建一个允许在端口 3389 上进行 RDP 访问的安全规则。 由于新 VM 的 VHD 是从现有专用 VM 创建的,因此可以将源虚拟机中的帐户用于 RDP。
本示例将 NSG 名称设置为myNsg,将 RDP 规则名称设置为myRdpRule。
PowerShell复制
$nsgName="myNsg"$rdpRule=New-AzureRmNetworkSecurityRuleConfig-NamemyRdpRule-Description"Allow RDP"`-AccessAllow-ProtocolTcp-DirectionInbound-Priority110`-SourceAddressPrefixInternet-SourcePortRange* `-DestinationAddressPrefix*-DestinationPortRange3389$nsg=New-AzureRmNetworkSecurityGroup-ResourceGroupName$destinationResourceGroup-Location$location`-Name$nsgName-SecurityRules$rdpRule
有关终结点和 NSG 规则的详细信息,请参阅Opening ports to a VM in Azure using PowerShell(使用 PowerShell 在 Azure 中打开 VM 端口)。
创建公共 IP 地址和 NIC
若要与虚拟网络中的虚拟机通信,需要一个公共 IP 地址和网络接口。
创建公共 IP。 在此示例中,公共 IP 地址名称设置为myIP。
PowerShell复制
$ipName="myIP"$pip=New-AzureRmPublicIpAddress-Name$ipName-ResourceGroupName$destinationResourceGroup-Location$location`-AllocationMethodDynamic
创建 NIC。 在此示例中,NIC 名称设置为myNicName。
PowerShell复制
$nicName="myNicName"$nic=New-AzureRmNetworkInterface-Name$nicName-ResourceGroupName$destinationResourceGroup`-Location$location-SubnetId$vnet.Subnets[0].Id-PublicIpAddressId$pip.Id-NetworkSecurityGroupId$nsg.Id
设置 VM 名称和大小
此示例将 VM 名称设置为“myVM”,将 VM 大小设置为“Standard_A2”。
PowerShell复制
$vmName="myVM"$vmConfig=New-AzureRmVMConfig-VMName$vmName-VMSize"Standard_A2"
添加 NIC
PowerShell复制
$vm=Add-AzureRmVMNetworkInterface-VM$vmConfig-Id$nic.Id
添加 OS 磁盘
使用Set-AzureRmVMOSDisk将 OS 磁盘添加到配置。 此示例将磁盘大小设置为128 GB并附加托管磁盘作为WindowsOS 磁盘。
PowerShell复制
$vm=Set-AzureRmVMOSDisk-VM$vm-ManagedDiskId$osDisk.Id-StorageAccountTypeStandardLRS `-DiskSizeInGB128-CreateOptionAttach-Windows
完成该 VM
使用刚刚创建的New-AzureRMVM配置创建 VM。
PowerShell复制
New-AzureRmVM-ResourceGroupName$destinationResourceGroup-Location$location-VM$vm
如果此命令成功,会看到类似于下面的输出:
PowerShell复制
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
验证是否已创建 VM
应会在Azure 门户的“浏览” > “虚拟机”下看到新建的 VM,也可以使用以下 PowerShell 命令查看该 VM:
PowerShell复制
$vmList=Get-AzureRmVM-ResourceGroupName$destinationResourceGroup$vmList.Name
后续步骤
若要登录到新虚拟机,请在门户中浏览到该 VM,单击“连接”,然后打开远程桌面 RDP 文件。 使用原始虚拟机的帐户凭据登录到新虚拟机。 有关详细信息,请参阅How to connect and log on to an Azure virtual machine running Windows(如何连接并登录到运行 Windows 的 Azure 虚拟机)。立即访问http://market.azure.cn