Blob 版本設定

您可以啟用 Blob 儲存體版本設定,以自動維護舊版的物件。 啟用 Blob 版本設定時,您可以存取舊版的 Blob,以在資料遭到修改或刪除時復原資料。

Blob 版本設定是 Blob 資料全面性資料保護策略的一部分。 為了提供 Blob 資料最佳保護,Microsoft 建議啟用下列所有資料保護功能:

  • Blob 版本設定,以自動維護舊版的 Blob。 啟用 Blob 版本設定時,您可以還原舊版的 Blob 來復原資料 (如果資料遭到不當修改或刪除)。 若要了解如何啟用 Blob 版本設定,請參閱啟用和管理 Blob 版本設定
  • 容器虛刪除,以還原已遭到刪除的容器。 若要了解如何啟用容器虛刪除,請參閱啟用及管理容器虛刪除
  • Blob 虛刪除,以還原已刪除的 Blob、快照集或版本。 若要了解如何啟用 Blob 虛刪除,請參閱啟用及管理 Blob 虛刪除

若要深入了解 Microsoft 的資料保護建議,請參閱資料保護概觀

警告

啟用儲存體帳戶的 Blob 版本設定之後,該帳戶中 Blob 的每個寫入作業都會導致建立新版本。 基於這個原因,啟用 Blob 版本設定可能會導致額外成本。 若要將成本降到最低,請使用生命週期管理原則來自動刪除舊版本。 如需生命週期管理的詳細資訊,請參閱藉由自動化 Azure Blob 儲存體存取層將成本最佳化

Blob 版本設定的運作方式

版本會在指定的時間點擷取 Blob 的狀態。 每個版本都會以版本識別碼來識別。 為儲存體帳戶啟用 Blob 版本設定時,Azure 儲存體會在 Blob 第一次建立時,以及 Blob 每次後續修改時,自動建立具有唯一識別碼的新版本。

版本識別碼可以識別目前的版本或舊版。 Blob 一次只能有一個目前的版本。

當您建立新的 Blob 時,只會有一個版本存在,而該版本即為目前的版本。 當您修改現有的 Blob 時,目前的版本就會變成舊版。 系統會建立新版本來擷取更新的狀態,而這個新版本就是目前的版本。 當您刪除 blob 時,該 blob 的目前版本就會變成舊版本,而不再是目前的版本。 任何舊版的 Blob 都會保存。

下圖顯示如何在寫入作業上建立版本,以及舊版如何升級為目前的版本:

Diagram showing how blob versioning works

Blob 版本是不可變的。 您無法修改現有 Blob 版本的內容或中繼資料。

每個 Blob 若有許多版本,可能會增加 Blob 列出作業的延遲。 Microsoft 建議讓每個 Blob 的版本數保持在 1000 個以下。 您可以使用生命週期管理自動刪除舊版。 如需生命週期管理的詳細資訊,請參閱藉由自動化 Azure Blob 儲存體存取層將成本最佳化

Blob 版本設定適用於標準一般用途 v2、進階區塊 Blob,和舊版 Blob 儲存體帳戶。 目前不支援將已啟用階層命名空間的儲存體帳戶搭配用於 Azure Data Lake Storage Gen2。

2019-10-10 版和更高版本的 Azure 儲存體 REST API 支援 Blob 版本設定。

重要

Blob 版本設定無法協助您在意外刪除儲存體帳戶或容器後復原。 若要防止意外刪除儲存體帳戶,請設定儲存體帳戶資源的鎖定。 如需關於鎖定儲存體帳戶的詳細資訊,請參閱將 Azure Resource Manager 鎖定套用至儲存體帳戶

版本識別碼

每個 Blob 版本皆由唯一的版本識別碼來識別。 版本識別碼的值是 Blob 更新時的時間戳記。 版本識別碼會在建立版本時指派。

您可以藉由提供 Blob 的版本識別碼,對特定版本的 Blob 執行讀取或刪除作業。 如果您省略版本識別碼,則會對目前的版本執行作業。

