本主题逐步讲解如何使用 PowerShell 将通用化 VM 的 VHD 上传到 Azure、从该 VHD 创建映像,然后从该映像创建新 VM。 可以上传从本地虚拟化工具或其他云导出的 VHD。 对新的 VM 使用托管磁盘可以简化 VM 管理,在将 VM 置于可用性集中时提供更好的可用性。
若要使用示例脚本,请参阅将 VHD 上传到 Azure 并创建新的 VM 的示例脚本
开始之前
将任何 VHD 上传到 Azure 之前,应该遵循准备要上传到 Azure 的 Windows VHD 或 VHDX
开始迁移到托管磁盘之前,请先查看规划迁移到托管磁盘。
请确保有最新版本的 AzureRM.Compute PowerShell 模块。 运行以下命令来安装该模块。
PowerShell复制
Install-ModuleAzureRM.Compute-RequiredVersion2.6.0
有关详细信息,请参阅Azure PowerShell 版本控制。
使用 Sysprep 通用化 Windows VM
Sysprep 将删除所有个人帐户信息及其他某些数据,并准备好要用作映像的计算机。 有关 Sysprep 的详细信息,请参阅如何使用 Sysprep:简介。
确保 Sysprep 支持计算机上运行的服务器角色。 有关详细信息,请参阅Sysprep Support for Server Roles
Important
如果在首次将 VHD 上传到 Azure 之前运行 Sysprep,请确保先准备好 VM,然后再运行 Sysprep。
登录到 Windows 虚拟机。
以管理员身份打开“命令提示符”窗口。 将目录切换到%windir%\system32\sysprep,然后运行sysprep.exe。
在“系统准备工具”对话框中,选择“进入系统全新体验(OOBE)”,确保已选中“通用化”复选框。
在“关机选项”中选择“关机”。
单击“确定”。
在 Sysprep 完成时,它会关闭虚拟机。 不要重新启动 VM。
登录到 Azure
如果尚未安装 Azure PowerShell 1.4 版或更高版本,请阅读如何安装和配置 Azure PowerShell。
打开 Azure PowerShell 并登录到 Azure 帐户。 此时会打开一个弹出窗口让输入 Azure 帐户凭据。
PowerShell复制
Login-AzureRmAccount-EnvironmentNameAzureChinaCloud
获取可用订阅的订阅 ID。
PowerShell复制
Get-AzureRmSubscription
使用订阅 ID 设置正确的订阅。 将替换为正确订阅的 ID。
PowerShell复制
Select-AzureRmSubscription-SubscriptionId""
获取存储帐户
需要在 Azure 中创建存储帐户来存储上传的 VM 映像。 可以使用现有存储帐户,也可以创建新存储帐户。
如果要使用 VHD 为 VM 创建托管磁盘,存储帐户位置必须与要创建 VM 的位置相同。
显示可用的存储帐户,请键入:
PowerShell复制
Get-AzureRmStorageAccount
如果要使用现有存储帐户,请转到上传 VM 映像部分。
若要创建存储帐户,请执行以下步骤:
需要应在其中创建存储帐户的资源组的名称。 若要查找订阅中的所有资源组,请键入:
PowerShell复制
Get-AzureRmResourceGroup
若要在中国东部区域中创建名为myResourceGroup的资源组,请键入:
PowerShell复制
New-AzureRmResourceGroup-NamemyResourceGroup-Location"China East"
使用New-AzureRmStorageAccountcmdlet 在此资源组中创建名为mystorageaccount的存储帐户:
PowerShell复制
New-AzureRmStorageAccount-ResourceGroupNamemyResourceGroup-Namemystorageaccount-Location"China East"`-SkuName"Standard_LRS"-Kind"Storage"
-SkuName 的有效值为:
Standard_LRS- 本地冗余存储。
Standard_ZRS- 区域冗余存储。
Standard_GRS- 异地冗余存储。
Standard_RAGRS- 读取访问权限异地冗余存储。
Premium_LRS- 高级本地冗余存储。
将 VHD 上传到存储帐户
使用Add-AzureRmVhdcmdlet 将 VHD 上传到存储帐户中的容器。 本示例将文件myVHD.vhd从"C:\Users\Public\Documents\Virtual hard disks\"上传到myResourceGroup资源组中名为mystorageaccount的存储帐户。 该文件将放入名为mycontainer的容器,新文件名为myUploadedVHD.vhd。
PowerShell复制
$rgName="myResourceGroup"$urlOfUploadedImageVhd="https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer/myUploadedVHD.vhd"Add-AzureRmVhd-ResourceGroupName$rgName-Destination$urlOfUploadedImageVhd`-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 创建托管磁盘或新 VM,请保存目标 URI路径供稍后使用。
用于上传 VHD 的其他选项
也可以使用以下方法之一将 VHD 上传到存储帐户:
AzCopy
Azure 存储复制 Blob API
Azure 存储资源管理器上传 Blob
Storage Import/Export Service REST API Reference(存储导入/导出服务 REST API 参考)
如果预估上传时间大于 7 天,建议使用导入/导出服务。 可根据数据大小和传输单位,利用DataTransferSpeedCalculator预估时间。 导入/导出可用于复制到标准存储帐户。 需要使用 AzCopy 等工具从标准存储复制到高级存储帐户。
通过上传的 VHD 创建托管映像
使用通用 OS VHD 创建托管映像。 将值替换为自己的信息。
首先,设置公共参数:
PowerShell复制
$vmName="myVM"$computerName="myComputer"$vmSize="Standard_DS1_v2"$location="China East"$imageName="yourImageName"
使用通用 OS VHD 创建映像。
PowerShell复制
$imageConfig=New-AzureRmImageConfig-Location$location$imageConfig=Set-AzureRmImageOsDisk-Image$imageConfig-OsTypeWindows-OsStateGeneralized-BlobUri$urlOfUploadedImageVhd$image=New-AzureRmImage-ImageName$imageName-ResourceGroupName$rgName-Image$imageConfig
创建虚拟网络
创建虚拟网络的 vNet 和子网。
创建子网。 此示例创建名为mySubnet的子网,其地址前缀为10.0.0.0/24。
PowerShell复制
$subnetName="mySubnet"$singleSubnet=New-AzureRmVirtualNetworkSubnetConfig-Name$subnetName-AddressPrefix10.0.0.0/24
创建虚拟网络。 此示例创建名为myVnet的虚拟网络,其地址前缀为10.0.0.0/16。
PowerShell复制
$vnetName="myVnet"$vnet=New-AzureRmVirtualNetwork-Name$vnetName-ResourceGroupName$rgName-Location$location`-AddressPrefix10.0.0.0/16-Subnet$singleSubnet
创建公共 IP 地址和网络接口
若要与虚拟网络中的虚拟机通信,需要一个公共 IP 地址和网络接口。
创建公共 IP 地址。 此示例创建名为myPip的公共 IP 地址。
PowerShell复制
$ipName="myPip"$pip=New-AzureRmPublicIpAddress-Name$ipName-ResourceGroupName$rgName-Location$location`-AllocationMethodDynamic
创建 NIC。 此示例创建名为myNic的 NIC。
PowerShell复制
$nicName="myNic"$nic=New-AzureRmNetworkInterface-Name$nicName-ResourceGroupName$rgName-Location$location`-SubnetId$vnet.Subnets[0].Id-PublicIpAddressId$pip.Id
创建网络安全组和 RDP 规则
若要使用 RDP 登录到 VM,需要创建一个允许在端口 3389 上进行 RDP 访问的网络安全规则 (NSG)。
此示例创建名为myNsg的 NSG,其中包含一个允许通过端口 3389 传输 RDP 流量的、名为myRdpRule的规则。 有关 NSG 的详细信息,请参阅Opening ports to a VM in Azure using PowerShell(使用 PowerShell 在 Azure 中打开 VM 端口)。
PowerShell复制
$nsgName="myNsg"$ruleName="myRdpRule"$rdpRule=New-AzureRmNetworkSecurityRuleConfig-Name$ruleName-Description"Allow RDP"`-AccessAllow-ProtocolTcp-DirectionInbound-Priority110`-SourceAddressPrefixInternet-SourcePortRange* `-DestinationAddressPrefix*-DestinationPortRange3389$nsg=New-AzureRmNetworkSecurityGroup-ResourceGroupName$rgName-Location$location`-Name$nsgName-SecurityRules$rdpRule
为虚拟网络创建变量
为完成的虚拟网络创建变量。
PowerShell复制
$vnet=Get-AzureRmVirtualNetwork-ResourceGroupName$rgName-Name$vnetName
获取 VM 的凭据
以下 cmdlet 将打开一个窗口,需在其中输入远程访问 VM 所用的本地管理员帐户的新用户名和密码。
PowerShell复制
$cred=Get-Credential
将 VM 的名称和大小添加到 VM 配置。
PowerShell复制
$vm=New-AzureRmVMConfig-VMName$vmName-VMSize$vmSize
将 VM 映像设置为新 VM 的源映像
使用托管 VM 映像的 ID 设置源映像。
PowerShell复制
$vm=Set-AzureRmVMSourceImage-VM$vm-Id$image.Id
设置 OS 配置并添加 NIC。
输入 OS 磁盘的存储类型(PremiumLRS 或 StandardLRS)和大小。 此示例将帐户类型设置为PremiumLRS,将磁盘大小设置为128 GB,将磁盘缓存设置为ReadWrite。
PowerShell复制
$vm=Set-AzureRmVMOSDisk-VM$vm-DiskSizeInGB128`-CreateOption FromImage-CachingReadWrite$vm=Set-AzureRmVMOperatingSystem-VM$vm-Windows-ComputerName$computerName`-Credential$cred-ProvisionVMAgent-EnableAutoUpdate$vm=Add-AzureRmVMNetworkInterface-VM$vm-Id$nic.Id
创建 VM
使用存储在$vm变量中的配置创建新 VM。
PowerShell复制
New-AzureRmVM-VM$vm-ResourceGroupName$rgName-Location$location
验证是否已创建 VM
完成后,应会在Azure 门户的“浏览” > “虚拟机”下看到新建的 VM,也可以使用以下 PowerShell 命令查看该 VM:
PowerShell复制
$vmList=Get-AzureRmVM-ResourceGroupName$rgName$vmList.Name
后续步骤
若要登录到新虚拟机,请在门户中浏览到该 VM,单击“连接”,然后打开远程桌面 RDP 文件。 使用原始虚拟机的帐户凭据登录到新虚拟机。 有关详细信息,请参阅How to connect and log on to an Azure virtual machine running Windows(如何连接并登录到运行 Windows 的 Azure 虚拟机)。
立即访问http://market.azure.cn