@ -0,0 +1,177 @@ .. _minio-object-delete:
Object Deletion
概述
本页总结了 ``DELETE `` 操作如何影响对象,具体取决于包含对象的数据桶的配置.
以下因素的任何组合都可能影响 ``DELETE `` 操作的功能:
权限
MinIO 使用 :ref:` 基于策略的访问控制 <minio-policy>` 系统进行访问管理.
用户或服务账户必须提供正确的策略操作和条件,以允许对桶和对象进行 DELETE
.
未被备份的对象
对未启用版本控制的数据桶中的对象执行 DELETE
操作时,操作非常简单.
在验证用户或服务帐户是否有权限执行 DELETE
操作后,MinIO 会永久删除对象.
请求执行删除操作的用户或服务帐户必须拥有针对数据桶和对象的 s3:DeleteObject
操作权限.
版本控制对象
DELETE
当对象被版本控制时,操作的工作方式会有所不同.
用户或服务帐户必须具有针对数据桶和对象的 s3:DeleteObjectVersion
操作权限.
对当前版本进行删除操作
对未指定版本 UUID 的版本控制对象进行 DELETE
操作时,会创建一个 DeleteMarker
作为对象的 head
.
在这种情况下,MinIO 实际上不会从磁盘上删除对象或其任何版本.
通过指定版本的 UUID,仍可访问对象的所有现有版本.
当 DeleteMarker
是对象的头部时, MinIO 不会为未指定版本 ID 的 GET
请求提供对象.
相反, MinIO 返回类似 404
的响应.
您可以通过以下方法查找对象版本的 UUID mc ls --versions
.
从硬盘中删除对象的当前版本, 查找版本的 UUID, 然后使用 mc rm --version-id=UUID ...
删除当前版本.
在这种情况下, 对于未指定 UUID 的对象的 GET
请求,紧接着的对象版本将成为该对象的当前版本.
警告
在 DELETE 操作中指定 version-id
是不可逆的.
MinIO 会从硬盘中删除指定版本,并且 cannot 检索该版本.
删除先前版本的操作
要删除对象的先前版本,请指定版本的 UUID.
您可以通过以下方法获取版本 UUID mc ls --versions
.
当 DELETE
请求指定了一个 version-id
且用户拥有删除对象版本的正确权限时,MinIO 会从硬盘中永久删除指定的版本.
警告
在 DELETE 操作中指定 version-id
是不可逆的.
MinIO 会从硬盘中删除指定版本,并且 无法 检索该版本.
删除全部版本
使用 mc rm --versions
删除对象的 所有 版本.
这是不可逆转的.
生命周期管理到期
您可以定义一个或多个 lifecycle management expiration rule(s) 使对象在某个版本号计数或某个时间段后失效. 当存在的版本多于规则指定的版本时, 或版本比指定的版本旧时,MinIO 会从硬盘中永久删除对象版本.
这些规则依赖 scanner <minio-concepts-scanner>`来处理桶上的规则.
扫描仪作为优先级较低的连续进程运行,优先执行 ``READ` 和 WRITE
操作.
因为, 符合过期要求的对象版本可能不会立即从 MinIO 中删除.
请参阅 scanner 页面详细了解扫描仪的工作方式和配置选项.
DeleteMarkers
是自己的对象.
生命周期规则可以移除其对象的唯一剩余版本的 DeleteMarkers
.
在 MinIO 版本发生变更: RELEASE.2024-05-01T01-11-10Z
使用 JSON
时,生命周期规则可在指定天数后删除已删除对象的所有版本.
保留物件
MinIO 保护受 :ref:` 锁定规则 <minio-object-locking>` 约束的对象不被覆盖或删除. 这些规则要求保留对象,直到规则失效或被删除为止.
DELETE
对没有指定版本的锁定对象进行操作时,会为该对象创建一个 DeleteMarker 标记.
然而, 根据锁的要求保留对象版本本身.
DELETE
指定对象版本的操作必须遵守保留规则.
MinIO 保护锁定的对象版本不会被覆盖或删除,直到锁定过期或被移除.
复制对象
复制将对象从一个位置复制到另一个位置.
MinIO 支持在桶级别或群集( 站点
)级别进行复制.
删除操作可能复制,也可能不复制, 取决于复制类型和复制的配置方式 .
站点复制
对于已启用 multi-site replication 的群集, MinIO 会将任何群集上执行的所有 delete
操作复制到对等组中的每个其他群集上.
任何单个对等点上的删除行为都遵循与任何 MinIO 部署相同的流程.
桶复制
用 bucket replication, MinIO 支持来源桶和已配置的远程桶之间复制删除操作. MinIO 同步删除特定对象版本 和 新的 delete markers. 删除操作复制使用相同的 replication process 与所有其他复制操作一样.
MinIO 要求 明确启用 版本化删除和删除标记复制.
使用 mc replicate add --replicate
字段来指定 delete` 和 delete-marker 或两者,以分别启用版本控制删除和删除标记复制.
要同时启用, 使用逗号分隔符指定两个字符串: delete,delete-marker
.
删除标记复制, MinIO 在删除操作创建删除标记后开始复制流程.
MinIO 使用 X-Minio-Replication-DeleteMarker-Status
用于跟踪删除标记复制状态的元数据字段.
在 active-active 复制配置, 如果两个群集同时为一个对象创建删除标记,或者如果一个或两个群集在复制事件同步之前宕机,则 MinIO 可能会产生重复的删除标记。
复制删除特定对象版本, MinIO 将对象版本标记为 PENDING
,直到复制完成.
一旦远程目标删除了该对象版本, MinIO 删除源代码上的对象版本.
虽然这一过程可确保近乎同步的版本删除, 可能会导致列表操作在初始删除操作后返回对象版本.
MinIO 使用 X-Minio-Replication-Delete-Status
用于跟踪删除版本的复制状态.
MinIO 只复制客户端驱动的显式删除操作. MinIO 不会复制 lifecycle management expiration rules. 对于 active-active 配置, 在 所有 复制桶上设置相同的过期规则,以确保对象过期应用的一致性.
MinIO Trims Empty Object Prefixes on Source and Remote Bucket
如果删除操作删除了一个桶前缀中的最后一个对象, MinIO 递归地删除前缀的每个空部分,直到存储桶根.
MinIO 仅将递归删除应用于作为对象写入操作的一部分 隐式
创建的前缀.
MinIO 不会递归删除使用显式目录创建命令创建的前缀, 例如 mc mb
.
如果复制规则启用了复制删除操作, 复制过程 也 在目标 MinIO 集群上应用隐式前缀修剪行为.
例如, 考虑一个具有以下对象前缀的存储桶 photos
:
photos/2021/january/myphoto.jpg
//2021/january/
根据对象名称隐式创建photos/2021/february/myotherphoto.jpg
//2021/february/
根据对象名称隐式创建photos/NYE21/NewYears.jpg
//NYE21/
在桶中明确创建
photos/NYE21
是 唯一 个明确使用 mc mb
.
所有其他前缀都是在编写位于该前缀的对象时 隐式 创建的.
命令删除
myphoto.jpg
. MinIO 自动删除空的/january/
前缀.然后命令删除
myotherphoto.jpg
. MinIO 会自动修剪/ebruary/
前缀 ** 和现在已空的/2021
前缀.命令删除
NewYears.jpg
对象. MinIO 保留``NYE21/``前缀,因为它是 明确 创建的.