如何删除包含租赁 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,从而删除存储帐户?

49374 次浏览

解决方案的关键是容器有一个活动磁盘构件的消息,以及从存储库中删除它的建议。

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

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

备注:

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

参见: 无法删除 VHD,“目前有一个对滴租约...”

不幸的是,有一种情况是 VM 被删除了,但是磁盘显示连接到 blob 的 VM (30GB VHD)阻止了删除。还有一个使用 Azure 存储浏览器的例子,你会发现一个 Orfan 但是租用的 VHD blob 不能被删除,并且在预览门户上没有参考。

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

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

正如 F.M. 已经指出的那样,有一种情况是,在删除 VM 时,即使已经删除了 VM,磁盘仍然显示为连接到 VM。

对我来说,发生这种情况是因为我有一个开支限制。当支出达到上限时,你的服务就会停止。您创建的任何 VPN 网关和 VM 都将被删除。然后,为了使已删除的虚拟机附加的磁盘仍然认为它们是附加的: (

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

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

您可以使用 Iaas 管理工作室: 打破租约,删除斑点,然后删除孤立的图像。

在我的例子中,由于 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)
}

不幸的是,费尔南多的回答不适合我,因为存储是“孤立的”,因为我在删除存储之前删除了它的 VM。我无法在门户中找到这样做的方法,所以我安装了 天蓝色,在身份验证之后运行以下命令:

azure storage account delete <my-account>

如果失败,错误消息将包含元凶的名称,例如:

error: Storage account <my-account> has some active image(s) and/or disk(s), e.g. <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>

删除存储帐户之前一定要检查; 您创建的每个存储帐户都必须有相关联的虚拟机、磁盘和映像。去 Azure 传送门

在左窗格中选择 VirtualMachines 选项卡 单击实例图像和磁盘

请注意,单个虚拟机有其附加磁盘,显示在磁盘区域。在删除虚拟机之前,先删除相关的磁盘,然后再删除虚拟机中的磁盘。然后最后删除存储帐户。另外,如果要删除的帐户有关联,请在相同的左侧窗格中查找“网络”。

在新更新的 Azure 门户中,上面提到的许多配置页面都发生了更改。您可以在“所有资源”窗格中看到“图像和磁盘”选项。在 Azure 门户的新版本中,您可以轻松地在相邻的垂直窗格中用不同的图标图像在一个页面中识别与其相关的磁盘和存储帐户。

有时候我们通过新的门户网站删除蔚蓝的存储账号,但是我们不能删除它,得到这个错误: “删除存储账号‘ jason1disks796’失败。错误: 由于存储帐户的工件正在使用,因此无法删除该帐户。

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

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,并将存储帐户指定给有问题的 Storage Account,然后再次删除它。

对于那些依靠图形用户界面来管理 Azure 的用户来说,他们不知道如何使用 PowerShell 或者做其他的回答,你现在可以通过在试图删除存储时选择“删除未附加的图片”来删除卡住的存储帐户。

它会自动删除存储没有太多的麻烦。