當您呼叫寫入作業以建立或修改 Blob 時,Azure 儲存體會在回應中傳回 x-ms-version-id 標頭。 此標頭包含寫入作業建立之 Blob 目前的版本所具備的版本識別碼。

版本識別碼在版本的存留期內會保持不變。

寫入作業的版本設定

Blob 版本設定開啟時,對 Blob 的每個寫入作業都會建立新的版本。 寫入作業包括放置 Blob放置區塊清單複製 Blob設定 Blob 中繼資料

如果寫入作業建立了新 Blob,產生的 Blob 即為 Blob 的目前版本。 如果寫入作業修改了現有的 Blob,目前的版本就會變成舊版,並建立新的目前版本來擷取更新的 Blob。

下圖顯示寫入作業對 Blob 版本有何影響。 為了簡單起見,本文中的圖表會以簡單的整數值顯示版本識別碼。 實際的版本識別碼是時間戳記。 目前的版本會以藍色顯示,舊版則以灰色顯示。

Diagram showing how write operations affect versioned blobs.

注意

在為儲存體帳戶啟用版本設定之前建立的 Blob,不會有版本識別碼。 修改該 Blob 時,修改過的 Blob 會變成目前的版本,此外也會建立一個版本,用以儲存 Blob 在更新前的狀態。 系統會依據建立時間為版本指派其版本識別碼。

為儲存體帳戶啟用 Blob 版本設定時,區塊 Blob 的所有寫入作業都會觸發新版本的建立,但放置區塊作業除外。

對於分頁 Blob 和附加 Blob,只有一小部分的寫入作業會觸發版本建立。 這些作業包括:

下列作業不會觸發新版本的建立。 若要從這些作業中擷取變更,請手動建立快照集:

Blob 的所有版本必須屬於相同的 Blob 類型。 如果 Blob 有舊版,則無法將一個類型的 Blob 覆寫為另一個類型,除非您先刪除該 Blob 及其所有版本。

刪除作業的版本設定

當您在未指定版本識別碼的情況下呼叫刪除 Blob 作業時,目前的版本將會變成舊版,而不再有目前的版本。 所有現有的舊版 Blob 都會保留。

下圖顯示刪除作業對於已設定版本的 Blob 有何影響:

Diagram showing deletion of versioned blob.

若要刪除特定版本的 Blob,請在刪除作業上提供該版本的識別碼。 如果儲存體帳戶也啟用了 Blob 虛刪除,則會在系統中維護版本,直到虛刪除保留期間結束為止。

將新資料寫入至 Blob,會為 Blob 建立新的目前版本。 任何現有版本均不受影響,如下圖所示。

Diagram showing re-creation of versioned blob after deletion.

存取層

您可以呼叫設定 Blob 階層作業,以將任何版本的區塊 Blob (包括目前的版本) 移至不同的 Blob 存取層。 您可以將較舊版本的 Blob 移至非經常性存取層或封存層,以享有較低的容量定價。 如需詳細資訊,請參閱 Blob 資料的經常性存取層、非經常性存取層、極非經常性存取層和封存存取層

若要自動執行將區塊 Blob 移至適當階層的程序,請使用 Blob 生命週期管理。 如需生命週期管理的詳細資訊,請參閱管理 Azure Blob 儲存體生命週期

啟用或停用 Blob 版本設定

若要了解如何啟用或停用 Blob 版本設定,請參閱啟用和管理 Blob 版本設定

停用 Blob 版本設定並不會刪除現有的 Blob、版本或快照集。 當您關閉 Blob 版本設定時,您的儲存體帳戶中任何現有的版本仍可供存取。 後續不會建立任何新版本。

版本設定停用後,若修改目前的版本,將會建立非版本的 Blob。 所有對 Blob 的後續更新都會覆寫其資料,而不會儲存先前的狀態。 所有現有的版本都會保存為舊版。

版本設定停用後,您可以使用版本識別碼來讀取或刪除版本。 版本設定停用後,您也可以列出 Blob 的版本。

