About Changed Block
Tracking
VixDiskLib_QueryAllocatedBlocks
returns the
sectors of a virtual disk that are in use.
QueryChangedDiskAreas
returns the sectors that changed since the time of a specified
changeId
.
The current implementation
depends on VMFS properties, similar to properties that SAN transport mode uses
to locate data on a SCSI LUN. Both rely on unallocated areas (file holes) in
virtual disk, and the
LazyZero
designation for VMFS blocks. Thus, changed block tracking yields best results
on VMFS. On other storage types, it could fail, or returns a single extent
covering the entire disk.
You should enable changed block tracking in the
order recommended by
Enable Changed Block Tracking. At first call
VixDiskLib_QueryAllocatedBlocks
to get allocated areas of virtual disk, and back them up. Subsequently call
QueryChangedDiskAreas
to get changed areas, and back them up if they were allocated. If you call
QueryChangedDiskAreas
after a snapshot but before you enable changed block tracking,
it also returns unallocated areas of virtual disk. With thin-provisioned
virtual disk this could be a large amount of zero data.
The guest operating system has no visibility of
changed block tracking. Once a virtual machine has written to a block on
virtual disk, the block is considered in use. The information required for
tracking is computed when changed block tracking is enabled, and the
.ctk
file is pre-filled with
allocated blocks. The mechanism cannot report changes made to virtual disk
before changed block tracking was enabled.