如何删除包含租用blob的Azure存储帐户?

我正在玩Windows Azure持久的虚拟机。 最后,我删除了虚拟机(成功),并试图删除关联的存储帐户。

删除存储帐户的请求失败。

在预览门户(manage.windowsazure.com)上删除存储帐户时出现此错误:

Failed to delete Storage account 'portalvhdscwtwycpsxxxxx' Details: Storage account portalvhdscwtwycpsxxxxx has 1 container(s) which have an active image and/or disk artifacts. Ensure those artifacts are removed from the image repository before deleting this storage account. 

在以前的门户(windows.azure.com)我得到这个错误:

 Submit Failed Storage account portalvhdscwtwycpsxxxxx has 1 container(s) which have an active image and/or disk artifacts. Ensure those artifacts are removed from the image repository before deleting this storage account. 

尝试删除Azure存储浏览器上的blob本身(一个30GB的VHD)我得到这个错误:

 There is currently a lease on the blob and no lease ID was specified in the request. 

所以我的评估是,这个blob是租用(由以前,现在删除的虚拟机),我不能删除它,除非我可以得到这个租赁ID。

问题是:我怎样才能删除这个blob,因此,存储帐户?

解决scheme的关键是容器有一个活动磁盘工件的消息以及将其从存储库中删除的build议。

从blob存储库中删除磁盘映像的过程是:

  • 转到Windows Azurepipe理门户 。
  • 点击虚拟机。
  • 点击磁盘。
  • 点击磁盘。
  • 点击删除磁盘。

之后,可以删除存储帐户。

笔记:

  • 即使您已经删除了所有的虚拟机,这也适用,并显示0; 在磁盘选项卡下仍然会出现文物。
  • 磁盘asynchronous脱离已删除的虚拟机,虚拟机删除后可能需要等待几分钟才能清除该字段。

另请参阅: 无法删除VHD,“当前有blob上的租约…”

不幸的是, 费尔南多的回答对我来说并不奏效,因为存储是“孤儿”,因为我在删除存储之前删除了虚拟机。 我找不到从门户网站执行此操作的方法,因此我安装了azure-cli ,身份validation后运行以下命令:

 azure storage account delete <my-account> 

这失败了,并且错误消息包含罪魁祸首的名字,例如:

error: Storage account <my-account> has some active image(s) and/or disk(s), eg <my-image>. Ensure these image(s) and/or disk(s) are removed before deleting this storage

然后我删除了冒犯的图像

azure vm disk delete <my-image>

并尝试再次删除存储,这次成功。

azure storage account delete <my-account>

不幸的是,虚拟机已被删除,但是磁盘显示虚拟机连接到blob(30GB VHD),不能删除。 此外,在使用Azure存储资源pipe理器的情况下,您会发现一个orfan,但租用的VHD blob无法删除,并且预览门户上没有任何参考。

转到虚拟机,然后点击光盘。 标记光盘并select底部的删除光盘。 您现在可以select是否要保留或删除相应的vhd。

首先要通过虚拟机删除光盘,不要通过存储删除。

您可以使用Iaas Management Studio :打破租约,删除blob,然后删除孤立的图像。

正如FM已经指出的那样; 即使虚拟机已被删除,在删除虚拟机时,磁盘仍显示为与虚拟机相连。

