您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.
将 VHD 上传到 Azure,或将托管磁盘复制到其他区域 - Azure CLI
06/15/2020
本文内容
本文介绍如何使用 AzCopy 将 VHD 从本地计算机上传到 Azure 托管磁盘,或将托管磁盘复制到其他区域。 此过程(直接上传)还允许你将最大大小为 32 TiB 的 VHD 直接上传到托管磁盘。 目前,标准 HDD、标准 SSD 和高级 SSD 托管磁盘支持直接上传。 超级磁盘尚不支持此功能。
若要为 Azure 中的 IaaS VM 提供备份解决方案,建议使用直接上传方法将客户备份还原到托管磁盘。 从 Azure 外部的源上传 VHD 时,速度取决于本地带宽。 从 Azure VM 上传或复制时,带宽将与标准 HDD 相同。
先决条件
若要从本地上传 VHD:已为 Azure 准备了一个固定大小的 VHD,存储在本地。
若要执行复制操作,请使用 Azure 中的托管磁盘。
入门
如果希望通过 GUI 上传磁盘,可以使用 Azure 存储资源管理器。 有关详细信息,请参阅:使用 Azure 存储资源管理器管理 Azure 托管磁盘
若要将 VHD 上传到 Azure,需要创建一个针对此上传过程配置的空托管磁盘。 在创建托管磁盘之前,应了解有关这些磁盘的一些附加信息。
这种托管磁盘有两种独特的状态:
ReadToUpload,表示磁盘已做好上传准备,但尚未生成安全访问签名 (SAS)。
ActiveUpload,表示磁盘已做好上传准备,并且已生成 SAS。
备注
在任一状态下,无论实际磁盘类型是什么,都会按标准 HDD 定价对托管磁盘计费。 例如,P10 将按 S10 计费。 在对托管磁盘调用 revoke-access 之前(将磁盘附加到 VM 需要执行此调用),都是如此。
创建空托管磁盘
在创建要上传的空标准 HDD 之前,需要获取要上传的 VHD 的文件大小(以字节为单位)。 为此,可以使用 wc -c .vhd 或 ls -al .vhd。 指定 --upload-size-bytes 参数时将使用此值。
在 disk create cmdlet 中同时指定“-–for-upload”参数和“--upload-size-bytes”参数,创建要上传的空标准 HDD:
将 、、 替换为所选值。 --upload-size-bytes 参数包含示例值 34359738880,请将其替换为适合你的值。
提示
如果要创建 OS 磁盘,请将--hyper-v-generation 添加到 az disk create。
az disk create -n -g -l --for-upload --upload-size-bytes 34359738880 --sku standard_lrs
若要上传高级 SSD 或标准 SSD,请将 standard_lrs 替换为 premium_LRS 或 standardssd_lrs。 目前不支持超级磁盘。
现在,你已创建了一个针对上传过程配置的空托管磁盘,可以将 VHD 上传到其中了。 若要将 VHD 上传到磁盘,需要一个可写的 SAS,以便将此磁盘作为上传目标引用。
若要生成空托管磁盘的可写 SAS,请替换 和 ,然后使用以下命令:
az disk grant-access -n -g --access-level Write --duration-in-seconds 86400
示例返回值:
{
"accessSas": "https://md-impexp-t0rdsfgsdfg4.blob.core.windows.net/w2c3mj0ksfgl/abcd?sv=2017-04-17&sr=b&si=600a9281-d39e-4cc3-91d2-923c4a696537&sig=xXaT6mFgf139ycT87CADyFxb%2BnPXBElYirYRlbnJZbs%3D"
}
上传 VHD
生成空托管磁盘的 SAS 后,可以使用该 SAS 将托管磁盘设置为上传命令的目标。
使用 AzCopy v10 并指定生成的 SAS URI,将本地 VHD 文件上传到托管磁盘。
此上传过程的吞吐量与相应标准 HDD 的吞吐量相同。 例如,如果大小相当于 S4,则最高吞吐量为 60 MiB/秒。 但是,如果大小相当于 S70,则最高吞吐量为 500 MiB/秒。
AzCopy.exe copy "c:\somewhere\mydisk.vhd" "sas-URI" --blob-type PageBlob
上传完成后,如果你不再需要将更多数据写入磁盘,请吊销 SAS。 吊销 SAS 会更改托管磁盘的状态,使你可以将磁盘附加到 VM。
替换 和 ,然后使用以下命令使磁盘可用:
az disk revoke-access -n -g
复制托管磁盘
直接上传还能简化复制托管磁盘的过程。 可以在同一区域中进行复制,或者跨区域复制(复制到另一区域)。
以下脚本可自动完成此操作,此过程类似于前面所述的步骤,但由于处理的是现有磁盘,因此存在一些差异。
重要
提供 Azure 中托管磁盘的磁盘大小(以字节为单位)时,需要添加 512 偏移量。 这是因为,Azure 在返回磁盘大小时会省略脚注。 如果不添加此偏移量,复制将会失败。 以下脚本中已添加此偏移量。
请将 、、、 和 (例如,位置值为 uswest2)替换为自己的值,然后运行以下脚本来复制托管磁盘。
提示
如果要创建 OS 磁盘,请将--hyper-v-generation 添加到 az disk create。
sourceDiskName=
sourceRG=
targetDiskName=
targetRG=
targetLocation=
sourceDiskSizeBytes=$(az disk show -g $sourceRG -n $sourceDiskName --query '[diskSizeBytes]' -o tsv)
az disk create -g $targetRG -n $targetDiskName -l $targetLocation --for-upload --upload-size-bytes $(($sourceDiskSizeBytes+512)) --sku standard_lrs
targetSASURI=$(az disk grant-access -n $targetDiskName -g $targetRG --access-level Write --duration-in-seconds 86400 -o tsv)
sourceSASURI=$(az disk grant-access -n $sourceDiskName -g $sourceRG --duration-in-seconds 86400 --query [accessSas] -o tsv)
azcopy copy $sourceSASURI $targetSASURI --blob-type PageBlob
az disk revoke-access -n $sourceDiskName -g $sourceRG
az disk revoke-access -n $targetDiskName -g $targetRG
后续步骤