Blob 数据的软删除

Blob 软删除通过将已删除的数据在系统中保留指定时间,保护单个 Blob、快照或版本免受意外删除或覆盖。 在保持期内,可以将软删除对象还原到它在删除时的状态。 保留期结束后,该对象将被永久删除。

Blob 软删除是 Blob 数据的综合帐户内数据保护策略的一部分。 为获得最佳 Blob 数据保护,建议启用以下数据保护功能:

若要防止更广泛的数据丢失方案(例如意外删除帐户或勒索软件),请考虑启用Azure 备份以及帐户内功能。 若要详细了解 Azure 的数据保护建议,请参阅数据保护概述

注意

在为存储帐户启用 Blob 版本控制后,对该帐户中 Blob 的每次写入操作都会创建一个新版本。 因此,启用 blob 版本管理可能会带来额外成本。 若要尽量降低成本,请使用生命周期管理策略自动删除旧版本。 有关生命周期管理的详细信息,请参阅通过自动执行 Azure Blob 存储访问层来优化成本

Blob 软删除工作原理

为存储帐户启用 blob 软删除时,将为删除的对象指定一个保持期(1 至 365 天)。 保持期表示数据在被删除或覆盖后保持可用的时间。 保持期从对象被删除或覆盖的那一刻开始计算。

在保留期生效期间,可通过调用还原删除的 Blob 操作,恢复已删除的 blob 及其快照,或恢复已删除的版本。 下图显示了在启用 blob 软删除后,如何还原已删除的对象:

这是一张如何在保留期内恢复软删除的 blob 的截图。

您可以随时更改软删除的保留时间。 更新后的保持期仅适用于在保持期更改后删除的数据。 在保持期更改之前删除的任何数据均以数据被删除当下有效的保持期为准。

尝试删除某个软删除的对象不会影响其到期时间。

禁用 blob 软删除后,可以在软删除保持期结束之前继续访问和恢复存储帐户中的软删除对象。

Azure 建议将 Blob 版本控制与软删除一起启用,该功能适用于常规用途 v2、块 Blob 和 Blob 存储帐户。 对于具有层级命名空间的账户,版本控制不被支持。

Azure 存储 REST API 版本 2017-07-29 及以上支持 blob 软删除。

重要

只能使用 blob 软删除来还原单个 blob、快照、目录(位于分层命名空间)或版本。 若要还原容器及其内容,还必须为存储帐户启用容器软删除。 Azure 建议启用 blob 软删除,同时还要启用容器软删除和 blob 版本控制,以确保对 blob 数据的完整保护。 有关详细信息,请参阅数据保护概述

Blob 软删除并不能防止删除存储帐户。 若要防止存储帐户被删除,请在存储帐户资源上配置锁。 有关锁定存储帐户的详细信息,请参阅将 Azure 资源管理器锁定应用于存储帐户

启用软删除后,删除操作将作何处理

当你启用 Blob 软删除时,删除某个 Blob 会将该 Blob 标记为软删除。 删除不会生成快照。 保持期到期后,软删除的 blob 将被永久删除。 在具有层级命名空间的账户中,blob的访问控制列表不受影响,且如果恢复blob,访问控制列表依然保持完整。

如果一个blob有快照,你不能删除它,除非你也删除了快照。 当你删除某个 Blob 及其快照时,该 Blob 和快照都会被标记为已软删除。 删除不会生成新的快照。

可以在不删除基础 blob 的情况下删除一个或多个活动快照。 在这种情况下,快照被软删除。

如果你删除账户中启用了分层命名空间功能的目录,该目录及其所有内容都会被标记为软删除。 你只能访问已软删除的目录。 要访问已软删除目录中的内容,您需要先还原该已软删除的目录。

除非显式显示或列出,否则软删除对象不可见。 有关如何列出软删除对象的详细信息,请参阅管理和还原软删除的 blob

启用软删除时,如何处理覆盖操作

重要

本部分不适用于具有分层命名空间的帐户。

调用放置 Blob放置块列表复制 Blob 等操作可覆盖 blob 中的数据。 启用 Blob 软删除后,覆盖 Blob 时,会自动创建该 Blob 在写入操作之前状态的软删除快照。 保持期到期后,软删除的快照将被永久删除。 系统创建快照的操作不会出现在 Azure Monitor 资源日志或 存储分析 日志中。

软删除快照是不可见的,除非你明确显示或列出软删除对象。 有关如何列出软删除对象的详细信息,请参阅管理和还原软删除的 blob

为了保护复制操作,你必须为目标存储账户启用 blob 软删除。

