| Previous | Next |
| ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE | ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE |
ERROR_CTLOG_TRACKING_NOT_INITIALIZED
Identify the owner before touching the layout: ctlog tracking not initialized
The practical meaning of ERROR_CTLOG_TRACKING_NOT_INITIALIZED (0xC03A0020) is tied to resilient change-tracking baseline and sidecar metadata for the virtual disk: resilient change tracking has no active baseline and therefore cannot answer a query for changed ranges. The result does not, by itself, prove file-system corruption or physical-media failure.
Resilient change tracking answers which virtual-disk byte ranges changed after a named baseline. The tracking identifier, virtual-disk generation and sidecar metadata must remain consistent across every query and backup checkpoint.
A useful record contains more than the final UI symptom: retain the first failing call, target identity, topology and state transition before management software rescans the disks.
Minimum diagnostic set
| Storage diagnostic field | Value |
|---|---|
| Owning object | resilient change-tracking baseline and sidecar metadata for the virtual disk |
| Rejected invariant | resilient change tracking has no active baseline and therefore cannot answer a query for changed ranges |
| Identity and generation | virtual-disk identifier, ChangeTrackingId, RCT state, VHDX generation, sidecar path and size, offline maintenance history and queried byte range |
| Narrow experiment | create a fresh RCT baseline on a copy of the virtual disk and replay only the requested start, query, reset or stop transition |
| Closest comparison | ERROR_CTLOG_INVALID_TRACKING_STATE |
Keep this HRESULT as the primary result if rollback or cleanup reports another code; those later values describe recovery, not the first rejected invariant.
Reproduce without destructive cleanup
- Before changing state, freeze the failing generation and save virtual-disk identifier, ChangeTrackingId, RCT state, VHDX generation, sidecar path and size, offline maintenance history and queried byte range.
- Exercise this exact comparison: create a fresh RCT baseline on a copy of the virtual disk and replay only the requested start, query, reset or stop transition.
- During the comparison, keep image bytes, unrelated disks, provider policy and cluster topology fixed.
- After the test, record the next return value and the durable object state; crossing the boundary should expose a later result rather than silently retrying.
The distinction from ERROR_CTLOG_INVALID_TRACKING_STATE is operational. The relevant condition is resilient change tracking has no active baseline and therefore cannot answer a query for changed ranges; log the neighboring code separately so capability, identity and state are not conflated.
Mechanism-specific note
There is no sealed baseline from which changed ranges can be measured. A backup application must create and persist a baseline identifier before requesting deltas. Returning all blocks as changed is an application policy choice, not a valid interpretation of this HRESULT by the tracking API itself.
Restore the contract
Create a new trustworthy change-tracking baseline after validating the VHDX and tracking metadata; never merge ranges from an invalidated generation into backup state. Apply the change through the supported storage API, then close and reacquire affected objects before retrying.
- the first retry uses newly enumerated identifiers rather than cached handles.
- The durable metadata or provider state agrees with the success returned after this result.
- A second run after close/reopen does not recreate the rejected condition.
- the nearby
ERROR_CTLOG_INVALID_TRACKING_STATEpath remains separately testable and separately logged.
Technical references
- Microsoft: QueryChangesVirtualDisk — use this source to verify ctlog state and parameters.
- Microsoft: Virtual Disk API — documents the supported management path relevant to this result.
- Microsoft: GetVirtualDiskInformation — defines the ctlog objects used to interpret this result.
- Microsoft: COM error codes for VHD and change tracking — primary API or object-model reference.
Looking for a different code? Search another status or error code.