物件刪除
概觀
本頁總結了 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/
前綴,因為它是明確建立的。