天天看點

VMware 虛拟機的虛拟磁盤程式設計知識點掃盲之一目錄前言VMware 虛拟機檔案類型VMware 虛拟機的快照CBT

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#%E5%89%8D%E8%A8%80">前言</a>

<a href="#vmware-%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B">VMware 虛拟機檔案類型</a>

<a href="#vmware-%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%9A%84%E5%BF%AB%E7%85%A7">VMware 虛拟機的快照</a>

<a href="#quiseced-snapshot">Quiseced Snapshot</a>

<a href="#quiseced-snapshot-%E7%9A%84%E5%88%9B%E5%BB%BA%E8%BF%87%E7%A8%8B">Quiseced Snapshot 的建立過程</a>

<a href="#%E5%88%9B%E5%BB%BA%E5%BF%AB%E7%85%A7">建立快照</a>

<a href="#%E5%88%9B%E5%BB%BA%E5%BF%AB%E7%85%A7%E7%9A%84%E6%89%A7%E8%A1%8C%E8%BF%87%E7%A8%8B%E5%8F%8A%E5%8E%9F%E7%90%86">建立快照的執行過程及原理</a>

<a href="#%E5%88%A0%E9%99%A4%E5%BF%AB%E7%85%A7">删除快照</a>

<a href="#cbt">CBT</a>

<a href="#cbt-%E6%89%A7%E8%A1%8C%E8%BF%87%E7%A8%8B">CBT 執行過程</a>

<a href="#querychangeddiskareas">queryChangedDiskAreas</a>

<a href="#%E5%BC%80%E5%90%AF-cbt">開啟 CBT</a>

該篇博文是 VMware 虛拟磁盤程式設計的基礎,也是編寫 VMware 虛拟機保護與恢複程式的基礎,屬于相關知識點掃盲。

VMware 虛拟機在 EXSi 主控端上的檔案類型:

字尾

描述

.vmx

虛拟機的配置檔案

.vmdk

虛拟機磁盤檔案的中繼資料檔案

flat.vmdk

虛拟機的二進制磁盤檔案,是虛拟機真正磁盤資料檔案

ctk.vmdk

虛拟機磁盤檔案的資料塊變化追蹤檔案,儲存自從上次快照以來的所發生變化的資料塊偏移量資訊

.vmem

虛拟機的記憶體頁面檔案,存放虛拟機運作時的記憶體資料,在虛拟機運作或者崩潰時被建立

.vmss

虛拟機挂起時的狀态資訊檔案

.vmsd

虛拟機快照的中繼資料檔案,儲存了如快照名、UID(Unique Identifier)、磁盤檔案名等資訊。在建立快照前,其 size 為 0byte

.vmsn

虛拟機快照的狀态資訊檔案,用于儲存建立快照時虛拟機的狀态。這個檔案的大小取決于建立快照時是否選擇儲存記憶體的狀态。如果儲存的話,那麼這個檔案會比配置設定給這個虛拟機的記憶體大小還要大幾兆

.vmtx

虛拟機模闆檔案

.nvram

虛拟機 bios 檔案

.vswp

虛拟機交換檔案

.log

虛拟機日志檔案

下面着重記錄 VMware 虛拟機必備的三類檔案:

vm_name.vmdk (配置檔案):儲存的是該虛拟機磁盤檔案的中繼資料(一般包含有兩類最重要的磁盤檔案的基本資訊),EXAMPLE:

vm_name-flat.vmdk (二進制檔案):Extent description 檔案,儲存虛拟機實際的虛拟磁盤資訊。

vm_name-ctk.vmdk (二進制檔案):Change Tracking File 改變追蹤檔案,儲存自從上次快照以來的虛拟機所發生變化的資料塊資訊。

VMware 虛拟機快照有下列三種類型:

崩潰一緻快照(crash-consistent snapshot):是 VMware 虛拟機的預設快照類型,相當于電腦突然斷電時磁盤的狀态,閃存中的資料會丢失。