对我来说,这是因为我有一个设定的支出限制。 当消费限额被击中时,您的服务被禁用。 您创build的任何VPN网关和虚拟机都将被删除。 然后将其closures附加到已删除的虚拟机的磁盘仍然认为他们连接:(

我发现这个博客解释了这个问题,并展示了如何使用PowerShell来解决。

希望这可以帮助其他用户。

在我的情况下,存储无法删除,因为vmimages。

使用power shell命令

get-azurevmimage | Where-Object -Property Category -in -Value“user”

列出所有图像要删除所有图像,请使用以下脚本:

 get-azurevmimage | Where-Object -Property Category -in -Value "user" | foreach { echo "remove $($_.ImageName)" Remove-AzureVMImage –ImageName $($_.ImageName) } 

在删除您的存储帐户之前,请检查您的存储帐户是否存在关联的虚拟机,磁盘和映像。 转到Azure门户

select左窗格上的Virtaul Machines选项卡单击Instances图像和磁盘

请注意,单个虚拟机具有在磁盘区域上显示的附加磁盘。在删除虚拟机之前,先删除关联的磁盘,然后删除具有磁盘第二个的虚拟机。然后删除存储帐户。 如果与要删除的帐户相关联,也可以在同一左侧窗格中查找networking。

在新的更新的Azure门户中,许多上述configuration页面被更改。 您可以在“所有资源”窗格中看到图像和磁盘选项。 在Azure门户的更新版本中,您可以轻松识别虚拟机的相关磁盘及其存储帐户清楚地在其相邻的垂直窗格中,在一页中具有不同的图标图像。

有时我们通过新的门户删除azure色的存储帐户,但我们不能删除它,并得到这个错误:“无法删除存储帐户'jason1disks796'。 错误: 存储帐户由于其工件正在使用而无法删除。

我们可以使用PowerShell列出存储帐户( ARM模块 )的所有VHD blob:

 PS > Login-AzureRmAccount PS > $RGName = "jason1" PS > $SAName = "jason1disks796" PS > $ConName = "vhds" PS > $TempObj = New-Object -TypeName PSCustomObject PS > $TempObj |Add-Member -Name BlobName -MemberType NoteProperty -Value $null PS > $TempObj |Add-Member -Name LeaseState -MemberType NoteProperty -Value $null PS > $Keylist = Get-AzureRmStorageAccountKey -ResourceGroupName $RGName -StorageAccountName $SAName PS > $Key = $Keylist[0].Value PS > $Ctx = New-AzureStorageContext -StorageAccountName $SAName -StorageAccountKey $Key PS > Get-AzureStorageContainer -Context $ctx CloudBlobContainer : Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer Permission : Microsoft.WindowsAzure.Storage.Blob.BlobContainerPermissions PublicAccess : Off LastModified : 1/19/2017 1:27:21 AM +00:00 ContinuationToken : Context : Microsoft.WindowsAzure.Commands.Common.Storage.AzureStorageContext Name : vhds PS > $List = Get-AzureStorageBlob -Blob *.vhd -Container $ConName -Context $Ctx PS > $List | ForEach-Object { $TempObj.BlobName = $_.Name; $TempObj.LeaseState = $_.ICloudBlob.Properties.LeaseState; $TempObj } BlobName LeaseState -------- ---------- SQL20170119092405.vhd Leased PS > Get-AzureStorageBlob -Blob * -Container $con -Context $ctx | Remove-AzureStorageBlob PS > Remove-AzureRmStorageAccount -ResourceGroupName $RGname -Name $SAName 

如果您的存储帐户位于ASM模块中 ,则可以使用此脚本删除存储帐户:

 Add-AzureAccount $SAName = "jason1161" $ConName = "vhds" $TempObj = New-Object -TypeName PSCustomObject $TempObj |Add-Member -Name BlobName -MemberType NoteProperty -Value $null $TempObj |Add-Member -Name LeaseState -MemberType NoteProperty -Value $null $Keylist = Get-AzureStorageKey -StorageAccountName $SAName $Key = $Keylist.primary $Ctx = New-AzureStorageContext -StorageAccountName $SAName -StorageAccountKey $Key $List = Get-AzureStorageBlob -Blob *.vhd -Container $ConName -Context $Ctx $List | ForEach-Object { $TempObj.BlobName = $_.Name; $TempObj.LeaseState = $_.ICloudBlob.Properties.LeaseState; $TempObj } PS > Get-AzureStorageBlob -Blob * -Container $con -Context $ctx | Remove-AzureStorageBlob PS > Remove-AzureStorageAccount -Name $SAName 

此外还有另外一个场景,在这个存储账户中没有容器或者blob( 一个空的存储账户 ,通过PowerShell或者门户我们在这个存储账户中找不到blob或者容器),使用门户删除存储账户,并显示错误消息“无法删除存储帐户”jason1disks796“。 错误:存储帐户由于其工件正在使用而无法删除“。 在这种情况下,我们可以创build一个新的虚拟机,并指定有问题的存储帐户的存储帐户,然后再次删除它。