物件複寫依賴 Blob 版本控制。 在可以停用 Blob 版本設定之前,您必須先刪除帳戶上的任何物件複寫原則。 如需物件複寫的詳細資訊,請參閱區塊 Blob 的物件複寫

下圖顯示在版本設定停用後修改 Blob,將建立未設定版本的 Blob。 任何與 Blob 相關聯的現有版本都會保存。

Diagram showing that modification of a current version after versioning is disabled creates a blob that isn't a version.

Blob 版本設定和虛刪除

Blob 版本設定和 Blob 虛刪除是儲存體帳戶建議資料保護設定的一部分。 如需 Microsoft 資料保護建議的詳細資訊,請參閱本文中的建議資料保護設定,以及資料保護概觀

覆寫 Blob

如果儲存體帳戶同時啟用 Blob 版本設定和 Blob 虛刪除,則覆寫 Blob 會自動建立新的版本。 新版本不會遭到虛刪除,且不會在虛刪除保留期限到期時移除。 不會建立任何虛刪除的快照集。

刪除 Blob 或版本

如果同時為儲存體帳戶啟用了版本設定和虛刪除,當您刪除 Blob 時,該 Blob 目前的版本就會成為舊版。 不會建立新的版本,而且不會建立虛刪除的快照集。 虛刪除保留期間對於已刪除的 Blob 沒有效用。

虛刪除可為 Blob 版本的刪除提供額外的保護。 當您刪除舊版的 Blob 時,該版本會被虛刪除。 虛刪除的版本會保留到虛刪除保留期間結束為止,屆時就會永久刪除該版本。

若要刪除舊版的 Blob,請呼叫刪除 Blob 作業,並指定版本識別碼。

下圖顯示在刪除 Blob 或 Blob 版本時,會發生什麼事。

Diagram showing deletion of a version with soft delete enabled.

還原虛刪除的版本

您可以在虛刪除保留期間,使用取消刪除 Blob 作業來還原虛刪除的版本。 取消刪除 blob 作業一律會還原所有遭到虛刪除的 blob 版本。 您無法只還原單一虛刪除版本。

使用取消刪除 Blob 作業來還原虛刪除的版本,並不會將任何版本升級為目前的版本。 若要還原目前的版本,請先還原所有虛刪除的版本,然後使用複製 Blob 作業將舊版複製到新的目前版本。

下圖顯示如何使用取消刪除 Blob 作業來還原虛刪除的 Blob 版本,以及如何使用複製 Blob 作業來還原 Blob 的目前版本。

Diagram showing how to restore soft-deleted versions.

虛刪除保留期間期滿之後,即會永久刪除任何虛刪除的 Blob 版本。

Blob 版本設定和 Blob 快照集

Blob 快照集是在特定時間點建立之 Blob 的唯讀複本。 Blob 快照集和 Blob 版本很類似,但快照集是由您手動建立或由應用程式建立的,而 Blob 版本則是在您的儲存體帳戶啟用 Blob 版本設定時自動建立於寫入或刪除作業上的。

重要

Microsoft 建議,在啟用 Blob 版本設定後,也應更新您的應用程式,以停止建立區塊 Blob 的快照集。 如果您的儲存體帳戶已啟用版本設定,則會依版本來擷取和保留所有區塊 Blob 更新和刪除。 如果啟用 Blob 版本設定,建立快照集並不會為您的區塊 Blob 資料提供任何額外的保護,而且可能會提高成本和應用程式的複雜度。

在啟用版本設定時建立 Blob 的快照集

您可以針對也設定了版本的 Blob 建立快照集,但不建議這麼做。 如果您在啟用版本設定時無法更新應用程式,以停止建立 Blob 的快照集,則應用程式可以同時支援快照集和版本。

當您為已設定版本的 Blob 建立快照集時,將會在建立快照集的同時建立新版本。 建立快照集時,也會建立新的目前版本。

下圖顯示在您為已設定版本的 Blob 建立快照集時,會發生什麼事。 在下圖中,版本識別碼為 2 和 3 的 Blob 版本與快照集包含相同的資料。

Diagram showing snapshots of a versioned blob.

授與 Blob 版本的操作權限

