| Previous | Next |
| ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID | ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED |
ERROR_VOLMGR_VOLUME_MIRRORED
Why this is narrower than a generic disk error: volmgr volume mirrored
Windows returns ERROR_VOLMGR_VOLUME_MIRRORED, value 0xC0380056, at the volmgr boundary. It means that the operation is defined only for nonmirrored volumes, but the volume currently has multiple active plexes for it. Preserve the exact handle and generation of logical volume geometry and the disk extents that realize it before any rescan changes the evidence.
Dynamic volumes are represented as packs containing disks and volumes; each volume has one or more plexes, and each plex is assembled from members and extents. Indices and counts are relative to the submitted layout generation, while configuration logs are replicated across participating dynamic disks for it. This object model determines which identifiers, counts and ownership state are meaningful.
Diagnosis of this result should begin with the object model and generation current at the failure. A later successful enumeration may describe a replacement object and cannot retroactively validate the rejected request.
Storage facts that change the diagnosis
| Storage diagnostic field | Value |
|---|---|
| Identity and generation | volume ID, requested length, sector sizes, extent table, plex/member counts, disk health and the exact VM_VOLUME_LAYOUT buffer |
| Narrow experiment | run the request against matched simple and mirrored test volumes that have the same length and sector geometry |
| Closest comparison | ERROR_VOLMGR_VOLUME_NOT_MIRRORED |
| Owning object | logical volume geometry and the disk extents that realize it |
| Rejected invariant | the operation is defined only for nonmirrored volumes, but the volume currently has multiple active plexes |
Keep this HRESULT as the primary result if rollback or cleanup reports another code; those later values describe recovery, not the first rejected invariant while diagnosing this result.
A/B test for this HRESULT
- Associate this result with one caller, one transaction and one target UniqueId while diagnosing it.
- Save the pre-call and post-call inventories, including volume ID, requested length, sector sizes, extent table, plex/member counts, disk health and the exact VM_VOLUME_LAYOUT buffer.
- Use this A/B case for it without touching unrelated storage: run the request against matched simple and mirrored test volumes that have the same length and sector geometry.
- Validate both the HRESULT and the on-disk or provider state after the relevant reopen, remount or attach cycle for it.
Compare traces for ERROR_VOLMGR_VOLUME_NOT_MIRRORED and this result. The latter page covers a nearby storage boundary, whereas it rejects the operation is defined only for nonmirrored volumes, but the volume currently has multiple active plexes. A correct caller should be able to reproduce each case independently.
Mechanism-specific note
The operation assumes a single data path, while this volume has mirrored plexes whose state must remain coordinated. Identify whether the caller should target one plex or the logical volume for it. Breaking the mirror merely to satisfy the API is unsafe unless the workflow explicitly preserves a known-good copy and documents the loss of redundancy.
Corrective action and regression check
Select an operation compatible with the actual plex type and keep at least one active data copy throughout detach, repair or regeneration for it. Keep the correction scoped to the owning object and avoid rewriting adjacent metadata merely to make the call return success.
- The original request now reaches success or a documented later status with the intended layout and access mode.
- A new enumeration reports internally consistent IDs, counts, geometry and ownership for the object corrected after it.
- The passing state survives the lifecycle transition relevant to it, such as reopen, remount, owner change or detach/attach.
- The application still distinguishes it from
ERROR_VOLMGR_VOLUME_NOT_MIRROREDand has no unbounded retry loop.
Before responding to it with destructive cleanup, prove which object owns the failure. Changing every disk or provider at once prevents a meaningful regression test while diagnosing it.
Technical references
- Microsoft: COM error codes for VOLMGR, VHD and SDIAG — primary API or object-model reference for the boundary.
- Microsoft: Virtual Disk Service object model — use this source to verify volmgr state and parameters for it.
- Microsoft: Pack object — documents the supported management path relevant to it.
- Microsoft: Virtual Disk Service common return codes — defines the volmgr objects used to interpret it.
Looking for a different code? Search another status or error code.