source: https://www.2cto.com/kf/201709/676912.html
- 啓用或禁用更改塊跟蹤 (Changed Block Tracking, CBT)的兩種方式
啓用或禁用更改塊跟蹤 (Changed Block Tracking, CBT) 的兩種方式
由於VMware提供了方便的數據塊修改追蹤(Changed Block Tracking,CBT)技術,爲虛擬機增量備份提供了基礎,除第一次備份必須完整備份與傳輸整個VM數據外,後續備份都只需通過查詢 CBT 記錄,獲取哪些異動過區塊,然後只備份這些異動區塊即可,既節省了掃描磁盤、判定異動區塊的時間,所需傳輸的數據量也大幅縮小。
默認情況下 CBT 這個功能是禁用的,因爲它會引起一個很小但是可測的性能降低。通常需要在第一個快照之前啓用CBT,通過請求虛擬機配置,就可以判斷修改塊跟蹤是否啓用。
CBT 這個功能不是一開始 VMware 公司就有提供的,所以要使用 CBT 功能需滿足如下先決條件:
ESX/ESXi 主機必須是 4.0 及以上版本; VM 硬件版本必須是 7 或更新;支持所有的虛擬磁盤類型(Thick、thin 及 RDM 虛擬兼容模式),除了 RDM 物理兼容模式;
RDM (Raw Device Mapping)是VMware 服務器虛擬化環境中,用以允許一個虛擬機直接訪問SAN(Storage Area Networking)中的一個存儲LUN(Logical Unit Number)。
RDM也可以叫做裸設備映射(Raw Device Mapping ),虛擬機直接使用存儲中的LUN,而不經過虛擬化層。
虛擬機上沒有可用的快照;
虛擬機必須處於斷電狀態。如果備份時,沒開啓 CBT,會出現下面的錯誤:
■ 更改塊跟蹤配置不正確
■ 磁盤“Hard disk #”的更改塊跟蹤配置不正確
■ 一個或多個虛擬機磁盤的更改塊跟蹤配置不正確
啓用塊修改跟蹤 (CBT)
在虛擬機上啓用塊修改跟蹤 (CBT) ,有兩種方式,第一種是通過 vSphere client 客戶端進行配置;第二種是通過程序設置。
通過 vSphere client 客戶端進行配置 CBT 步驟
要在虛擬機上啓用 CBT,操作步驟如下:
關閉虛擬機電源; 右鍵單擊虛擬機,然後單擊編輯設置; 單擊選項選項卡;阿單擊“高級”區域下方的常規,然後單擊配置參數
此時將打開“配置參數”對話框
單擊添加行,添加 ctkEnabled 參數,然後將其值設置爲 true;
單擊添加行,添加 scsi0:0.ctkEnabled,然後將其值設置爲 true;
注意:scsi0:0.ctkEnabled 中的 scsi0:0 指示 SCSI 設備已分配給添加到虛擬機的硬盤。向每個添加到虛擬機的硬盤提供了一個 SCSI 設備,該設備如 scsi0:0、scsi0:1 或 scsi 1:1 所示。已分別在每個磁盤上啓用(或禁用)CBT。
打開虛擬機電源;
在虛擬機的主目錄中,驗證啓用 CBT 的每個磁盤還具有vmname-ctk.vmdk文件。要禁用 CBT,首先也要關閉虛擬機,同樣打開配置窗口,將所需禁用的 SCSI 磁盤的 ctkEnabled 參數設置爲 false 即可。
通過程序設置啓動 CBT
使用 PropertyCollector 從 VirutalMachine 託管對象中獲取這個屬性域,如果這個域包含 changeTrackingSupported 標誌,就可以進行相關操作。
如果支持的話,可以使用一個簡單的 VirtualMachineConfigSpec 來啓用修改塊跟蹤,並調用 ReconfigVM_Task 方法來重新配置虛擬機:
判斷虛擬機修改跟蹤的狀態,如果是false,激活修改塊跟蹤,並調用ReconfigVM_Task方法來重新配置虛擬機,程序如下:
1
2
3
4
5
6
7
8
9
10
11
|
VirtualMachineConfigSpec
configSpec = new
VirtualMachineConfigSpec(); //
configSpec.changeTracingEnabled = new Boolean(true); if (!configSpec.isChangeTrackingEnabled()){ configSpec.setChangeTrackingEnabled( new
Boolean( true )); } ManagedObjectReference
taskMoRef = serviceConnection.getService().ReconfigVM_Task(targetVM_MoRef,configSpec); public
void
setChangeTrackingEnabled(Boolean value) { this .changeTrackingEnabled
= value; } |