我想要存档 Azure VM。它目前已被解除分配,因此我们不会产生计算费用,但我们仍然需要为存储付费,即使它不在线。我们希望将存储移动到 BLOB 存储,因为它更便宜,因为我们不想丢失数据,但也不想支付额外费用让它闲置。
我尝试创建一个映像,然后删除了虚拟机实例,但保持磁盘完好无损,没有引用它们。
归档虚拟机的最佳方式是什么?
如果您的磁盘已被管理,您可以采取以下步骤。 现在,Azure 可以让您轻松更改您的托管磁盘类型。
步骤:转到Azure门户>停止(解除分配)您的VM>转到您的磁盘>帐户类型>选择标准(HDD)>单击保存
然后你的磁盘就更新成功了!
删除虚拟机后,您还可以使用磁盘从磁盘创建虚拟机。此外,您还可以为磁盘生成 URI,以将其复制到另一个存储帐户或将其导出。 如果您的磁盘不受管理,您无法将磁盘从高级版直接转换为标准版。您需要创建一个新的存储帐户(或使用现有的存储帐户)并将包含磁盘的 blob 从高级帐户复制到标准帐户。最好的方法是您可以使用 Azcopy 来执行此操作。
这来得很晚,但我只是在解决这个问题。该解决方案目前由 Azure 自己记录,尽管搜索起来非常困难:
以防链接将来失效,以下是此页面的关键信息:
此脚本将托管磁盘的基础 VHD 导出到相同或不同区域的存储帐户。它首先生成托管磁盘的 SAS URI,然后使用它将 VHD 复制到存储帐户。
subscription="<subscriptionId>" # add subscription here
az account set -s $subscription # ...or use 'az login'
#Provide the subscription Id where managed disk is created
subscriptionId="<subscriptionId>"
#Provide the name of your resource group where managed disk is created
resourceGroupName=myResourceGroupName
#Provide the managed disk name
diskName=myDiskName
#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1
sasExpiryDuration=3600
#Provide storage account name where you want to copy the underlying VHD file of the managed disk.
storageAccountName=mystorageaccountname
#Name of the storage container where the downloaded VHD will be stored
storageContainerName=mystoragecontainername
#Provide the key of the storage account where you want to copy the VHD
storageAccountKey=mystorageaccountkey
#Provide the name of the destination VHD file to which the VHD of the managed disk will be copied.
destinationVHDFileName=myvhdfilename.vhd
az account set --subscription $subscriptionId
sas=$(az disk grant-access --resource-group $resourceGroupName --name $diskName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv)
az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas
az group delete --name myResourceGroupName