儲存桶版本控制
概觀
MinIO 支援在單個儲存桶中保留物件的多個「版本」。
啟用後,版本控制允許 MinIO 保留同一個物件的多個迭代。通常會覆蓋現有物件的寫入操作,反而會導致建立新的版本控制物件。MinIO 版本控制可防止意外覆寫和刪除,同時支援「復原」寫入操作。儲存桶版本控制是設定物件鎖定和保留規則的先決條件。
對於版本控制的儲存桶,修改物件的寫入操作會產生具有唯一版本 ID 的物件新版本。MinIO 會標記客戶端預設擷取的物件「最新」版本。然後,客戶端可以明確選擇列出、擷取或移除特定的物件版本。
定義物件過期規則,以移除不再需要的物件版本,例如按版本數量或版本日期。
對版本控制物件的讀取操作
檢閱此系列中的四張圖片,以了解 MinIO 如何在版本控制的儲存桶中擷取物件。使用圖片兩側的箭頭,從一張導覽到下一張。
變更於版本 MinIO:Server RELEASE.2023-05-04T21-44-30Z
MinIO 不會為明確目錄物件(「前綴」)的建立、變更或刪除建立版本。在該明確目錄物件中建立的物件會保留正常的版本控制行為。
MinIO 會從物件路徑隱式判斷前綴。明確的前綴建立通常僅在使用 Spark 和類似工作負載時發生,這些工作負載會在 S3 環境中應用舊版的 POSIX/HDFS 目錄建立行為。
版本控制是每個命名空間
MinIO 使用每個物件的完整命名空間(儲存桶和物件的路徑)來判斷物件的唯一性。例如,以下所有命名空間都是「唯一」物件,其中每個物件的變更都會導致在該命名空間中建立新的物件版本
databucket/object.blob
databucket/blobs/object.blob
blobbucket/object.blob
blobbucket/blobs/object.blob
雖然 object.blob
在所有命名空間中可能是相同的二進位檔案,但 MinIO 僅對特定命名空間強制執行版本控制,因此將以上每個 object.blob
視為不同且唯一。
版本控制和儲存容量
MinIO 不會執行增量或差異式版本控制。對於變更頻繁的工作負載,這可能會導致較舊或老化的物件版本大量使用磁碟機。
例如,考慮一個包含記錄資料的 1GB 物件。應用程式會將 100MB 的資料附加到記錄,並上傳到 MinIO。然後,MinIO 將包含物件的 1GB 和 1.1GB 版本。如果應用程式每天重複此過程 10 天,則儲存桶最終將包含超過 14GB 的資料,這些資料與單個物件相關聯。
MinIO 支援設定物件生命週期管理規則,以自動過期或轉換過時的物件版本,並釋放儲存容量。例如,您可以設定規則,讓物件版本在變成非現行版本(即不再是該物件的「最新」版本)的 90 天後自動過期。有關詳細資訊,請參閱MinIO 物件過期。
您也可以使用以下命令手動移除物件版本
mc rm --versions
- 移除物件的所有版本。mc rm --versions --older-than
-移除早於指定日期的物件的所有版本。
新版本:RELEASE.2024-04-18T19-09-19Z:如果任何單一物件的版本累計大小超過 1TiB,MinIO 會發出警告。
版本 ID 產生
MinIO 在寫入操作時,會為每個版本化的物件產生一個獨特且不可變的識別碼。每個物件版本 ID 由一個 128 位元固定大小的 UUIDv4 組成。UUID 產生方式具有足夠的隨機性,可確保任何環境都具有高度的唯一性,且難以透過計算猜測,也不需要集中的註冊程序和授權來保證唯一性。
MinIO 不支援用戶端管理的版本 ID 配置。所有版本 ID 的產生都由 MinIO 伺服器程序處理。
對於在停用或暫停版本控制時建立的物件,MinIO 使用 null
版本 ID。您可以透過在 S3 操作中指定 null
作為版本 ID 來存取或移除這些物件。
版本化的刪除操作
對版本化的物件執行 DELETE
操作會建立一個 0 位元的 DeleteMarker
作為該物件的最新版本。對於最新版本為 DeleteMarker
的物件,用戶端必須指定版本控制標誌或識別碼,才能對該物件的先前版本執行 GET/HEAD/LIST/DELETE
操作。預設的伺服器行為會從未版本化的操作中排除 DeleteMarker
物件。
MinIO 可以利用生命週期管理過期規則來自動永久移除版本化的物件。否則,請使用手動的 DELETE
操作來永久移除非現行的版本化物件或 DeleteMarker
物件。
MinIO 實作了等冪的刪除標記
版本變更:RELEASE.2022-08-22T23-53-06Z。
標準的 S3 實作可以在處理沒有版本識別碼的簡單 DeleteObject
請求時,為同一個物件建立多個連續的刪除標記。有關管理刪除標記的詳細資訊,請參閱 S3 文件。
MinIO 與標準 S3 實作的不同之處在於,它避免了這種刪除標記的潛在重複。在處理沒有版本識別碼的 Delete
請求時,MinIO 最多只會為指定的物件建立一個刪除標記。MinIO 不會採用 S3 在建立多個連續刪除標記的行為。
若要永久刪除物件版本,請執行 DELETE
操作並指定要刪除的物件的版本 ID。版本化的刪除操作是不可逆的。
以下 mc
命令會對 DeleteMarkers
或版本化的物件執行操作
使用
mc ls --versions
來檢視物件的所有版本,包括刪除標記。使用
mc cp --version-id=UUID ...
來擷取具有相符UUID
的「已刪除」物件版本。使用
mc rm --version-id=UUID ...
來刪除具有相符UUID
的物件版本。使用
mc rm --versions
來刪除物件的所有版本。
教學
啟用儲存貯體版本控制
您可以使用 MinIO 主控台、MinIO mc
CLI 或使用 S3 相容的 SDK 來啟用版本控制。
選取 MinIO 主控台的 儲存貯體區段,以存取儲存貯體的建立和管理功能。您可以使用 搜尋列來篩選清單。