檔案系統一緻快照(file-system-consistent snapshot): 快照時間點之前,虛拟機的檔案系統被當機,記憶體中的髒資料刷盤,快照完成後,檔案系統解凍。這樣的快照能夠保證檔案系統的一緻性,即記憶體中的資料不會丢失。

應用一緻性(application-consistent snapshot):快找時間點前,虛拟機上運作的應用被當機,記憶體中應用的所有髒資料刷盤,快照完成後,應用被解凍,這樣的快照能夠保證指定應用的資料是完整的,但不會保證檔案系統也是完全一緻的。

後兩種快照類型,也被統稱為 Quiseced Snapshot 。使用 Quiseced Snapshot 需要特别的環境配置,主要的實作方式有兩種:

使用客戶機作業系統内置的應用服務或 VMware 提供的一緻性驅動:

版本較新的 Windows 客戶機提供了 VSS(Volume Shadow Copy Service) 服務,VSS 提供了 Requester-Writer 來滿足有當機需求的應用和檔案系統,在快照時間點前進行當機和記憶體資料落盤并且在快照完成後進行解凍;

對于版本較老的 Windows 客戶機,VMware 提供了 SYNC driver 來支援應用和檔案系統一緻性快照;

而在 Linux 客戶機上,VMware 提供的 vmsync kernel module 僅支援檔案系統一緻性,而不能支援應用一緻性。

腳本程式:如果是非 Windows 客戶機,那麼就需要編寫針對指定應用的腳本,來對應用進行當機或者解凍。

NOTE:上述列舉的 VSS、SYNC driver、vmsync kernel module 和腳本,均要依賴 VMware Tools 來調用,是以即便客戶機作業系統支援上述功能,仍需安裝 VMware Tools 才能完美支援 Quiseced Snapshot。例如針對 VSS,VMware tools 就提供了 VSS support 功能,它是 VMware tools 和 Windows VSS 之間互動的橋梁。要建立 quiseced snapshots,VSS support 就必須被安裝。

使用者發出 quiesced snapshot 建立請求給 vCenter,vCenter 再給虛拟機所在的 ESXi 的 hostd service 發出快照建立請求。

ESXi 上的 Hostd service 将快照建立請求傳遞給客戶機内的 VMware tools。

VMware tools 以 VSS Requester 的身份通知 VSS,VSS 再通知已經被注冊的檔案系統和各應用的 VSS writer 執行當機操作。

一旦完成當機和記憶體資料落盤,VMware tools 就将完成結果通知 hostd service。

Hostd service 執行快照操作。

快照完成後,按照前面的順序再對檔案系統和各應用進行解凍

VMware 虛拟機建立快照之後會生成 3 個檔案:

vm_name-000001.vmdk (配置檔案): 虛拟機快照的中繼資料檔案,記錄了該次快照相關檔案的資訊,其中 000001 表示第一次快照。

vm_name-000001-delta.vmdk (二進制檔案):被稱為快照資料檔案或者 redo-log 檔案(在 VDDK 相關的術語中,子磁盤 child disk、重做日志 redo log、差異鍊 delta link 表示同一個意思),該檔案用于儲存快照時間點後虛拟機所産生的新資料,即快照資料。應用了 in-file delta technology 技術,初始大小為 16MB,會随着虛拟機資料落盤操作的增多,而按照 16MB 的大小進行增長(降低 SCSI reservation 沖突),并且該檔案的大小永遠不會超過 Base Disk File 的大小。

vm_name-000001-ctk.vmdk (二進制檔案):改變追蹤檔案,儲存了自從上次快照以來的虛拟磁盤檔案所發生變化的資料塊偏移量資訊。

VMware 虛拟機的虛拟磁盤程式設計知識點掃盲之一目錄前言VMware 虛拟機檔案類型VMware 虛拟機的快照CBT
VMware 虛拟機的虛拟磁盤程式設計知識點掃盲之一目錄前言VMware 虛拟機檔案類型VMware 虛拟機的快照CBT

從上圖可以看出 VMware 虛拟機快照的特性為:

