将来自 Azure 磁盘的 VHD 复制到 Azure 存储帐户

3
我有一个Windows 10系统的Azure磁盘。我希望将此磁盘转换为VHD格式,并可在Azure存储账户中使用。

简单来说,我想让我的Azure虚拟机数据磁盘出现在Azure存储BLOB中,而不必将VHD下载到我的基本计算机上。这是否可能?如果是,请指导我。

有人能帮助我吗?

谢谢。

1个回答

4

是的,这是可能的。您可以将托管磁盘复制到VHD文件中并存储在存储中。以下是通过PowerShell的示例代码:

#Provide the subscription Id of the subscription where managed disk is created
$subscriptionId = "yourSubscriptionId"

#Provide the name of your resource group where managed is created
$resourceGroupName ="yourResourceGroupName"

#Provide the managed disk name 
$diskName = "yourDiskName"

#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://learn.microsoft.com/en-us/Az.Storage/storage-dotnet-shared-access-signature-part-1
$sasExpiryDuration = "3600"

#Provide storage account name where you want to copy the underlying VHD of the managed disk. 
$storageAccountName = "yourstorageaccountName"

#Name of the storage container where the downloaded VHD will be stored
$storageContainerName = "yourstoragecontainername"

#Provide the key of the storage account where you want to copy the VHD of the managed disk. 
$storageAccountKey = 'yourStorageAccountKey'

#Provide the name of the destination VHD file to which the VHD of the managed disk will be copied.
$destinationVHDFileName = "yourvhdfilename"

#Set the value to 1 to use AzCopy tool to download the data. This is the recommended option for faster copy.
#Download AzCopy v10 from the link here: https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10
#Ensure that AzCopy is downloaded in the same folder as this file
#If you set the value to 0 then Start-AzStorageBlobCopy will be used. Azure storage will asynchronously copy the data. 
$useAzCopy = 1 

# Set the context to the subscription Id where managed disk is created
Select-AzSubscription -SubscriptionId $SubscriptionId

#Generate the SAS for the managed disk 
$sas = Grant-AzDiskAccess -ResourceGroupName $ResourceGroupName -DiskName $diskName -DurationInSecond $sasExpiryDuration -Access Read 

#Create the context of the storage account where the underlying VHD of the managed disk will be copied
$destinationContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

#Copy the VHD of the managed disk to the storage account
if($useAzCopy -eq 1)
{
    $containerSASURI = New-AzStorageContainerSASToken -Context $destinationContext -ExpiryTime(get-date).AddSeconds($sasExpiryDuration) -FullUri -Name $storageContainerName -Permission rw
    $containername,$sastokenkey = $containerSASURI -split "\?"
    $containerSASURI = "$containername/$destinationVHDFileName`?$sastokenkey"
    azcopy copy $sas.AccessSAS $containerSASURI

}else{

    Start-AzStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
}

但是在我的测试中,当您使用azcopy命令时,VHD文件出现了问题。而命令Start-AzStorageBlobCopy则可以正常运行。因此我建议您使用Start-AzStorageBlobCopy命令。更多详细信息请参见使用 PowerShell 导出/复制托管磁盘的 VHD 到不同区域的存储帐户


@AnilSharma,检查结果如何?是否解决了您的问题?如果是,请接受它作为答案。 - Charles Xu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接