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

Posted

技术标签:

【中文标题】如何删除包含租用 blob 的 Azure 存储帐户?【英文标题】:How do I delete an Azure storage account containing a leased blob? 【发布时间】:2012-06-13 16:52:49 【问题描述】:

我在玩 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,进而删除存储帐户?

【问题讨论】:

【参考方案1】:

解决方案的关键是容器具有活动磁盘工件的消息以及将其从存储库中删除的建议。

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

转到Windows Azure Management Portal。 点击虚拟机。 点击磁盘。 点击磁盘。 点击删除磁盘。

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

注意事项:

即使您已经删除了所有虚拟机并且显示为 0,这也适用;磁盘选项卡下仍然会有工件。 磁盘与已删除的 VM 异步分离,删除 VM 后可能需要几分钟才能清除此字段。

另见:Unable to delete VHD, “There is currently a lease on the blob…”

【讨论】:

一个重要提示:删除按钮在 IE9 中无法正常工作。我无法在 IE 上遵循这一点,但在 Chrome 上我没有问题。 @PaulKeister 在 Firefox 17.0.1 上也有问题。我不得不尝试几次。 除了@DavideIcardi 的评论:在this thread on MSDN forum 上解释了blob 租约是异步释放的,这个操作最多可以持续2 小时。 我必须转到旧门户 > 存储 > 从列表中选择存储帐户 > 单击顶部的容器选项卡 > 单击 vhds > 选择要删除的 blob。现在您可以删除存储帐户了。 同上@chdev77。我还必须去旧门户网站才能显示磁盘。哇,真烦人!【参考方案2】:

不幸的是,在某些情况下,VM 已被删除,但磁盘显示附加到 blob(30GB VHD)的 VM 阻止了删除。还有一种情况是,使用 Azure 存储资源管理器会发现一个无法删除的 orfan 但已租用的 VHD blob,并且预览门户上没有参考。

【讨论】:

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

转到虚拟机,然后单击光盘。标记光盘并选择底部的删除光盘。您现在可以选择是保留还是删除相应的 vhd。

重要的是先通过虚拟机删除磁盘,而不是通过存储删除。

【讨论】:

我想你们中的许多人都有 RTFM 而不是问题。这些是孤立的租用锁定 vhd... 我有同样的问题,我在 Azure 上没有任何东西,但有两个 VHD,它们不会因为它们被租用和锁定而被删除(这是一个错误,因为没有任何东西可以租用它们) 【参考方案4】:

作为 F.M.已经说明;有一种情况,当删除 VM 时,即使 VM 已被删除,磁盘仍显示为附加到 VM。

对我来说,发生这种情况是因为我设置了支出限额。当达到支出限额时,您的服务将被禁用。您创建的任何 *** 网关和虚拟机都将被删除。然后最重要的是,附加到已删除虚拟机的磁盘仍然认为它们已附加:(

我找到了this blog,它解释了这个问题并展示了如何使用 powershell 来解决。

希望这对其他用户有所帮助。

【讨论】:

太棒了!您的链接将我带到了他几天后制作的工具,该工具可让您“释放”您的 vhd:biztalkgurus.com/biztalk_server/biztalk_blogs/b/biztalk/archive/…【参考方案5】:

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

【讨论】:

【参考方案6】:

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

使用 power shell 命令

获取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 管理门户上的“图像”选项卡(虚拟机部分内)删除图像。【参考方案7】:

不幸的是,Fernando's answer 对我不起作用,因为存储是“孤立的”,因为我在删除存储之前删除了它的虚拟机。我找不到从门户网站上执行此操作的方法,因此我安装了azure-cli,并在身份验证后运行以下命令:

azure storage account delete <my-account>

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

error: Storage account &lt;my-account&gt; has some active image(s) and/or disk(s), e.g. &lt;my-image&gt;. Ensure these image(s) and/or disk(s) are removed before deleting this storage

然后我删除了违规图片

azure vm disk delete &lt;my-image&gt;

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

azure storage account delete &lt;my-account&gt;

【讨论】:

遇到了完全相同的问题。我有一堆无法在门户中删除的孤立磁盘和图像。如果我在四个月前找到这个答案就好了!【参考方案8】:

在删除您的存储帐户之前进行检查;您创建的每个存储帐户都必须有关联的虚拟机、磁盘和映像。转到 Azure 门户

在左侧窗格中选择虚拟机选项卡 单击实例映像和磁盘

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

在新更新的 Azure 门户中,许多上述配置页面已更改。您可以在“所有资源”窗格中看到图像和磁盘选项。在较新版本的 Azure 门户中,您可以在其相邻的垂直窗格中轻松识别虚拟机及其关联的磁盘及其存储帐户,所有这些都在一个带有不同图标图像的页面中。

【讨论】:

【参考方案9】:

有时我们通过新门户删除 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 并将存储帐户指定给有问题的存储帐户,然后再次将其删除。

【讨论】:

【参考方案10】:

对于那些依赖 GUI 管理 Azure 并且不知道使用 PowerShell 或执行其他答案的人,您现在可以在尝试删除存储时通过选中“删除未附加的图像”来删除卡住的存储帐户。

它会自动删除存储空间。

【讨论】:

我刚刚做了,但忘记了复选框的确切措辞。

以上是关于如何删除包含租用 blob 的 Azure 存储帐户?的主要内容,如果未能解决你的问题,请参考以下文章

Azure Blob 容器备份和恢复

使用 azure-storage-blob 或 azure-storage 上传和删除 Azure 存储 Blob

如何使用 blob 服务以编程方式删除 Azure 存储中未提交的块?

在 Azure 存储中查找软删除 blob 的永久删除日期

如何删除 Azure 文件夹中的 blob 文件 [关闭]

如何在说 x 天后定期从 azure 文件共享中删除文件?