先决条件:

导出托管磁盘VHD文件到存储账户时,需要关闭虚拟机操作。同时,请您记录好哪些是OS磁盘,哪些是数据磁盘。

官方参考文档: https://docs.azure.cn/zh-cn/articles/azure-operations-guide/virtual-machines/aog-virtual-machines-howto-export-managed-disks https://docs.azure.cn/zh-cn/storage/common/storage-use-azcopy https://docs.azure.cn/zh-cn/virtual-machines/windows/create-managed-disk-ps https://docs.azure.cn/zh-cn/articles/azure-operations-guide/virtual-machines/aog-virtual-machines-managed-disks-qa-os-cannot-create-vm

需要安装Azure Powershell 模块,可参考https://docs.azure.cn/zh-cn/powershell-install-configure

具体步骤:

步骤一:导出托管磁盘VHD到原订阅存储账户下(旧订阅)

#登录Azure Account Add-AzureRmAccount -EnvironmentName AzureChinaCloud

# 设置订阅ID(如此账户下只有一个订阅,此步骤可省略) $subid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ###替换为您的订阅ID Select-AzureRmSubscription -SubscriptionID $subid

#将目标存储账号的信息赋予变量 $destStorageAccount = Get-AzureRmStorageAccount -ResourceGroupName <Resource Group Name for Dest Storage Account> -Name <Dest Storage Account Name>;

#获取托管磁盘的拷贝权限 $diskAccess = Grant-AzureRmDiskAccess -ResourceGroupName <Resource Group Name for Managed Disk> -DiskName <Managed Disk Name> -DurationInSecond 36000 -Access Read;

#将托管磁盘导出成VHD拷贝到目标存储账户,vhds为存储账户中的container名称 Start-AzureStorageBlobCopy -AbsoluteUri $diskAccess.AccessSAS -DestContainer "vhds" -DestContext $destStorageAccount.Context -DestBlob <Dest VHD Name>;

#查看拷贝进度 get-AzureStorageBlobCopyState -Blob <Dest VHD Name> -Container"vhds" -Context $destStorageAccount.Context -WaitForComplete

步骤二:从原有订阅存储账户下的VHD文件复制到新Azure账户订阅的存储账户下

#安装、使用AzCopy将原有存储账户下的VHD文件复制到新Azure账户订阅下的存储账户https://docs.azure.cn/zh-cn/storage/common/storage-use-azcopy AzCopy /Source:https://sourceaccount.blob.core.chinacloudapi.cn/mycontainer1 /Dest:https://destaccount.blob.core.chinacloudapi.cn/mycontainer2 /SourceKey:key1 /DestKey:key2 /Pattern:abc.txt

步骤三:从存储帐户中的非托管磁盘创建托管数据磁盘(新订阅)

#将资源组,位置,托管数据磁盘的名称,非托管磁盘的URL赋予变量 $rgName = "myResourceGroup" $location = "China North" $diskName = "myDisk" $vhdUri = "https://mystorageaccount.blob.core.chinacloudapi.cn/vhds/myDisk.vhd"

#创建托管数据磁盘 $disk1 = New-AzureRmDisk -DiskName $diskName -Disk (New-AzureRmDiskConfig -AccountType StandardLRS -Location $location -CreateOption Import -SourceUri $vhdUri) -ResourceGroupName $rgName

步骤四:更改OS托管磁盘的OsType,从而能够使用Portal上的“创建VM”按钮创建虚拟机(新订阅)

#查询托盘磁盘信息,缺失 OsType 的托管磁盘会被视作是数据磁盘,需要更新该托管磁盘的 OsType 来赋予正确的键值 Get-AzureRmDisk -ResourceGroupName "<资源组名称>" -DiskName "<托盘磁盘名称>"

#将托盘磁盘信息赋予给变量 $Disk = Get-AzureRmDisk -ResourceGroupName "<资源组名称>" -DiskName "<托盘磁盘名称>"

#输入托盘磁盘的 OsType $Disk.OsType = "Linux" <-根据虚拟机 OS 类型选择 Windows 或者 Linux

#手动更新托盘磁盘的信息 Update-AzureRmDisk -ResourceGroupName "<资源组名称>" -DiskName "<托盘磁盘名称>" -Disk $Disk

在 Azure 门户 上重新查看该托盘磁盘的信息,可以看到 “创建 VM” 的按钮了,继续创建虚拟机了。