文件

儲存桶版本控制

概觀

MinIO 支援在單一儲存桶中保留物件的多個「版本」。

啟用後,版本控制允許 MinIO 保留同一物件的多個迭代。通常會覆寫現有物件的寫入操作反而會導致建立新的已版本控制物件。MinIO 版本控制可防止意外覆寫和刪除,同時為「還原」寫入操作提供支援。儲存桶版本控制是設定物件鎖定和保留規則的先決條件。

對於已版本控制的儲存桶,變更物件的寫入操作會導致建立具有唯一版本 ID 的該物件的新版本。MinIO 會標記用戶端預設擷取的物件「最新」版本。然後,用戶端可以明確選擇列出、擷取或移除特定物件版本。

定義物件到期規則,以移除不再需要的物件版本,例如依版本數或版本日期。

對已版本控制物件的讀取操作

檢閱本系列中的四個影像,以了解 MinIO 如何在已版本控制的儲存桶中擷取物件。使用影像兩側的箭頭從一個影像導覽到下一個影像。

在版本 MinIO 中變更:伺服器 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 物件過期以取得更多資訊。

或者,您可以使用以下指令手動移除物件版本

新增於版本 RELEASE.2024-04-18T19-09-19Z:如果任何單一物件的版本累積大小超過 1TiB,MinIO 會發出警告。

版本 ID 產生

MinIO 會為每個版本化的物件產生一個唯一且不可變的識別碼,作為寫入操作的一部分。每個物件版本 ID 都包含一個 128 位元固定大小的UUIDv4。UUID 產生方式具有足夠的隨機性,以確保在任何環境中都具有高度的唯一性,並且在計算上難以猜測,而且不需要集中註冊程序和授權即可保證唯一性。

Object with Multiple Versions

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 或版本化的物件進行操作

教學課程

啟用儲存桶版本控制

您可以使用 MinIO 主控台、MinIO mc CLI 或使用與 S3 相容的 SDK 來啟用版本控制。

選取 MinIO 主控台的儲存桶區段以存取儲存桶建立和管理功能。您可以使用 搜尋列來篩選清單。

MinIO Console Bucket Management

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

MinIO Console Bucket Management

切換版本控制欄位以啟用儲存桶的版本控制。

MinIO 主控台也支援在建立儲存桶時啟用版本控制。請參閱儲存桶,以取得關於使用 MinIO 主控台管理儲存桶的更多資訊。

使用 mc version enable 指令以在現有的儲存桶上啟用版本控制

mc version ALIAS/BUCKET
  • ALIAS 替換為已設定的 MinIO 部署的別名

  • BUCKET 替換為要啟用版本控制的目標 儲存桶

在啟用版本控制之前建立的物件具有 null 版本 ID

從版本控制中排除前綴

您可以使用MinIO 用戶端,將某些前綴排除在版本控制之外。這對於 Spark/Hadoop 工作負載或其他最初使用暫時前綴建立物件的工作負載很有用。

複寫和物件鎖定需要版本控制

MinIO 需要版本控制來支援複寫。排除的前綴中的物件不會複寫到任何同級站點或遠端站點。

MinIO 不支援在啟用物件鎖定的儲存桶上,將前綴從版本控制中排除。

--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 Client將資料夾從版本控制中排除。

複寫和物件鎖定需要版本控制

MinIO 需要版本控制來支援複寫。排除的資料夾中的物件不會複寫到任何同級站點或遠端站點。

MinIO 不支援在啟用物件鎖定的儲存桶上,將資料夾從版本控制中排除。

物件鎖定

啟用物件鎖定的儲存桶需要版本控制,且不支援排除資料夾。

  • 使用 mc version enable,並搭配 --exclude-folders 選項,以排除名稱結尾為 / 的物件,使其不進行版本控制

    mc version enable --exclude-folders ALIAS/BUCKET
    
    • ALIAS 替換為已設定的 MinIO 部署的別名

    • 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 Console Bucket Management

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

MinIO Console Bucket Management

選取版本控制欄位,並依照指示暫停儲存桶中的版本控制。

請參閱儲存桶,以取得使用 MinIO 主控台進行儲存桶管理的詳細資訊。

使用 mc version suspend 命令,以在現有的儲存桶上啟用版本控制

mc version suspend ALIAS/BUCKET
  • ALIAS 替換為已設定的 MinIO 部署的別名

  • BUCKET 替換為要停用版本控制的目標 儲存桶

在暫停版本控制時建立的物件會被指派 null 版本 ID。在暫停版本控制時對物件進行的任何變更都會導致覆寫該 null 版本化的物件。MinIO 不會移除或以其他方式變更現有的版本化物件作為暫停版本控制的一部分。用戶端可以繼續與儲存桶中任何現有的物件版本互動。