启用或禁用更改块跟踪 (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标

posted @ 2022-04-29 22:34  WORDLESS  阅读(271)  评论(0编辑  收藏  举报