每個儲存貯體列都有一個 管理按鈕,可開啟該儲存貯體的管理視圖。

切換 版本控制欄位,以在儲存貯體上啟用版本控制。
MinIO 主控台也支援在建立儲存貯體的過程中啟用版本控制。有關使用 MinIO 主控台進行儲存貯體管理的詳細資訊,請參閱儲存貯體。
使用 mc version enable
命令來在現有的儲存貯體上啟用版本控制
mc version ALIAS/BUCKET
在啟用版本控制之前建立的物件具有 null
版本 ID。
從版本控制中排除前綴
您可以使用MinIO 用戶端將某些前綴排除在版本控制之外。這對於 Spark/Hadoop 工作負載或其他最初使用臨時前綴建立物件的工作負載很有用。
使用
mc version enable
,並搭配--excluded-prefixes
選項mc version enable --excluded-prefixes "prefix1, prefix2" ALIAS/BUCKET
--excluded-prefixes
前綴的列表會比對所有在其前綴或名稱中包含指定字串的物件,類似於 prefix*
形式的正規表示式。若要僅比對前綴的物件,請使用 prefix/*
。
例如,下列命令會從版本控制中排除任何在其前綴或名稱中包含 _test
或 _temp
的物件
mc version enable --excluded-prefixes "_test, _temp" local/my-bucket
每個儲存貯體最多可以排除 10 個前綴。若要新增或移除前綴,請使用更新的列表重複 mc version enable
命令。新的前綴列表會取代先前的列表。
若要檢視目前排除的前綴,請使用 mc version info
並搭配 --json
選項
mc version info ALIAS/BUCKET --json
命令輸出結果類似如下,排除的前綴列表位於 ExcludedPrefixes
屬性中
$ mc version info local/my-bucket --json
{
"Op": "info",
"status": "success",
"url": "local/my-bucket",
"versioning": {
"status": "Enabled",
"MFADelete": "",
"ExcludedPrefixes": [
"prefix1, prefix2"
]
}
}
若要停用前綴排除並恢復所有前綴的版本控制,請重複 mc version enable
命令,但不包含 --excluded-prefixes
mc version enable ALIAS/BUCKET
從版本控制中排除資料夾
您可以使用 MinIO 用戶端,從版本控制中排除資料夾。
物件鎖定
啟用 物件鎖定 的儲存貯體需要版本控制,並且不支援排除資料夾。
使用
mc version enable
並搭配--exclude-folders
選項,從版本控制中排除名稱結尾為/
的物件mc version enable --exclude-folders ALIAS/BUCKET
若要檢查儲存貯體是否已啟用資料夾版本控制,請使用 mc version enable
命令並搭配 --json
選項。如果 ExcludeFolders
屬性為 true
,則該儲存貯體中的資料夾不會進行版本控制。
mc version enable --excluded-prefixes ALIAS/BUCKET --json
命令輸出結果類似如下
$ mc version info local/my-bucket --json
{
"Op": "info",
"status": "success",
"url": "local/my-bucket",
"versioning": {
"status": "Enabled",
"MFADelete": "",
"ExcludeFolders": true
}
}
若要停用資料夾排除並恢復所有資料夾的版本控制,請重複 mc version enable
命令,但不包含 --exclude-folders
mc version enable ALIAS/BUCKET
暫停儲存貯體版本控制
您可以使用 MinIO 主控台、MinIO mc
CLI 或使用與 S3 相容的 SDK,隨時暫停儲存貯體版本控制。
選取 MinIO 主控台的 儲存貯體區段,以存取儲存貯體的建立和管理功能。您可以使用 搜尋列來篩選清單。

每個儲存貯體列都有一個 管理按鈕,可開啟該儲存貯體的管理視圖。

選取版本控制欄位,並依照指示來暫停儲存貯體中的版本控制。
如需使用 MinIO 主控台進行儲存貯體管理的詳細資訊,請參閱 儲存貯體。
使用 mc version suspend
命令來啟用現有儲存貯體的版本控制
mc version suspend ALIAS/BUCKET
在暫停版本控制時建立的物件會被指派 null
版本 ID。在暫停版本控制時對物件進行的任何變更都會導致覆寫該 null
版本化的物件。MinIO 不會移除或以其他方式變更現有的版本化物件來作為暫停版本控制的一部分。用戶端可以繼續與儲存貯體中的任何現有物件版本互動。