上传通用化 VHD 并使用它在 Azure 中创建新 VM
2017-10-12 17:49
567 查看
本主题逐步讲解如何使用 PowerShell 将通用化 VM 的 VHD 上传到 Azure、从该 VHD 创建映像,然后从该映像创建新 VM。 可以上传从本地虚拟化工具或其他云导出的 VHD。 对新的 VM 使用托管磁盘可以简化
VM 管理,在将 VM 置于可用性集中时提供更好的可用性。
若要使用示例脚本,请参阅将
VHD 上传到 Azure 并创建新的 VM 的示例脚本
将任何 VHD 上传到 Azure 之前,应该遵循准备要上传到
Azure 的 Windows VHD 或 VHDX
开始迁移到托管磁盘之前,请先查看规划迁移到托管磁盘。
请确保有最新版本的 AzureRM.Compute PowerShell 模块。 运行以下命令来安装该模块。
PowerShell
复制
有关详细信息,请参阅 Azure PowerShell 版本控制。
Sysprep 将删除所有个人帐户信息及其他某些数据,并准备好要用作映像的计算机。 有关 Sysprep 的详细信息,请参阅如何使用 Sysprep:简介。
确保 Sysprep 支持计算机上运行的服务器角色。 有关详细信息,请参阅 Sysprep
Support for Server Roles
Important
如果在首次将 VHD 上传到 Azure 之前运行 Sysprep,请确保先准备好
VM,然后再运行 Sysprep。
登录到 Windows 虚拟机。
以管理员身份打开“命令提示符”窗口。 将目录切换到 %windir%\system32\sysprep,然后运行
在“系统准备工具”对话框中,选择“进入系统全新体验(OOBE)”,确保已选中“通用化”复选框。
在“关机选项”中选择“关机”。
单击 “确定”。
在 Sysprep 完成时,它会关闭虚拟机。 不要重新启动 VM。
如果尚未安装 Azure PowerShell 1.4 版或更高版本,请阅读 如何安装和配置 Azure PowerShell。
打开 Azure PowerShell 并登录到 Azure 帐户。 此时会打开一个弹出窗口让输入 Azure 帐户凭据。
PowerShell
复制
获取可用订阅的订阅 ID。
PowerShell
复制
使用订阅 ID 设置正确的订阅。 将 替换为正确订阅的 ID。
PowerShell
复制
需要在 Azure 中创建存储帐户来存储上传的 VM 映像。 可以使用现有存储帐户,也可以创建新存储帐户。
如果要使用 VHD 为 VM 创建托管磁盘,存储帐户位置必须与要创建 VM 的位置相同。
显示可用的存储帐户,请键入:
PowerShell
复制
如果要使用现有存储帐户,请转到 上传
VM 映像 部分。
若要创建存储帐户,请执行以下步骤:
需要应在其中创建存储帐户的资源组的名称。 若要查找订阅中的所有资源组,请键入:
PowerShell
复制
若要在中国东部区域中创建名为 myResourceGroup 的资源组,请键入:
PowerShell
复制
使用 New-AzureRmStorageAccount cmdlet 在此资源组中创建名为 mystorageaccount 的存储帐户:
PowerShell
复制
-SkuName 的有效值为:
Standard_LRS - 本地冗余存储。
Standard_ZRS - 区域冗余存储。
Standard_GRS - 异地冗余存储。
Standard_RAGRS - 读取访问权限异地冗余存储。
Premium_LRS - 高级本地冗余存储。
使用 Add-AzureRmVhd cmdlet 将 VHD 上传到存储帐户中的容器。 本示例将文件 myVHD.vhd 从 "C:\Users\Public\Documents\Virtual
hard disks\" 上传到 myResourceGroup 资源组中名为 mystorageaccount 的存储帐户。 该文件将放入名为 mycontainer 的容器,新文件名为 myUploadedVHD.vhd。
PowerShell
复制
如果成功,会显示类似于下面的响应:
PowerShell
复制
完成执行此命令可能需要一段时间,具体取决于网络连接速度和 VHD 文件的大小
如果要使用上传的 VHD 创建托管磁盘或新 VM,请保存 目标 URI 路径供稍后使用。
也可以使用以下方法之一将 VHD 上传到存储帐户:
AzCopy
Azure 存储复制 Blob API
Azure 存储资源管理器上传 Blob
Storage Import/Export Service REST API
Reference(存储导入/导出服务 REST API 参考)
如果预估上传时间大于 7 天,建议使用导入/导出服务。 可根据数据大小和传输单位,利用 DataTransferSpeedCalculator 预估时间。
导入/导出可用于复制到标准存储帐户。 需要使用 AzCopy 等工具从标准存储复制到高级存储帐户。
使用通用 OS VHD 创建托管映像。 将值替换为自己的信息。
首先,设置公共参数:
PowerShell
复制
使用通用 OS VHD 创建映像。
PowerShell
复制
创建虚拟网络的 vNet 和子网。
创建子网。 此示例创建名为 mySubnet 的子网,其地址前缀为 10.0.0.0/24。
PowerShell
复制
创建虚拟网络。 此示例创建名为 myVnet 的虚拟网络,其地址前缀为 10.0.0.0/16。
PowerShell
复制
若要与虚拟网络中的虚拟机通信,需要一个 公共 IP 地址 和网络接口。
创建公共 IP 地址。 此示例创建名为 myPip的公共 IP 地址。
PowerShell
复制
创建 NIC。 此示例创建名为 myNic的 NIC。
PowerShell
复制
若要使用 RDP 登录到 VM,需要创建一个允许在端口 3389 上进行 RDP 访问的网络安全规则 (NSG)。
此示例创建名为 myNsg 的 NSG,其中包含一个允许通过端口 3389 传输 RDP 流量的、名为 myRdpRule 的规则。 有关 NSG 的详细信息,请参阅 Opening
ports to a VM in Azure using PowerShell(使用 PowerShell 在 Azure 中打开 VM 端口)。
PowerShell
复制
为完成的虚拟网络创建变量。
PowerShell
复制
以下 cmdlet 将打开一个窗口,需在其中输入远程访问 VM 所用的本地管理员帐户的新用户名和密码。
PowerShell
复制
PowerShell
复制
使用托管 VM 映像的 ID 设置源映像。
PowerShell
复制
输入 OS 磁盘的存储类型(PremiumLRS 或 StandardLRS)和大小。 此示例将帐户类型设置为 PremiumLRS,将磁盘大小设置为 128 GB,将磁盘缓存设置为 ReadWrite。
PowerShell
复制
使用存储在 $vm 变量中的配置创建新 VM。
PowerShell
复制
完成后,应会在 Azure 门户的“浏览” > “虚拟机”下看到新建的 VM,也可以使用以下 PowerShell 命令查看该 VM:
PowerShell
复制
若要登录到新虚拟机,请在门户中浏览到该 VM,单击“连接”,然后打开远程桌面 RDP 文件。 使用原始虚拟机的帐户凭据登录到新虚拟机。 有关详细信息,请参阅 How
to connect and log on to an Azure virtual machine running Windows(如何连接并登录到运行 Windows 的 Azure 虚拟机)。
立即访问http://market.azure.cn
VM 管理,在将 VM 置于可用性集中时提供更好的可用性。
若要使用示例脚本,请参阅将
VHD 上传到 Azure 并创建新的 VM 的示例脚本
开始之前
将任何 VHD 上传到 Azure 之前,应该遵循准备要上传到Azure 的 Windows VHD 或 VHDX
开始迁移到托管磁盘之前,请先查看规划迁移到托管磁盘。
请确保有最新版本的 AzureRM.Compute PowerShell 模块。 运行以下命令来安装该模块。
PowerShell
复制
Install-Module AzureRM.Compute -RequiredVersion 2.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 -EnvironmentName AzureChinaCloud
获取可用订阅的订阅 ID。
PowerShell
复制
Get-AzureRmSubscription
使用订阅 ID 设置正确的订阅。 将 替换为正确订阅的 ID。
PowerShell
复制
Select-AzureRmSubscription -SubscriptionId "<subscriptionID>"
获取存储帐户
需要在 Azure 中创建存储帐户来存储上传的 VM 映像。 可以使用现有存储帐户,也可以创建新存储帐户。如果要使用 VHD 为 VM 创建托管磁盘,存储帐户位置必须与要创建 VM 的位置相同。
显示可用的存储帐户,请键入:
PowerShell
复制
Get-AzureRmStorageAccount
如果要使用现有存储帐户,请转到 上传
VM 映像 部分。
若要创建存储帐户,请执行以下步骤:
需要应在其中创建存储帐户的资源组的名称。 若要查找订阅中的所有资源组,请键入:
PowerShell
复制
Get-AzureRmResourceGroup
若要在中国东部区域中创建名为 myResourceGroup 的资源组,请键入:
PowerShell
复制
New-AzureRmResourceGroup -Name myResourceGroup -Location "China East"
使用 New-AzureRmStorageAccount cmdlet 在此资源组中创建名为 mystorageaccount 的存储帐户:
PowerShell
复制
New-AzureRmStorageAccount -ResourceGroupName myResourceGroup -Name mystorageaccount -Location "China East"` -SkuName "Standard_LRS" -Kind "Storage"
-SkuName 的有效值为:
Standard_LRS - 本地冗余存储。
Standard_ZRS - 区域冗余存储。
Standard_GRS - 异地冗余存储。
Standard_RAGRS - 读取访问权限异地冗余存储。
Premium_LRS - 高级本地冗余存储。
将 VHD 上传到存储帐户
使用 Add-AzureRmVhd cmdlet 将 VHD 上传到存储帐户中的容器。 本示例将文件 myVHD.vhd 从 "C:\Users\Public\Documents\Virtualhard 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 calculated for the file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd. MD5 hash calculation is completed. Elapsed time for the operation: 00:03:35 Creating new page blob of size 53687091712... Elapsed time for upload: 01:12:49 LocalFilePath 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 -OsType Windows -OsState Generalized -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 -AddressPrefix 10.0.0.0/24
创建虚拟网络。 此示例创建名为 myVnet 的虚拟网络,其地址前缀为 10.0.0.0/16。
PowerShell
复制
$vnetName = "myVnet" $vnet = New-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location ` -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
创建公共 IP 地址和网络接口
若要与虚拟网络中的虚拟机通信,需要一个 公共 IP 地址 和网络接口。创建公共 IP 地址。 此示例创建名为 myPip的公共 IP 地址。
PowerShell
复制
$ipName = "myPip" $pip = New-AzureRmPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location ` -AllocationMethod Dynamic
创建 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" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 ` -SourceAddressPrefix Internet -SourcePortRange * ` -DestinationAddressPrefix * -DestinationPortRange 3389 $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 -DiskSizeInGB 128 ` -CreateOption FromImage -Caching ReadWrite $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 文件。 使用原始虚拟机的帐户凭据登录到新虚拟机。 有关详细信息,请参阅 Howto connect and log on to an Azure virtual machine running Windows(如何连接并登录到运行 Windows 的 Azure 虚拟机)。
立即访问http://market.azure.cn
相关文章推荐
- 上传通用化 VHD 并使用它在 Azure 中创建新 VM
- 上传通用化 VHD 并使用它在 Azure 中创建新 VM
- 使用VHDUpload上传VHD文件到云存储,并在Azure VM中加挂Azure Drive
- 【转载】使用VHDUpload上传VHD文件到云存储,并在Azure VM中加挂Azure Drive
- Azure上采用Powershell从已有的VHD创建VM
- 上传VHD到Azure并创建虚拟机 推荐
- 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构
- 关于Aazure 使用以前保留的vhd创建虚拟机的基本步骤
- azure使用vhd文件创建系统
- azure使用vhd文件创建系统
- Azure上采用Json Template从已有的VHD创建VM
- Windows Azure VM Role (6) 将VHD上传到Windows Azure平台
- 在 Azure VM 中使用应用商店映像创建 HPC Pack 群集的头节点
- 使用托管快照创建作为 Azure 托管磁盘存储的 VHD 的副本
- 使用托管快照创建作为 Azure 托管磁盘存储的 VHD 的副本
- 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构
- Azure ARM (13) 从现有VHD文件,创建新的ARM VM
- 在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈
- 使用OpenStack创建VM,遇到No valid host was found 错误的分析 (持续更新中)
- MVC文件上传09-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹,并在其中创建分类子文件夹