您可以使用下列其中一種方法來授與 Blob 版本的存取權:

  • 藉由使用 Azure 角色型存取控制 (Azure RBAC) 將權限授與 Microsoft Entra 安全性主體。 Microsoft 建議使用 Microsoft Entra ID,以提高安全性和使用的方便性。 如需搭配使用 Microsoft Entra ID 與 Blob 作業的詳細資訊,請參閱授權存取 Azure 儲存體中的資料
  • 使用共用存取簽章 (SAS) 來委派 Blob 版本的存取權。 為已簽署的資源類型 bv 指定版本識別碼 (代表 Blob 版本),以建立特定版本之作業的 SAS 權杖。 如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS) 授與 Azure 儲存體資源的有限存取權
  • 使用帳戶存取金鑰,授權對具有共用金鑰的 Blob 版本進行作業。 如需詳細資訊,請參閱使用共用金鑰進行授權

Blob 版本設定旨在保護您的資料免於遭受意外或惡意刪除。 若要增強保護,刪除 Blob 版本時必須要有特殊權限。 下列各節說明刪除 Blob 版本所需的權限。

刪除 Blob 版本的 Azure RBAC 動作

下表顯示哪些 Azure RBAC 動作支援刪除 Blob 或 Blob 版本。

描述 Blob 服務作業 需要 Azure RBAC 資料動作 Azure 內建角色支援
刪除目前的版本 刪除 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete 儲存體 Blob 資料參與者
刪除舊版 刪除 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action 儲存體 Blob 資料擁有者

共用存取簽章 (SAS) 參數

Blob 版本已簽署的資源是 bv。 如需詳細資訊,請參閱建立服務 SAS建立使用者委派 SAS

下表顯示在 SAS 上刪除 Blob 版本所需的權限。

權限 URI 符號 允許的作業
刪除 x 刪除 Blob 版本。

定價和帳務

啟用 Blob 版本設定可能會對您的帳戶產生額外的資料儲存體費用。 設計您的應用程式時,請務必留意產生這些費用的可能方式,以便將成本降至最低。

Blob 版本 (例如 Blob 快照集) 的計費採用與作用中資料相同的費率。 版本的計費方式取決於您是否已明確設定目前或舊版 Blob (或快照集) 的階層。 如需 Blob 階層的詳細資訊,請參閱 Blob 資料的經常性存取層、非經常性存取層、極非經常性存取層和封存存取層

如果您未變更 Blob 或版本的階層,則會針對該 Blob、其版本,及其可能擁有的任何快照集中獨特的資料區塊進行計費。 如需詳細資訊,請參閱未明確設定 Blob 階層時的計費方式

如果您已變更 Blob 或版本的階層,則會向您收取整個物件的費用,而不考量 Blob 和版本最終是否又會在相同的階層中。 如需詳細資訊,請參閱已明確設定 Blob 階層時的計費方式

注意

對經常覆寫的資料啟用版本設定,可能會導致儲存體容量費用增加,並在列出作業期間增加延遲。 若要減輕這些問題,請將經常覆寫的資料儲存在停用版本設定的個別儲存體帳戶中。

若要進一步了解 Blob 快照集的計費詳細資料,請參閱 Blob 快照集

未明確設定 Blob 階層時的計費方式

如果您未明確為任何版本的 Blob 設定 Blob 階層,則會針對所有版本及其可能擁有的任何快照集中的獨特區塊或頁面進行計費。 跨 Blob 版本共用的資料只會收費一次。 Blob 更新時,新的目前版本中的資料會與儲存在舊版中的資料相異,而計費會以每個區塊或頁面的獨特資料為準。

當您取代區塊 Blob 內的某個區塊時,後續即會將該區塊視為唯一區塊進行收費。 即使該區塊的區塊識別碼和資料與其在舊版中的相同,也是如此。 再次認可該區塊之後,該區塊就會與其在舊版中的對應項目分離,而您將需支付其資料的費用。 這同樣適用分頁 Blob 中以相同資料更新的頁面。