VMware 虛拟機使用的是鍊式快照。

VMware 虛拟機的 Base Disk File 在建立快照之後,其通路權限為 OR 隻讀模式。

快照時間點之後新落盤的資料會寫入快照資料檔案中。

快照鍊上的任意快照檔案的損壞都會導緻虛拟機無法正常運作。

從建立快照的特性中可以了解,如果希望在删除一個快照的同時保證虛拟機能夠正常運作的話,那麼就需要将該快照資料檔案中的資料合并到父快照資料檔案中,以此來保證虛拟機磁盤資料的完整性。

删除虛拟機快照一般會是以下兩種情況:

待删除的虛拟機快照在快照鍊中:delta vmdk 中的資料會向父快照的 delta vmdk 或基礎虛拟磁盤檔案 base vmdk 合并,然後 delta vmdk 被删除。

待删除的虛拟機快照不在快照鍊中(VMware 支援獨立快照):不需要合并,直接删除快照資料檔案。

删除 VMware 虛拟機快照的特點:

删除快照過程包括兩個異步的操作:1. 從 Snapshot Manager 中将快照删除;2. vmdk 資料合并。如果 1 成功而 2 失敗,就會殘留 delta vmdk 檔案,這樣的話就需要手工進行快照檔案的合并。

删除快照可能會帶來大量的資料寫操作,有時候可能需要删除很長的時間,并且期間虛拟機的性能會受到負面影響。

自從 vSphere 4 Update 2 開始,優化了選擇删除所有虛拟機快照的過程,不再是順序向下一層層的合并,而是各層分别直接合并到 Base vmdk 中。

CBT 是在 vSphere 4.0 版本引入的實作增量備份的功能,增量備份表示僅會備份兩個時間點之間所被改變的差異資料,而這些差異資料往往就是虛拟機的快照資料。ESXi 為每個開啟了 CBT 功能的虛拟機的虛拟磁盤都建立了一個 -ctk.vmdk 檔案。CBT 會對磁盤帶來一些性能損失,是以虛拟機的 CBT 的配置項預設為關閉狀态。

CBT 的原理就是讓 VMKernel 監控自上次快照以來有那些資料塊被改變了,記錄下這些被改變的資料塊的偏移量,進而就能夠擷取這些被改變了的差異的資料。

Step 1:進行全量備份,即備份第一次虛拟機快照的快照資料。

Step 2:通過 <code>vShpere API(VirtualDisk.getBacking.getChangeId)</code> 擷取 Step 1 中所建立的快照對應的的 ChangeId。

Step 3:執行第二次快照。

Step 4:進行量備份,調用 <code>vShpere API(queryChangedDiskAreas)</code>,傳遞 Step 2 中擷取的 ChangeId 和 Step 3 建立的快照的快找對象作為參數,以此獲得自第一次快照時間點(前端點)到第二次快照時間點(後端點)之間發生改變的資料塊,并備份這些資料塊。

CBT 變化快擷取函數 QueryChangedDiskAreas 的原型:

其輸出結果類似:

每項的格式均為<code>(offset,length)</code>,表示一個發生改變的資料塊的偏移量。

NOTE:在沒有虛拟機快照的情況下開啟 CBT 配置項并調用 queryChangedDiskAreas 函數時,changeId 為的實參應為 <code>*</code>。

關閉虛拟機

右擊虛拟機,選擇 「Edit Settings」

點選 「Options」

點選 「Advanced section」 下的 「General」,點選 「Configuration Parameters」,開啟「Configuration Parameters」 視窗後,查找 「ctkEnabled」項,設定為 「true」,并設定每個磁盤的「ctkEnabled=true」。

開啟虛拟機

設定成功後,會在虛拟機檔案目錄下生成 -ctk.vmdk 檔案。

NOTE: VDDK API 能調用 <code>configSpec.changeTrackingEnabled = new Boolean(true)</code> 來動态的設定 CBT 狀态,而不需要關閉虛拟機設定後才能設定。

繼續閱讀