blob 软删除不能防止写入 blob 元数据或属性的操作。 更新 Blob 的元数据或属性时,删除操作不会创建软删除快照。

对于高级存储账户,软删除的快照不计入每个 blob 最多 100 个快照的限制。

还原软删除的对象

可以在保留期内通过调用“撤销删除 Blob”操作,还原在分层命名空间中软删除的 Blob 和目录。 “撤销删除 Blob” 操作将还原 blob 及其相关的任何软删除快照。 它会恢复你在保留期间删除的所有快照。 在具有分层命名空间的帐户中,某个 Blob 的访问控制列表会随着该 Blob 一起还原。

在具有层级命名空间的账户中,你还可以使用 “撤销 Blob ”操作来恢复软删除目录及其所有内容。 如果重命名包含软删除 Blob 的目录,则这些软删除的 Blob 会断开与目录的连接。 要恢复这些blob,你需要将目录名恢复为原始名称,或者创建一个使用原始目录名称的独立目录。 否则,当你尝试恢复那些软删除的斑点时,会收到错误。 你也不能将目录或 Blob 还原到已存在同名目录或 Blob 的文件路径。 例如,如果你删除了a.txt(1),然后又上传了一个名称同样为a.txt(2)的新文件,那么在当前处于活动状态的a.txt(2)被删除或重命名之前,你无法恢复已软删除的a.txt(1)。 在该目录被取消删除之前,你无法访问已软删除的目录中的内容。

对未软删除的blob调用 Undelete Blob ,会恢复与该blob关联的所有软删除快照。 如果 Blob 没有快照且未被软删除,调用 取消删除 Blob 不会产生任何效果。

若要将软删除的快照提升到基础 blob,请先对基础 blob 调用“恢复已删除的 Blob”以还原 blob 及其快照。 接下来,将所需的快照复制到基本 blob 上。 也可将该快照复制到新的 blob 中。

在对象恢复之前,你无法读取软删除的blob或快照中的数据。

有关如何还原软删除对象的详细信息,请参阅管理和还原软删除的 blob

Blob 软删除和版本化

重要

对于具有层级命名空间的账户,版本控制不被支持。

如果你同时为存储帐户启用了 Blob 版本控制和 Blob 软删除,那么覆盖 Blob 时,系统会自动创建一个新的先前版本,以反映该 Blob 在写入操作之前的状态。 系统不会软删除新版本,并且不会在软删除保留期到期时删除该版本。 不会创建软删除的快照。

如果你同时启用了存储账户的 blob 版本控制和 blob 软删除,那么当你删除一个 blob 时,当前版本的 blob 就会变成之前的版本,并且不再有当前版本。 不会创建新版本,也不会创建软删除的快照。 所有之前的版本都会被保留,直到你通过直接删除操作或生命周期管理策略明确删除它们。

同时启用软删除和版本控制可保护以前的 Blob 版本和当前版本免受删除。 启用软删除后,即使 Blob 被删除,其版本仍不会被删除。 如果删除某个版本,则该版本将变为软删除。 软删除版本将保留到软删除保留期过后。 保留期结束后,软删除的blob版本将被永久删除。

在软删除保留期内,可以使用“取消删除 Blob”操作来还原已软删除的版本。 “撤消删除 Blob”操作始终会还原 Blob 的所有软删除版本。 无法做到只还原一个已软删除的版本。

注意

在已启用版本控制的情况下,对已删除的 Blob 调用 取消删除 Blob 操作会还原任何已软删除的版本或快照,但不会还原当前版本。 若要还原当前版本,请通过将先前版本复制到当前版本来提升它。

建议为你的存储帐户同时启用版本控制和 blob 软删除以实现最佳数据保护。 有关如何结合使用 Blob 版本控制和软删除的详细信息,请参阅 Blob 版本控制和软删除

Blob 操作的软删除保护

下表描述了启用 blob 软删除(无论是否启用 blob 版本控制)后删除和写入操作的预期行为。 在下表中, “无变化 ”表示无论是否启用 blob 软删除,操作的行为都相同。

存储帐户(无分层命名空间)

REST API 操作 已启用软删除 同时启用了软删除和版本控制
删除存储帐户 无更改。 你无法恢复已删除账户中的容器和blob。 无更改。 你无法恢复已删除账户中的容器和blob。
删除容器 无更改。 你无法恢复已删除的容器中的 Blob。 无更改。 你无法恢复已删除的容器中的 Blob。
删除 Blob 如果用于删除 blob,该 blob 将标记为软删除。

