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

Posted

技术标签:

【中文标题】在 Azure 存储中查找软删除 blob 的永久删除日期【英文标题】:Find permanent deletion date for soft deleted blobs in Azure Storage 【发布时间】:2021-10-04 00:50:01 【问题描述】:

几周前,我在受软删除保护的 Azure 存储帐户中删除了很多 blob (50TB+)。软删除配置了 14 天的保留期,我后来改成了 7 天。

但是,14 天过去了,这些 blob 仍未被永久删除,因为在 Azure 门户中选择“显示已删除的 blob”时我仍然可以看到它们。 这也意味着我仍然需要支付存储费用。

有没有办法找出 blob 的实际删除日期?我还在 Insights 下看到使用的容量仍然没有变化。

【问题讨论】:

【参考方案1】:

如果您使用的是 REST API,当您将带有 deleted 的 blob 列为 include 参数的值之一(以便列表结果包含软删除的 blob)时,您可以通过检查两个结果中的属性:

Deleted-Time:它会告诉你删除 blob 的日期/时间。 RemainingRetentionDays:它会告诉您在剩余天数之后,该 blob 将从存储中永久删除。

来自link

对于 2017-07-29 及更高版本,Deleted、DeletedTime 和 当此操作包括 包括=已删除 参数。如果此 blob 不会出现这些元素 没有被删除。这些元素出现在 blob 或快照中,它们是 启用软删除功能时使用 DELETE 操作删除。 对于软的 blob 和快照,已删除元素设置为 true 删除。 Deleted-Time 对应于删除 blob 的时间。 RemainingRetentionDays 表示软化后的天数 已删除的 Blob 将被 Blob 服务永久删除。

如果您使用Azure.Storage.Blobs (.Net SDK),您将在以下属性中找到此信息:BlobItemProperties.DeletedOnBlobItemProperties.RemainingRetentionDays

对于其他语言,您可以在各自的 SDK 中搜索类似的属性。

更新

请尝试以下方法:

$context = New-AzStorageContext -StorageAccountName account-name -StorageAccountKey account-key
$blobs = Get-AzStorageBlob -Container 001-000 -IncludeDeleted -Context $context
$blobs.ICloudBlob.Properties | ConvertTo-Json

输出将类似于以下内容。下面的第一个 blob 不会被删除,因此 DeletedTimeRemainingDaysBeforePermanentDelete 将为空。第二个 blob 被软删除,它将填充这些值。


    "CacheControl":  null,
    "ContentDisposition":  null,
    "ContentEncoding":  null,
    "ContentLanguage":  null,
    "Length":  89,
    "ContentMD5":  "nax+W2kkfQqP8+K6dj2uFw==",
    "ContentType":  "image/svg+xml",
    "ETag":  "\"0x8D951D0C90A29CA\"",
    "Created":  "\/Date(1627481141000)\/",
    "LastModified":  "\/Date(1627481141000)\/",
    "BlobType":  2,
    "LeaseStatus":  2,
    "LeaseState":  1,
    "LeaseDuration":  0,
    "PageBlobSequenceNumber":  null,
    "AppendBlobCommittedBlockCount":  null,
    "IsServerEncrypted":  true,
    "IsIncrementalCopy":  false,
    "StandardBlobTier":  null,
    "RehydrationStatus":  null,
    "PremiumPageBlobTier":  null,
    "BlobTierInferred":  null,
    "BlobTierLastModifiedTime":  null,
    "DeletedTime":  null,
    "RemainingDaysBeforePermanentDelete":  null
,

    "CacheControl":  null,
    "ContentDisposition":  null,
    "ContentEncoding":  null,
    "ContentLanguage":  null,
    "Length":  98024,
    "ContentMD5":  "/uZucSqKCO71gFpGiSkyrQ==",
    "ContentType":  "application/font-woff",
    "ETag":  "\"0x8D951D0C90AC631\"",
    "Created":  "\/Date(1627481141000)\/",
    "LastModified":  "\/Date(1627481141000)\/",
    "BlobType":  2,
    "LeaseStatus":  0,
    "LeaseState":  0,
    "LeaseDuration":  0,
    "PageBlobSequenceNumber":  null,
    "AppendBlobCommittedBlockCount":  null,
    "IsServerEncrypted":  true,
    "IsIncrementalCopy":  false,
    "StandardBlobTier":  null,
    "RehydrationStatus":  null,
    "PremiumPageBlobTier":  null,
    "BlobTierInferred":  null,
    "BlobTierLastModifiedTime":  null,
    "DeletedTime":  "\/Date(1627481162000)\/",
    "RemainingDaysBeforePermanentDelete":  9

【讨论】:

谢谢,我尝试列出 blob 以获得保留天数,但是,这似乎暴露了实际问题。如果我列出 blob(通过 powershell),它们似乎已经被删除(使用 -IncludeDeleted)并且我没有得到 blob 结果。但是,门户仍然显示 blob 及其存储使用情况。有什么想法吗? 尝试使用 -debug 参数运行 PowerShell cmdlet。这应该让您更了解为什么不返回软删除的 blob。这很可能是 Azure PowerShell cmdlet 的问题。 不幸的是,没有显示任何明显的问题 DEBUG: AzureQo​​SEvent: CommandName - Get-AzStorageBlob; IsSuccess - 真;持续时间 - 00:00:05.7182680;调试:完成发送指标。调试:15:47:37 - GetAzureStorageBlobCommand 结束处理。 更新了我的答案。 HTH。 也不明白...我担心存储帐户不知何故搞砸了。我会再等几天看看会发生什么,恐怕我必须为 azure 技术支持付费。无论哪种方式都感谢

以上是关于在 Azure 存储中查找软删除 blob 的永久删除日期的主要内容,如果未能解决你的问题,请参考以下文章

列出并恢复软删除的 blob - azure python

不考虑 blob 的软删除

如何永久清除在启用软删除的情况下创建的整个 azure keyvault?

使用永久 SAS 为从 blob 存储到 Azure 数据库的 BULK INSERT 创建范围凭据

有没有办法通过 Javascript 删除 Azure Blob 容器文件?

如何检查/取消天蓝色的存储容器删除操作