在 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.DeletedOn
和BlobItemProperties.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 不会被删除,因此 DeletedTime
和 RemainingDaysBeforePermanentDelete
将为空。第二个 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: AzureQoSEvent: CommandName - Get-AzStorageBlob; IsSuccess - 真;持续时间 - 00:00:05.7182680;调试:完成发送指标。调试:15:47:37 - GetAzureStorageBlobCommand 结束处理。
更新了我的答案。 HTH。
也不明白...我担心存储帐户不知何故搞砸了。我会再等几天看看会发生什么,恐怕我必须为 azure 技术支持付费。无论哪种方式都感谢以上是关于在 Azure 存储中查找软删除 blob 的永久删除日期的主要内容,如果未能解决你的问题,请参考以下文章
如何永久清除在启用软删除的情况下创建的整个 azure keyvault?
使用永久 SAS 为从 blob 存储到 Azure 数据库的 BULK INSERT 创建范围凭据