物件刪除
概觀
本頁概述 DELETE
操作如何根據包含物件的儲存桶組態來影響物件。
下列因素的任何組合都可能影響 DELETE
操作的運作方式
權限
MinIO 使用 基於原則的存取控制 系統進行存取管理。使用者或服務帳戶必須提供正確的原則動作和條件,以允許對儲存桶和物件執行 DELETE
。
未版本化的物件
當對未啟用版本控制的儲存桶中的物件執行 DELETE
操作時,該操作很簡單。在驗證使用者或服務帳戶具有執行 DELETE
操作的權限後,MinIO 會永久移除該物件。
請求刪除操作的使用者或服務帳戶必須具有儲存桶和物件的 s3:DeleteObject
動作權限。
版本化的物件
當物件進行版本控制時,DELETE
操作的運作方式會有所不同。
使用者或服務帳戶必須具有儲存桶和物件的 s3:DeleteObjectVersion
動作權限。
對目前版本執行刪除操作
對未指定版本 UUID 的版本化物件執行 DELETE
操作會產生一個 DeleteMarker
,並將其放置為物件的 head
。
在這種情況下,MinIO 實際上不會從磁碟中移除物件或其任何版本。物件的所有現有版本仍然可以透過指定版本的 UUID 來存取。當 DeleteMarker
是物件的 head 時,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 會永久地從硬碟中移除該物件版本。
這些規則依賴 掃描器 來處理儲存桶上的規則。掃描器會以較低的優先順序持續執行,READ
和 WRITE
操作具有較高的優先順序。因此,符合到期要求的物件版本可能不會立即從 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
欄位來指定 delete
和 delete-marker
,或兩者都指定以分別啟用版本化刪除和刪除標記複寫。若要同時啟用兩者,請使用逗號分隔符號指定兩個字串:delete,delete-marker
。
對於刪除標記複寫,MinIO 會在刪除操作建立刪除標記後開始複寫流程。MinIO 使用 X-Minio-Replication-DeleteMarker-Status
中繼資料欄位來追蹤刪除標記複寫狀態。在 主動-主動 複寫配置中,如果兩個叢集同時為一個物件建立刪除標記,或如果一個或兩個叢集在複寫事件同步之前關閉,MinIO 可能會產生重複的刪除標記。
為了複寫特定物件版本的刪除,MinIO 會將物件版本標記為 PENDING
,直到複寫完成為止。一旦遠端目標刪除該物件版本,MinIO 就會在來源端刪除該物件版本。雖然此流程可確保接近同步的版本刪除,但可能會導致在初始刪除操作之後,列出操作仍傳回物件版本。MinIO 使用 X-Minio-Replication-Delete-Status
來追蹤刪除版本複寫狀態。
MinIO 只會複寫明確的客戶端驅動的刪除操作。MinIO 不會複寫由 生命週期管理到期規則 刪除的物件。對於 主動-主動 配置,請在所有複寫儲存桶上設定相同的到期規則,以確保物件到期的一致應用。
MinIO 會修剪來源和遠端儲存桶上的空物件前綴
如果刪除操作移除了儲存桶前綴中的最後一個物件,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 會自動修剪/february/
前綴和現在空白的/2021
前綴。一個指令會移除
NewYears.jpg
物件。MinIO 會保留/NYE21/
前綴,因為它是明確地被建立的。