啓用或禁用更改塊跟蹤 (Changed Block Tracking, CBT)的兩種方式

source: https://www.2cto.com/kf/201709/676912.html

啓用或禁用更改塊跟蹤 (Changed Block Tracking, CBT)的兩種方式
2017-09-05 10:06:00      0個評論    來源:zhouxukun123的專欄  
收藏   我要投稿

啓用或禁用更改塊跟蹤 (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;
}
點擊複製鏈接 與好友分享!回本站首頁
相關TAG標

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章