Enable Changed Block
Tracking
This feature is deactivated by default, because it reduces
performance by a small but measurable amount. If you query the virtual machine
configuration, you can determine if it is capable of changed block tracking. Use the
property collector to retrieve the capability field from the
VirtualMachineManagedObject
. If the capability field contains the flag
changeTrackingSupported
, then you can proceed.
The virtual machine version must be 7 or higher to support this. If the virtual machine
version is lower than 7, upgrade the virtual hardware. If supported, you enable changed block tracking
using an abbreviated form of
VirtualMachineConfigSpec
, then
use the
ReconfigVM_Task
method to
reconfigure the virtual machine with changed block tracking:
VirtualMachineConfigSpec configSpec = new VirtualMachineConfigSpec(); configSpec.changeTrackingEnabled = new Boolean(true); ManagedObjectReference taskMoRef = serviceConnection.getService().ReconfigVm_Task(targetVM_MoRef, configSpec);
Powered-on virtual machines must go through a
stun-unstun cycle (triggered either by power on, migrate, resume after suspend,
or snapshot create/delete/revert) before the virtual machine reconfiguration
takes effect.
To enable changed block tracking with the
vSphere Client:
- Select the virtual machine and ensure thatsays “7” or higher compatibility.
- In the Summary tab, click.
- In the right side of the dialog box, clickConfiguration Parameters...
- In the new dialog box, locate or create a row with namectkEnabled, and set its value totruenotfalse. See above concerning the stun-unstun cycle.
To enable changed block tracking and back up
with the VMware vSphere API:
- Query change tracking status of the virtual machine. If false, activate changed block tracking.configSpec.changeTrackingEnabled = new Boolean(true);
- Create a snapshot of the virtual machine. The snapshot operation causes a stun-unstun cycle.CreateSnapshotEx_Task(VMmoRef, SnapshotName, Description, memory_files, quiesce_filesystem);
- Starting from the snapshot’sConfigInfo, work your way to theBackingInfoof all virtual disks in the snapshot. This gives you the change IDs for all the disks of the virtual machine.
- Hold onto the change IDs and do a full backup of the snapshot, since this is the first time for backup.VixDiskLib_Read(snapshotDiskHandle, startSector, numSectors, &buffer); /* C not Java */
- Delete the snapshot when your backup has completed.removeSnapshot_Task(SnapshotName, Boolean FALSE);
- Next time you back up this virtual machine, create a snapshot and useQueryChangedDiskAreaswith the change IDs from your previous backup to take advantage of changed block tracking.changes = theVM.queryChangedDiskAreas(SnapshotMoRef, diskDeviceKey, startPosition, changeId);