| Previous | Next |
| ERROR_VOLMGR_PLEX_TYPE_INVALID | ERROR_VOLMGR_PLEX_NOT_SIMPLE |
ERROR_VOLMGR_PLEX_NOT_RAID5
Locate the rejected storage invariant: volmgr plex not raid5
ERROR_VOLMGR_PLEX_NOT_RAID5 (0xC038003F) is emitted by the volmgr path when the requested operation requires RAID-5 parity semantics but the selected plex has a different layout type. The deciding object for it is volume plex descriptor, layout type and regeneration state, so the first investigation belongs there rather than in a generic “disk failure” bucket.
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. This object model determines which identifiers, counts and ownership state are meaningful for it.
The standard message identifies the immediate condition, but this result also requires the producer API, object topology and attempted state transition. Capture them before an automatic refresh advances the storage generation while diagnosing it.
Evidence to preserve before repair
| Storage diagnostic field | Value |
|---|---|
| Rejected invariant | the requested operation requires RAID-5 parity semantics but the selected plex has a different layout type |
| Identity and generation | volume ID, plex ordinal, plex type, member array, active/inactive state, health status and current regeneration job |
| Narrow experiment | separate plex-type validation from platform capability by testing one real RAID-5 plex and one nonparity plex on the same system |
| Closest comparison | ERROR_VOLMGR_RAID5_NOT_SUPPORTED |
| Owning object | volume plex descriptor, layout type and regeneration state |
When it is followed by a secondary cleanup failure, store both codes with timestamps and retain this one as the initiating result.
One-variable reproduction
- Create a nonproduction case for it that preserves the same geometry and ownership model.
- Collect volume ID, plex ordinal, plex type, member array, active/inactive state, health status and current regeneration job before invoking the first mutating API.
- Change one condition only: separate plex-type validation from platform capability by testing one real RAID-5 plex and one nonparity plex on the same system while diagnosing this result.
- Re-enumerate after the transition and confirm this result is not reproduced by a stale handle from the old generation while diagnosing it.
The distinction from ERROR_VOLMGR_RAID5_NOT_SUPPORTED is operational. The decisive condition is the requested operation requires RAID-5 parity semantics but the selected plex has a different layout type; log the neighboring code separately so capability, identity and state are not conflated.
Mechanism-specific note
Separate two questions: whether the selected plex is RAID-5 and whether this Windows edition/provider can perform the requested parity operation. Record the actual plex type, disk count and provider capability so a topology mismatch is not misdiagnosed as a product limitation, or vice versa.
Repair without rewriting unrelated metadata
Select an operation compatible with the actual plex type and keep at least one active data copy throughout detach, repair or regeneration. Keep the correction scoped to the owning object and avoid rewriting adjacent metadata merely to make the call return success while diagnosing this result.
- 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 while diagnosing it.
- The application still distinguishes it from
ERROR_VOLMGR_RAID5_NOT_SUPPORTEDand has no unbounded retry loop.
Avoid broad rescans, forced failovers and metadata deletion until identities and generations are captured while diagnosing it. Those actions can make a stale request appear to heal without fixing its caller while diagnosing it.
Technical references
- Microsoft: COM error codes for VOLMGR, VHD and SDIAG — defines the volmgr objects used to interpret it.
- Microsoft: Virtual Disk Service object model — primary API or object-model reference for the boundary.
- Microsoft: Pack object — use this source to verify volmgr state and parameters for it.
- Microsoft: Virtual Disk Service common return codes — documents the supported management path relevant to it.
Looking for a different code? Search another status or error code.
