1. 程式人生 > >VMware 虛擬化程式設計(9) — VMware 虛擬機器的快照

VMware 虛擬化程式設計(9) — VMware 虛擬機器的快照

目錄

前文列表

VMware 虛擬機器的快照

在備份和恢復應用程式中,不管是全量備份,還是增量備份,都依賴於 vSphere 中的快照。要備份虛擬機器,首先需要建立一個虛擬機器的快照。快照建立成功之後,就需要找到與快照相關的虛擬磁碟。虛擬磁碟的快照檔案以虛擬磁碟的基本名稱命名,並且在名稱後面追加了唯一的序列字串,以保證 VMDK 檔案的唯一性。如:vdisk-000032.vmdk,其中 vdisk 是虛擬磁碟的基本名稱。在物理檔案系統的快照磁碟檔案型別如下:

  • vm_name-000001.vmdk (配置檔案): 虛擬機器快照的元資料檔案,記錄了該次快照相關檔案的資訊,其中 000001 表示第一次快照。
  • vm_name-000001-delta.vmdk (二進位制檔案):稱為快照資料檔案或者重做日誌檔案(redo-log)也被稱為子磁碟檔案,該檔案用於儲存快照時間點後虛擬機器所產生的更改資料(即快照資料)。應用了 in-file delta technology 技術,初始大小為 16MB,會隨著虛擬機器資料落盤操作的增多,而按照 16MB 的大小進行增長(降低 SCSI reservation 衝突),並且該檔案的大小永遠不會超過 Base Disk File 的大小。
  • vm_name-000001-ctk.vmdk (二進位制檔案):改變追蹤檔案,儲存了自從上次快照以來的虛擬磁碟檔案所發生變化的資料塊偏移量資訊。需要開啟 CBT 功能才會生成該檔案。

NOTE:在 vSphere API 的定義中,使用 Datastore 唯一標識作為字首,結合虛擬磁碟相對於 Datastore 根目錄的路徑,以此來標識一塊虛擬磁碟,如:[storageN] VmName/vdisk-NNNNNN.vmdk

要取得虛擬磁碟機器快照的名稱和相關配置資訊(capacityInKB、changeID 等),可以使用 PropertyCollector 來獲取 VirtualMachine Managed Object 的 config.hardware.device 屬性。在其中找到 VirtualDisk 項的 BackingInfo 屬性,那就是虛擬磁碟的配置資訊,有以下型別:

  • VirtualDiskFlatVer1BackingInfo
  • VirutalDiskFlagVer2BackingInfo
  • VirtualDiskRawDiskMappingVer1BackingInfo
  • VirtualDiskSparseVer1BackingInfo
  • VirtualDiskSparseVer2BackingInfo

NOTE:VirtualDiskRawDiskMappingVer1BackingInfo 型別的虛擬磁碟是無法建立快照的,所以也無法備份這一型別的虛擬磁碟。

快照的執行過程

STEP 1
這裡寫圖片描述

STEP 2
這裡寫圖片描述

STEP 3
這裡寫圖片描述

可以看出 VMware 虛擬機器快照的特性有:

  • VMware 虛擬機器使用的是鏈式快照。
  • VMware 虛擬機器快照的 Parent VMDK File 的訪問許可權為 OR 只讀。
  • 快照時間點之後新落盤的資料只會被寫入到 Child VMDK File 快照資料檔案中。
  • 快照鏈上的任意快照檔案的損壞都會導致虛擬機器無法正常執行。

刪除快照

從建立快照的特性中可以理解,如果希望在刪除一個快照的同時保證虛擬機器能夠正常執行的話,那麼就需要將該快照資料檔案中的資料合併到 Parent VMDK File 中,以此來保證虛擬機器磁碟資料的完整性。

刪除虛擬機器快照一般會是以下兩種情況:

  • 待刪除的虛擬機器快照在快照鏈中: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 中。

快照型別

  • 崩潰一致快照 (Crash-Consistent Snapshot):是 VMware 虛擬機器的預設快照型別,相當於電腦突然斷電時磁碟的狀態,快閃記憶體中的資料會丟失掉。

  • 檔案系統一致快照 (File-System-Consistent Snapshot):快照時間點之前,虛擬機器的檔案系統會被凍結,記憶體中的髒資料刷盤,快照完成之後,檔案系統再解凍。這樣的快照能夠保證檔案系統的一致性,即記憶體中的資料不會丟失。

  • 應用一致性 (Application-Consistent Snapshot):快照時間點前,虛擬機器上執行的應用程式被凍結,記憶體中應用程式相關的所有髒資料刷盤,快照完成之後,應用程式再被解凍,這樣的快照能夠保證指定應用程式的資料是完整的,但不會保證檔案系統也是完全一致的。

其中檔案系統一致快照和應用一致性也統稱為 Quiseced Snapshot。

Quiseced Snapshot

使用 Quiseced Snapshot 需要特殊的環境配置,主要的實現方式有兩種:

  • 使用 GuestOS 內建的應用服務或 VMware 提供的一致性驅動

    • 版本較新的 Windows GuestOS 提供了 VSS(Volume Shadow Copy Service) 服務,VSS 的 Requester-Writer 能夠對應用程式和檔案系統進行凍結和解凍操作。
    • 對於版本較老的 Windows GuestOS,VMware 也提供了 SYNC driver 資料一致性驅動來支援應用程式和檔案系統一致性快照;
    • 而 Linux Guest,VMware 提供了僅支援持檔案系統一致性的 vmsync kernel module。
  • 使用指令碼程式:如果是非 Windows GuestOS,那麼就需要編寫針對指定應用程式的指令碼來對其進行凍結和解凍的操作。

NOTE:上述列舉的 VSS、SYNC driver、vmsync kernel module 和指令碼,均要依賴 VMware Tools 來呼叫,所以即便客戶機作業系統支援上述功能,仍需安裝 VMware Tools 才能完美支援 Quiseced Snapshot。例如針對 VSS,VMware tools 就提供了 VSS support 功能,它是 VMware tools 和 Windows VSS 之間互動的橋樑。

Quiseced Snapshot 的建立過程
1. 使用者發出 Quiesced Snapshot 建立請求給 vCenter,vCenter 再給虛擬機器所在的 ESXi 的 Hostd Service 發出快照建立請求。
2. ESXi 上的 Hostd Service 將快照建立請求傳遞給 虛擬機器 GuestOS 內的 VMware tools。
3. VMware tools 以 VSS Requester 的身份通知 VSS,VSS 再通知已經被註冊的檔案系統和各應用的 VSS writer 執行凍結操作。
4. 一旦完成凍結和記憶體資料落盤,VMware tools 就將完成結果通知 Hostd Service。
5. Hostd Service 執行快照操作。
6. 快照完成後,按照前面的順序再對檔案系統和各應用進行解凍。