如果用于删除 blob 快照,该快照将标记为软删除。
如果用于删除 blob,则当前版本将成为先前版本,并且会删除当前版本。 不会创建新版本,也不会创建软删除的快照。

如果用于删除 Blob 版本,该版本将被标记为软删除。
取消删除 Blob 还原在保持期内删除的 blob 和所有快照。 恢复在保留期内被删除的 blob 和其所有版本。
上传 Blob
上传块列表
复制 Blob
从 URL 复制 Blob
如果对活动 blob 调用该操作,将自动生成操作之前的 blob 状态的快照。

如果对软删除的 blob 调用该操作,则仅当该 blob 被同一类型的 blob 所替换时,才会生成该 blob 先前状态的快照。 如果 Blob 属于不同类型,则所有现有软删除数据将被永久删除。
将自动生成一个新版本,该版本在操作前捕获 blob 的状态。
放置块 如果用于将块提交到活动 blob 中,则不发生任何更改。

如果用于将块提交到已被软删除状态的 blob,将创建一个新的 blob,并自动生成快照以捕获该软删除状态下 blob 的状态。
无更改。
插入页面
从 URL 插入页
无更改。 通过该操作覆盖或清除的页 blob 数据不会保存,且不可恢复。 无更改。 通过该操作覆盖或清除的页 blob 数据不会保存,且不可恢复。
追加块
通过 URL 追加块
无更改。 无更改。
设置 Blob 属性 无更改。 被覆盖的 blob 属性不可恢复。 无更改。 被覆盖的 blob 属性不可恢复。
设置 Blob 元数据 无更改。 被覆盖的 Blob 元数据无法恢复。 将自动生成一个新版本,该版本在操作前捕获 blob 的状态。
设置 Blob 层 基础 blob 已移至新层。 任何活跃或软删除的快照将保持在原始级别。 不会创建软删除的快照。 基础 blob 已移至新层。 任何处于活动状态或已软删除的版本将保留在原来级别中。 不会创建新的版本。

存储帐户(分层命名空间)

REST API 操作 软删除已启用
删除存储帐户 无更改。 已删除帐户中的容器和 Blob 不可恢复。
文件系统 - 删除 无更改。 已删除容器中的 blob 不可恢复。
删除容器 无更改。 你无法恢复已删除的容器中的 Blob。
路径 - 删除 将创建软删除的 Blob 或目录。 软删除的对象将在保留期过后删除。
删除 Blob 已创建一个软删除对象。 软删除的对象将在保留期过后删除。 对于带有快照的 Blob,不支持软删除。
路径 - 创建,用于重命名 Blob 或目录 现有的目标 Blob 对象或空目录会被软删除,并由源 Blob 对象将其替换。 软删除的对象将在保留期过后删除。
设置 Blob 到期时间,它会在现有 Blob 上设置到期日期 未创建软删除的 blob。 过期的 blob 在过期时不会成为软删除的 blob。

功能支持

启用 Data Lake Storage Gen2、网络文件系统 (NFS) 3.0 协议或 SSH 文件传输协议 (SFTP) 可能会影响对此功能的支持。 如果已启用这些功能中的某一项,请参阅 Azure 存储帐户中的 Blob 存储功能支持,以评估对此功能的支持。

对于在没有分层命名空间的存储帐户上使用 Data Lake Storage API 上传的 blob,不支持软删除。

定价和计费

所有软删除数据按与活动数据相同的费率计费。 对于在保留期结束后被永久删除的数据,不会向您收费。

启用软删除时,请保留较短的期限,以便更好地了解该功能如何影响账单。 建议的最短保持期为七天。

对频繁被覆盖的数据启用软删除可能会导致存储容量费用增加,并在列出 Blob 时导致延迟增加。 你可以通过将频繁被覆盖的数据存储在已禁用软删除的单独存储帐户中,来降低这些额外成本和延迟。

在覆盖或删除 blob 时,自动生成快照或版本的相关事务不会被计费。 按写入操作的交易费率对“取消删除 Blob”操作进行计费。

有关 Blob 存储定价的详细信息,请参阅 Blob 存储定价页。

Blob 软删除与虚拟机磁盘

Blob 软删除适用于高级和标准非托管磁盘(实际上是页 blob)。 软删除仅可帮助恢复被“删除 Blob”、“上传 Blob”、“上传块列表”和“复制 Blob”操作删除或覆盖的数据。

Put Page调用覆盖的数据无法恢复。 Azure 虚拟机使用对 Put Page 的调用写入非托管磁盘,因此,使用软删除来撤销 Azure VM 对非托管磁盘执行的写入操作不是受支持的场景。

后续步骤