Blob 儲存體沒有方法可判斷兩個區塊是否包含相同資料。 已上傳且認可的每個區塊都會被視為唯一,即使它具有相同資料和相同的區塊識別碼也一樣。 由於獨特的區塊會產生費用,請務必記住,在啟用版本設定的情況下更新 Blob,將會產生額外的獨特區塊和額外的費用。

Blob 版本設定啟用時,請對區塊 Blob 呼叫更新作業,使其盡可能更新較少的區塊。 允許對區塊進行精細控制的寫入作業,是放置區塊放置區塊清單。 而放置 Blob 作業則會取代 Blob 的整體內容,因此可能會產生額外的費用。

下列案例示範在未明確設定 Blob 階層時,區塊 Blob 及其版本如何產生費用。

實例 1

在案例 1 中,Blob 有舊版。 Blob 自版本建立以來未曾更新,因此只有獨特的區塊 1、2 和 3 會產生費用。

Diagram 1 showing billing for unique blocks in base blob and previous version.

案例 2

在案例 2 中,Blob 中的一個區塊 (圖中的區塊 3) 已更新。 雖然更新的區塊包含相同的資料和相同的識別碼,但還是與舊版中的區塊 3 不同。 因此,此帳戶必須支付四個區塊的費用。

Diagram 2 showing billing for unique blocks in base blob and previous version.

案例 3

在案例 3 中,Blob 已更新,但版本未更新。 區塊 3 已由目前 Blob 中的區塊 4 取代,但舊版仍會反映區塊 3。 因此,此帳戶必須支付四個區塊的費用。

Diagram 3 showing billing for unique blocks in base blob and previous version.

案例 4

在案例 4 中,目前的版本已完全更新,且未包含其任何原始區塊。 因此,八個獨特區塊全都會對此帳戶產生費用 - 目前的版本中四個,兩個舊版中共四個。 如果您使用放置 Blob 作業對 Blob 進行寫入,就會發生這種情況,因為會取代 Blob 的整體內容。

Diagram 4 showing billing for unique blocks in base blob and previous version.

明確設定 Blob 階層時的計費方式

如果您已明確設定 Blob 或版本 (或快照集) 的 Blob 階層,則會針對新階層中所含物件的完整內容長度向您收取,而不考量是否與原始階層中的物件共用區塊。 您也必須為原始階層中最舊版本的完整內容長度付費。 任何其他保留在原始階層中的舊版或快照集,會針對其可能共用的獨特區塊進行計費,如未明確設定 Blob 階層時的計費方式所說明。

將 Blob 移至新的階層

下表說明 Blob 或版本移至新階層時的計費行為。

設定了 Blob 階層時... 您需為下列項目付費...
對版本明確設定 (無論是目前的版本還是舊版) 該版本的完整內容長度。 未明確設定階層的版本只會針對獨特的區塊計費。1
對封存設定 所有版本和快照集的完整內容長度。1

1如果有尚未從原始階層移動的其他舊版或快照集,這些版本或快照集將會根據其包含的獨特區塊數目進行計費,如未明確設定 Blob 階層時的計費方式所說明。

下圖說明當已設定版本的 Blob 移至不同的階層時,會如何對物件計費。

Diagram showing how objects are billed when a versioned blob is explicitly tiered.

明確設定 Blob、版本或快照集的階層後,作業無法復原。 如果您將 Blob 移至新階層,然後再將其移回原始階層,則需為物件的完整內容長度付費,即使該物件與原始階層中的其他物件共用區塊亦然。

明確設定 Blob、版本或快照集階層的作業包括:

在虛刪除啟用時刪除 Blob

Blob 虛刪除啟用時,所有虛刪除的實體都會以完整的內容長度計費。 如果您刪除或覆寫已明確設定階層的目前版本,則任何舊版的虛刪除 Blob 都會以完整內容長度計費。 如需 Blob 版本設定和虛刪除如何搭配運作的詳細資訊,請參閱 Blob 版本設定和虛刪除

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

使用 Data Lake Storage Gen2 API 上傳的 Blob 不支援版本設定。

另請參閱