I am just trying to do my homework on this mechanism so I can understand VDR. I am hoping a pro can help me where I have got it wrong and fill in the details!
As far as I understand it, once CBT is enabled on a VM and its disks (Either manually or by the backup application), and the VM is stunned in order to insert the CBT filter into the storage stack (Various ways of doing this, taking a snapshot seems most common). We then get a ctk file for each VMDK which basically maps the entire VMDK into blocks. Each time a block is changed, the ctk file is updated to show when the block was changed.
So first question! What consitutes a block? (Is it a fixed size segment, or a group of disk sectors etc?)...
OK, so now the backup application launches, and takes a snapshot to free up the underlying VMDK's. For the first backup, it looks like it uses the * parameter to backup all blocks. At this point it stores the timestamp of this backup. Then next time (From looking at the VMware API), it appears that it is the backup application's job to send a parameter called ChangeID which as far as I can tell is simply the afforementioned timestamp of the last CBT backup performed?
At this point the API simply returns all blocks which have a later date than the ChangeID and the backup application backs these up, stores the newer ChangeID and then removes the snapshot?
From this I conclude that the ctk file is not actually amended in anyway (AKA A typical differential backup would mark the file or write in sections of the map to say the blocks have been backed up - I am saying CBT does not do this at all)
I also wonder how all this works when a VM is being backed up that has a snapshot or two already on it?