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

159

我正在使用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 Storage Explorer上删除blob本身(一个30GB的VHD),我收到了以下错误:

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

根据我的评估,这个 blob 已被租用(由先前已删除的虚拟机租用),我无法删除它,除非我能获取此租用 ID。

问题是:我该如何删除此 Blob,进而删除存储帐户?

10个回答

334

解决方案的关键是提示容器有一个活动磁盘镜像,并建议将其从存储库中移除。

从 Blob 存储库中删除磁盘镜像的步骤如下:

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

注:

  • 即使您已删除所有虚拟机且显示为 0,此方法仍然适用;在磁盘选项卡下仍会有相关内容。
  • 磁盘从已删除的 VM 中分离是异步完成的,删除 VM 后可能需要几分钟才能清除此字段。

参见:无法删除 VHD,“blob 上当前存在租赁”


一个重要的注意事项:删除按钮在IE9上无法正常工作。我无法在IE上跟进,但在Chrome上我没有遇到任何问题。 - Paul Keister
除了 @DavideIcardi 的评论之外:在 MSDN 论坛上这个帖子 中解释了 Blob 租约是异步释放的,此操作最多需要 2 小时。 - edymtt
在新的管理门户中,该过程是不同的 - 请参见:https://dev59.com/vlsX5IYBdhLWcg3wALXa - duggulous
1
我必须前往旧门户 > 存储 > 从列表中选择存储帐户 > 点击顶部的容器选项卡 > 点击 vhds > 选择要删除的 blob。现在您可以删除存储帐户。 - chdev77
1
同 @chdev77。我也不得不去旧门户才能看到磁盘。哇,那真是让人恼火的事情! - harristrader
显示剩余2条评论

17

很遗憾,Fernando's answer 对我没有用,因为存储是“孤立”的,在删除存储之前已经删除了其虚拟机。我无法在门户中找到方法来解决这个问题,所以我安装了Azure CLI,并进行身份验证后运行以下命令:

azure storage account delete <my-account>

这个操作失败了,错误信息包含罪犯的名字,例如:

error: 存储账户<my-account>有一些活跃的镜像或磁盘,例如<my-image>。在删除此存储之前,请确保删除这些镜像或磁盘。

然后,我删除了问题镜像

azure vm disk delete <my-image>

然后再次尝试删除存储,这次成功了。

azure storage account delete <my-account>


2
我曾经遇到过完全相同的问题。我有一堆无法在门户中删除的孤立磁盘和镜像。要是早四个月我就能找到这个答案了! - James Wilson

12

不幸的是,有这样一种情况,即虚拟机已被删除,但磁盘显示虚拟机附加到 blob (一个 30GB 的 VHD),从而阻止了删除。此外,如果使用 Azure 存储资源管理器,则可能会发现孤立但已租赁的 VHD blob,无法删除,并且在预览门户中没有引用。


3
他的回答并非所有情况下都正确。我目前在“虚拟机->磁盘”部分下列出了三个“磁盘”,它们无法被删除(因此无法删除Blob)。我不知道如何摆脱它们,因为我目前所知的唯一方法是使用门户网站。https://kieselmediagroup.blob.core.windows.net/misc/2012-08-21_1019.png - Jason
正如@Jason所指出的那样,有时您无法删除磁盘,即使您已经删除了相应的虚拟机。根据我的经验,这似乎只是一个时间上的问题。尝试等待几分钟,您就可以将其删除。 - Davide Icardi
4
我已经等了三个月了… 我应该继续等待时机问题吗? - Dawesi
您可以在“浏览”(在新门户中)下找到VHD磁盘映像。 - Stan Bashtavenko

8

进入虚拟机,然后点击磁盘。选择要删除的磁盘并在底部选择“删除磁盘”。现在,您可以选择保留或删除相应的vhd。

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


1
我认为你们中的许多人已经阅读了文档,而不是问题。这些是孤立的租赁锁定的vhd文件...我有同样的问题,在Azure上除了两个VHD文件外什么都没有,但它们无法删除,因为它们被租赁和锁定(这是一个错误,因为没有任何东西可以租赁它们)。 - Dawesi

5
您可以使用Iaas管理工作室:解除租约,删除Blob,然后删除孤立的图像。

5

在我的情况下,由于vmimages的原因,存储无法被删除。

使用PowerShell命令:

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 管理门户中的虚拟机部分中的“图像”选项卡中删除映像。 - Wagner Bertolini Junior

4
正如F.M.所述,有这样一种情况:当删除虚拟机时,即使虚拟机已被删除,磁盘仍显示为附加到虚拟机上。
对我而言,这是因为我设置了一个支出限制。当达到支出限制时,您的服务将被禁用。您创建的任何VPN网关和VM将被删除。最后,连接到已删除的VM的磁盘仍然认为它们已被连接:(
我找到了这篇博客,其中说明了该问题并展示了如何使用Powershell解决:this blog
希望这能帮助其他用户。

1
太棒了!你的链接带我去了一个工具,他几天前制作的,可以让你“释放”你的vhd: http://www.biztalkgurus.com/biztalk_server/biztalk_blogs/b/biztalk/archive/2012/09/26/windows-azure-virtual-hard-disk-blob-storage-cross-account-copy-lease-break-and-management-tool.aspx - Yannick Smits

0

在删除存储帐户之前,请务必检查是否有关联的虚拟机、磁盘和映像。前往 Azure 门户网站

选择左侧窗格上的“虚拟机”选项卡 单击“实例映像和磁盘”

请注意,单个虚拟机具有其附加的磁盘,这些磁盘显示在“磁盘”区域中。在删除虚拟机之前,请先删除相关的磁盘,然后再删除包含该磁盘的虚拟机。最后再删除存储帐户。如果与要删除的帐户相关联,则还要查看同一左侧窗格中的网络。

在新的更新的 Azure 门户网站中,许多上述配置页面已更改。您可以在“所有资源”窗格中查看“映像”和“磁盘”选项。在 Azure 门户网站的新版本中,您可以在相邻的垂直窗格上清楚地看到 VM、其关联的磁盘和存储帐户,所有这些都在一个页面上以不同的图标图像呈现。


0

对于那些依赖GUI来管理Azure的人,不知道如何使用PowerShell或执行其他答案的人,现在可以在尝试删除存储时勾选“删除未附加的映像”,以删除卡住的存储账户。

这将自动删除存储而不会有太多麻烦。


我刚刚完成了这个,但是忘记了复选框的确切语句。 - Vylix

0
有时我们通过新门户删除Azure存储帐户,但是我们无法删除它并收到此错误:“无法删除存储帐户'jason1disks796'。错误:由于其工件正在使用,因此无法删除存储帐户。
我们可以使用PowerShell列出存储帐户的所有VHD blob(ARM模块):
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'。错误:由于其工件正在使用,因此无法删除存储帐户”。在这种情况下,我们可以创建一个新的 VM,并指定将问题存储帐户作为其存储帐户,然后再次删除它。

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