文档

对象删除

概述

此页面总结了 DELETE 操作如何影响对象,具体取决于包含该对象的存储桶的配置。

以下因素的任何组合都可能影响 DELETE 操作的功能

权限

MinIO 使用 基于策略的访问控制 系统进行访问管理。用户或服务帐户必须提供正确的策略操作和条件才能允许对存储桶和对象的 DELETE

非版本化对象

在对未启用版本控制的存储桶中的对象执行 DELETE 操作时,操作很简单。在验证用户或服务帐户有权执行 DELETE 操作后,MinIO 将永久删除该对象。

请求删除操作的用户或服务帐户必须具有对存储桶和对象的 s3:DeleteObject 操作权限。

版本化对象

当对象已版本化时,DELETE 操作的工作方式会有所不同。

用户或服务帐户必须具有对存储桶和对象的 s3:DeleteObjectVersion 操作权限。

对当前版本的删除操作

对版本化对象执行 DELETE 操作而不指定版本 UUID 会导致创建 DeleteMarker,该标记作为对象的 head 放置。

在这种情况下,MinIO 实际上不会从磁盘中删除对象或任何版本。对象的现有版本仍然可以使用版本的 UUID 访问。当一个 DeleteMarker 是对象的头部时,MinIO 不会为不指定版本 ID 的 GET 请求提供服务。相反,MinIO 会返回一个类似 404 的响应。

您可以使用 mc ls --versions 找到对象版本的 UUID。

要从驱动器中删除对象的当前版本,请找到该版本的 UUID,然后使用 mc rm --version-id=UUID ... 删除当前版本。在这种情况下,对象的紧邻前一个版本将成为针对不指定 UUID 的对象的 GET 请求提供的当前版本。

警告

在 DELETE 操作中指定 version-id 是不可逆的。MinIO 会从驱动器中删除指定版本,并且 **无法** 检索它。

对先前版本的操作

要删除对象的先前版本,请指定该版本的 UUID。您可以使用 mc ls --versions 检索版本 UUID。当 DELETE 请求指定 version-id 且用户具有删除该对象版本的正确权限时,MinIO 会永久地从驱动器中删除指定版本。

警告

在 DELETE 操作中指定 version-id 是不可逆的。MinIO 会从驱动器中删除指定版本,并且 **无法** 检索它。

删除所有版本

使用 mc rm --versions 删除对象的所有版本。这是不可逆的。

生命周期管理过期

您可以定义一个或多个 生命周期管理过期规则 以在特定版本号计数或特定时间段后使对象过期。当存在的版本数量超过规则指定的数量,或者当版本比指定的时间更旧时,MinIO 会永久地从驱动器中删除该对象版本。

这些规则依赖于 扫描器 来处理存储桶上的规则。扫描器以较低的优先级运行,作为连续进程,其中 READWRITE 操作优先。因此,满足过期要求的对象版本可能不会立即从 MinIO 中删除。

有关扫描器的工作方式和配置选项的更多详细信息,请参阅 扫描器 页面。

DeleteMarkers 是它们自己的对象。生命周期规则可以删除作为其对象唯一剩余版本的 DeleteMarkers

在 MinIO 版本中更改: RELEASE.2024-05-01T01-11-10Z

使用 JSON,生命周期规则可以在指定天数后删除已删除对象的全部版本。

保留的对象

MinIO 会保护受 锁定规则 影响的对象,防止它们被覆盖或删除。这些规则要求对象在规则过期或被删除之前必须保留。

对锁定对象进行 DELETE 操作,但不指定版本,会导致为该对象创建一个 DeleteMarker。但是,对象版本本身会根据锁的要求进行保留。

指定对象版本的 DELETE 操作会受到保留规则的限制。MinIO 会保护受锁影响的对象版本,防止它们被覆盖或删除,直到锁过期或被删除。

复制的对象

复制会将对象从一个位置复制到另一个位置。MinIO 支持在存储桶级别或集群(“站点”)级别进行复制。

删除操作可能会或可能不会进行复制,具体取决于复制类型和复制的配置方式。

站点复制

对于启用了 多站点复制 的集群,MinIO 会将对任何集群执行的所有 delete 操作复制到对等组中的其他每个集群。

任何单个对等节点上的删除行为都遵循与任何 MinIO 部署相同的流程。

存储桶复制

使用 存储桶复制,MinIO 支持在源存储桶和配置的远程存储桶之间复制删除操作。MinIO 会同步删除特定对象版本以及新的 删除标记。删除操作复制使用与所有其他复制操作相同的 复制流程

MinIO 需要显式启用版本化删除和删除标记复制。使用 mc replicate add --replicate 字段来分别指定 deletedelete-marker 或两者以启用版本化删除和删除标记复制。要同时启用两者,请使用逗号分隔符指定这两个字符串:delete,delete-marker

对于删除标记复制,MinIO 在删除操作创建删除标记后开始复制过程。MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元数据字段来跟踪删除标记复制状态。在 主动-主动 复制配置中,如果两个集群同时为一个对象创建删除标记如果一个或两个集群在复制事件同步之前处于关闭状态,MinIO 可能会生成重复的删除标记。

对于复制特定对象版本的删除,MinIO 会将该对象版本标记为 PENDING,直到复制完成。远程目标删除该对象版本后,MinIO 会删除源上的该对象版本。虽然此过程确保了近乎同步的版本删除,但它可能会导致列出操作在初始删除操作后返回该对象版本。MinIO 使用 X-Minio-Replication-Delete-Status 来跟踪删除版本复制状态。

MinIO 只会复制显式客户端驱动的删除操作。MinIO 不会复制由 生命周期管理过期规则 删除的对象。对于 主动-主动 配置,请在所有复制存储桶上设置相同的过期规则,以确保一致地应用对象过期。