Skip to content

RAID Levels Compared

RAID levels are data-placement contracts. Each contract changes usable capacity, I/O behavior, recovery work, and the combinations of member failures that remain survivable.

Use the Universal RAID Planner to evaluate a specific disk count and capacity.

Assume N equal-sized members of capacity S. These formulas are simplified capacity ceilings before filesystems, metadata, spares, and vendor reservations.

LayoutMinimumUsable ceilingGuaranteed member failuresCore trade-off
JBOD1N × S0Capacity aggregation without RAID protection
RAID 02N × S0Maximum striping efficiency; no redundancy
RAID 121 × SN − 1Complete copies on every mirror member
RAID 23Hamming-layout dependent1Historical bit-level error correction
RAID 33(N − 1) × S1Byte striping, dedicated parity bottleneck
RAID 43(N − 1) × S1Block striping, dedicated parity bottleneck
RAID 53(N − 1) × S1Efficient distributed single parity
RAID 64(N − 2) × S2Dual parity for greater rebuild protection
RAID 0+14, even(N / 2) × S1Mirror of stripes; failures can disable a whole side
RAID 104, even(N / 2) × S1Stripe of mirrors; strong random I/O behavior
RAID 506(N − groups) × S1Stripe across RAID 5 groups
RAID 608(N − 2 × groups) × S2Stripe across RAID 6 groups
RAID-Z13roughly (N − 1) × S1ZFS variable-stripe single parity
RAID-Z24roughly (N − 2) × S2ZFS variable-stripe dual parity
RAID-Z35roughly (N − 3) × S3ZFS variable-stripe triple parity

Blocks are distributed across all members. Parallel access can increase throughput, but there is no redundant information. Any member loss can make the stripe set incomplete.

Use only where data can be regenerated or protection exists at another layer and the failure consequences are accepted explicitly.

Every mirror member contains the full logical dataset. An N-way RAID 1 therefore has the usable capacity of one member—not automatically half of raw capacity. Half capacity describes a two-way mirror or the paired mirrors inside RAID 10.

Reads may be serviced from multiple copies. Writes must reach every required copy according to the controller’s completion policy.

These levels explain the evolution of array design but are rare in modern general-purpose deployments.

  • RAID 2 stripes at bit level and uses dedicated Hamming-code members.
  • RAID 3 stripes at byte level with one dedicated parity member.
  • RAID 4 stripes at block level with one dedicated parity member.

Dedicated parity concentrates write activity and can bottleneck small independent writes. RAID 5 distributes parity to reduce that concentration.

RAID 5 distributes one parity block per stripe. RAID 6 distributes two independent protection values per stripe.

For a small RAID 5 update, the classic read-modify-write path is:

  1. Read old data.
  2. Read old parity.
  3. Compute the change.
  4. Write new data.
  5. Write new parity.

That creates a baseline four-I/O small-write penalty. RAID 6 commonly has a six-I/O baseline because two parity values must change. Full-stripe writes, caching, nonvolatile buffers, controller coalescing, and implementation details alter observed behavior.

The names contain the construction order.

  • RAID 0+1: build striped sets, then mirror those sets.
  • RAID 10 or 1+0: build mirror pairs, then stripe across the pairs.

Both usually provide 50% capacity efficiency. RAID 10 isolates failures within mirror pairs and normally offers more flexible multi-failure survival. Neither guarantees survival beyond one arbitrary member loss: placement matters.

Nested parity arrays create multiple independent RAID groups and stripe across them.

For G equal groups:

RAID 50 usable = (N − G) × S
RAID 60 usable = (N − 2G) × S

RAID 50 guarantees one arbitrary member failure. Additional failures survive only when no group loses more than one member. RAID 60 guarantees two arbitrary member failures; more survive only when each group remains within its two-member tolerance.

Group width affects efficiency, parallelism, rebuild exposure, and correlated-failure risk. Capacity alone cannot select it.

RAID-Z uses dynamic or variable-width stripes within ZFS’s transactional, checksummed storage model. It avoids the traditional RAID 5 write hole through its consistency design, but usable capacity cannot be predicted perfectly by subtracting parity members alone.

Practical capacity depends on:

  • pool metadata and slop space;
  • ashift and sector alignment;
  • record size and compression;
  • padding and allocation shape;
  • vdev topology;
  • snapshots and copy-on-write behavior.

Some products expose names such as distributed RAID, declustered RAID, Dynamic Disk Pools, RAID-TEC, RAID-ADG, SHR, or proprietary erasure codes. Map these to their actual placement, parity, spare-capacity, and failure-domain rules before comparing them. A familiar marketing label does not make the standard formula authoritative.

  1. Define the required failure domains—not only the disk count.
  2. Establish rebuild or reconstruction time objectives under foreground load.
  3. Measure read/write mix, I/O size, sequentiality, queue depth, and latency target.
  4. Include hot or distributed spare capacity.
  5. Model the smallest member size and real formatting units.
  6. Assess uncorrectable read errors and latent-sector detection.
  7. Verify controller cache and power-loss behavior.
  8. Maintain isolated, restorable backups.
  9. Test degraded performance and rebuild throttling.
  10. Validate vendor-specific limits and implementation semantics.