Azure 儲存體提供三種類型的 Blob 儲存體:區塊 Blob、附加 Blob 和分頁 Blob。 區塊 blob 是由區塊所組成,適合用來儲存文字或二進位檔案,以及有效率地上傳大型檔案。 附加 Blob 也由區塊組成,但它們針對附加作業進行最佳化,非常適合記錄情境。 頁面 Blob 由 512 位元組的頁面所組成,總大小上限可達 8 TB,專為頻繁的隨機讀取/寫入作業所設計。 頁面 Blob 是 Azure IaaS 磁碟的基礎。 本文著重於說明分頁 Blob 的功能和優點。
分頁 Blob 是由 512 位元組頁面組成的集合,能夠對任意位元組範圍進行讀取/寫入。 因此,分頁 Blob 適合用於儲存索引式和稀疏資料結構,例如虛擬機器和資料庫的 OS 和資料磁碟。 例如,Azure SQL DB 會使用分頁 Blob 作為其資料庫的底層持久性儲存體。 此外,分頁 Blob 也常用於以範圍為基礎進行更新的檔案。
Azure 分頁 Blob 的主要功能包括其 REST 介面、基礎儲存體的持久性,以及能順暢移轉至 Azure 的能力。 下一節將更深入討論這些功能。 此外,Azure 分頁 Blob 目前支援兩種類型的儲存體:進階儲存體和標準儲存體。 進階儲存體是專為需要穩定高效能和低延遲的工作負載設計,因此進階分頁 Blob 非常適合高效能儲存體情境。 標準儲存體帳戶對於執行較不注重延遲的工作負載而言,較符合成本效益。
限制
分頁 Blob 只能使用經常性存取 存取層;不能使用非經常性存取或封存層。 如需存取層的詳細資訊,請參閱 Blob 資料的經常性存取層、非經常性存取層與封存存取層。
範例使用案例
以下列出幾個頁面 Blob 的使用情境,先從 Azure IaaS 磁碟談起。 Azure 分頁 Blob 是 Azure IaaS 虛擬磁碟平台的基礎。 Azure OS 和資料磁碟皆會以虛擬磁碟的形式實作,其中資料會永久保存在 Azure 儲存體平台中,然後傳遞到虛擬機器以獲得最大效能。 Azure 磁碟會以 Hyper-V VHD 格式持續保存,並以 分頁 Blob 的形式儲存在 Azure 儲存體中。 除了針對 Azure IaaS VM 使用虛擬磁碟以外,分頁 Blob 也能提供 PaaS 和 DBaaS 案例 (例如 Azure SQL DB 服務),這些案例目前將分頁 Blob 用於儲存 SQL 資料,來為資料庫提供快速的隨機讀取-寫入作業。 另一個範例是如果您具有針對協力視訊編輯應用程式之共用媒體存取的 PaaS 服務,分頁 Blob 將可提供針對媒體中隨機位置的快速存取。 它也可讓多個使用者快速且有效率地編輯與合併相同的媒體。
Microsoft 自家服務(例如 Azure Site Recovery、Azure 備份)以及許多第三方開發人員,都已透過分頁 Blob 的 REST 介面實現領先業界的創新。 以下是一些實作於 Azure 上的獨特案例:
- 應用程式導向的增量快照管理:應用程式可以利用頁面 Blob 快照和 REST API 來儲存應用程式檢查點,而無須承擔高成本的資料複製負擔。 Azure 儲存體支援頁面 Blob 的本機快照,不需要複製整個 Blob。 這些公開快照 API 也可讓您存取及複製快照間的差異。
- 將應用程式和資料從內部部署即時移轉至雲端:複製內部部署資料,並在內部部署 VM 持續執行的情況下,使用 REST API 直接寫入至 Azure 分頁 Blob。 一旦目標完成同步後,您便可以使用該資料快速容錯移轉到 Azure VM。 透過這個方式,您可在停機時間最短的情況下,將 VM 與虛擬磁碟從內部部署移轉至雲端,因為資料移轉是在背景中發生,使得您可以繼續使用 VM,且容錯移轉所需的停機時間會很短 (幾分鐘便能完成)。
- SAS 型共用存取,可實現如多個讀取器及單一寫入器並支援並行控制的案例。
非受控磁碟即將淘汰,如需詳細資訊,請參閱在 2025 年 9 月 30 日前移轉 Azure 非受控磁碟 (部分機器翻譯)。
定價
頁面 Blob 提供的兩種儲存體類型各有其定價模式。 進階分頁 Blob 會遵循受控磁片的定價模式,而標準分頁 Blob 會依所使用的大小和每筆交易計費。 如需更多資訊,請參閱 Azure 分頁 Blob 定價頁面。
分頁 Blob 功能
REST API
要開始使用頁面塊來開發,請參見 「使用頁面塊開發」。 例如,請參閱如何使用適用於 .NET 的 Storage Client Library 來存取頁面 Blob。
下圖說明帳戶、容器和分頁 Blob 之間的整體關聯性。
建立指定大小的空白分頁 Blob
首先,取得容器的參考。 若要建立頁面 Blob,請呼叫 GetPageBlobClient 方法,然後呼叫 PageBlobClient.Create 方法。 傳入要建立之 Blob 的大小上限。 該大小必須是 512 個位元組的倍數。
long OneGigabyteAsBytes = 1024 * 1024 * 1024;
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
var blobContainerClient =
blobServiceClient.GetBlobContainerClient(Constants.containerName);
var pageBlobClient = blobContainerClient.GetPageBlobClient("0s4.vhd");
pageBlobClient.Create(16 * OneGigabyteAsBytes);
調整分頁 Blob 大小
若要在建立之後重新調整分頁 Blob 的大小,請使用調整大小方法。 要求的大小應該是 512 位元組的倍數。
pageBlobClient.Resize(32 * OneGigabyteAsBytes);
將頁面寫入分頁 Blob
若要寫入頁面,請使用 PageBlobClient. UploadPages 方法。
pageBlobClient.UploadPages(dataStream, startingOffset);
這可讓您寫入最多 4MB 的連續分頁集合。 若要寫入的位移必須從 512 位元組邊界開始 (startingOffset % 512 == 0),且在 512 位元組邊界減 1 的位置結束。
一旦對一組連續頁面的寫入要求在 Blob 服務中成功,並已完成複寫以確保持久性和復原能力,該寫入即視為已提交,並將成功回傳給用戶端。
下圖顯示兩種獨立的寫入操作:
- 從位移 0 開始、長度為 1024 位元組的寫入作業
- 從位移 4096 開始、長度為 1024 的寫入作業
從分頁 Blob 讀取頁面
若要讀取頁面 blob,請使用 PageBlobClient.Download 方法來讀取頁面 blob 中某個位元組範圍。
var pageBlob = pageBlobClient.Download(new HttpRange(bufferOffset, rangeSize));
這可讓您從 Blob 中的任何位移開始,下載完整的 Blob 或位元組範圍。 讀取時,偏移不一定要從 512 的倍數開始。 從 NUL 分頁讀取位元組時,服務會傳回零個位元組。
下圖顯示位移為 256 且範圍大小為 4352 的讀取作業。 傳回的資料是以橙色醒目提示。 對於 NUL 頁面,會傳回 0。
如果您有一個僅部分填入資料的 Blob,您可能會想要僅下載包含有效資料的頁面區域,以避免為零位元組的 Egress 支付費用,並減少下載延遲。
若要判斷有哪些分頁是由資料所支援,請使用 PageBlobClient.GetPageRanges。 然後,您可以對傳回的範圍進行列舉,並下載每個範圍中的資料。
IEnumerable<HttpRange> pageRanges = pageBlobClient.GetPageRanges().Value.PageRanges;
foreach (var range in pageRanges)
{
var pageBlob = pageBlobClient.Download(range);
}
租用分頁 Blob
租賃 Blob 作業會針對寫入和刪除作業,在 Blob 上建立鎖定並加以管理。 這項作業在有多個用戶端存取分頁 Blob 的案例中很有用,因為它可確保一次僅有一個用戶端可以寫入 Blob。 例如,Azure 磁碟會運用此租用機制來確保磁碟僅受單一 VM 管理。 鎖定持續時間的範圍是 15 到 60 秒,也可以設為無限。 如需詳細資料,請參閱這裡的文件。
除了豐富的 REST API 之外,分頁 Blob 也提供共用存取、持久性和增強的安全性。 我們會在接下來的段落中更詳細說明這些好處。
並行存取
分頁 Blob REST API 和其租賃機制允許應用程式從多個用戶端存取分頁 Blob。 例如,假設您要建置可與多個使用者共用儲存體物件的分散式雲端服務。 這可能是能為數個使用者提供大型映像集合的 Web 應用程式。 實作此項目的其中一個選項,是使用搭配已連接磁碟的 VM。 此作法的缺點包括:(i) 磁碟僅能連接至單一 VM 的約束,限制了延展性及彈性,並使風險提升。 如果 VM 或於 VM 上執行的服務發生問題,則因為租用的緣故,在租用到期或者中斷之前,映像會無法存取;此外,另一個缺點則是 (ii) 因擁有 IaaS VM 而產生的額外成本。
另一個選項是透過 Azure 儲存體 REST API 直接使用分頁 Blob。 此選項不需要高成本的 IaaS VM、提供從多個用戶端進行直接存取的完整彈性、透過消除連接/卸除磁碟的需求來簡化傳統部署模型,並消除 VM 上發生問題的風險。 另外,它也能針對隨機讀取/寫入作業,提供和磁碟相同的效能等級
持久性和高可用性
標準與高級儲存皆為耐用儲存,頁面 blob 資料始終被複製,以確保耐用與高可用性。 持續為 IaaS 磁碟和分頁 Blob 提供企業級耐用性,並以領先業界的零百分比年化失效率。
如需 Azure 儲存體對標準和進階儲存體帳戶所提供的備援詳細資訊,請參閱 Azure 儲存體備援,尤其是以下兩節:
無縫移轉至 Azure
針對有意自行實作自訂備份解決方案的客戶和開發人員,Azure 也提供僅包含差異資料的增量快照。 此功能可以避免由初始完整複製所帶來的成本,並能大幅降低備份成本。 它還能有效地讀取及複製差異資料,此強大功能可為開發人員促成更多的創新,進而在 Azure 上帶來業界最佳的備份與災害復原 (DR) 體驗。 您可以使用 Blob 快照集,搭配 取得頁面範圍 API 和 增量複製 Blob API,為您在 Azure 上的 VM 設定自己的備份或 DR 解決方案,以便輕鬆複製用於 DR 的增量資料。
此外,許多企業的重要工作負載已在內部部署資料中心中運行。 若要將工作負載移轉至雲端,其中一個主要考量就是複製資料所需的停機時間量,還有轉換後發生未預期問題的風險。 在許多情況下,停機時間可能會成為遷移到雲端的一大阻礙。 藉由使用分頁 Blob REST API,Azure 得以在對關鍵工作負載產生最小影響的情況下完成雲端移轉,來解決此問題。
關於如何擷取快照以及如何從快照還原頁面 blob 的範例,請參見「 使用增量快照設定備份程序」。