RAID 10

striped + mirror

Derived by hand from the Linux md rule — how the pages are sourced

Striping and mirroring in one flat array: every chunk is stored on two disks, and the chunks are dealt across all of them. It reads like a stripe, writes at a mirror's cost with no parity to compute, keeps half the space, and is guaranteed to survive one failure, more if the failures miss each other.

What it is

RAID 10 is the pair striped + mirror: the data is cut into chunks and dealt across the members (striping), and each chunk is stored twice, on two different disks (mirroring). In Linux md it is one level, not a nesting: "every datablock is duplicated some number of times, and the resulting collection of datablocks are distributed over multiple drives". Where the second copy lands is the placement algorithm, near, far or offset; near, the default, puts the two copies side by side in the same stripe, which is the same arrangement a hardware controller reaches in a different way, by striping over mirror pairs.1 That nested form, RAID 1+0, has its own page; with the near layout the two put every block in the same place, and the difference is which engine built it and which other layouts it can offer. RAID 0+1, a mirror of two stripes, uses the same disks in a worse arrangement, and its page says why.

What it buys

Speed, of both kinds. A large read spans the stripe, at the combined bandwidth of all N disks; a small read has two disks to choose from; and a write costs two operations, one per copy, with no parity to read or compute (write penalty). Among the redundant levels it has the best write numbers, which is why databases and virtual machine hosts run on it (performance).

What it pays

Half the space: the capacity is N ÷ 2 disks' worth, the same as a two-way mirror, whatever the count. And its fault tolerance needs the word guaranteed: the array survives one failure for certain, and a second only if it lands on a disk that does not hold the other copy of the same chunks. On four disks with two copies, the second failure lands on the partner of the first in one case out of three; on a controller's RAID 1+0 the same rule reads "one failure per pair". The number to plan on is one.

The disk count

An even count of disks is the natural shape, one copy per disk per stripe. md accepts an odd count too, with the copies wrapping across stripes; that array is what the industry names RAID 1E, and it has its own page. With two disks the distinction disappears: two copies on two devices is a mirror, and the array is a RAID 1 by another name.

Notes

  1. In the grids one copy of each chunk is drawn as the original and the other as its copy. The driver makes no such distinction, and the sandbox draws as the original the copy the driver places first. A choice of the sandbox — see the model's choices.

Segmentation

How an array splits its data across its member disks. Striped cuts the data into fixed-size chunks and deals them out to every member in turn; linear writes it as one run, filling the first member before touching the next. Segmentation is about how many disks take part in one request, not about whether the data survives a failure.

Read more — Segmentation

RAID 10 · 4 disks · near

          disk 0  disk 1  disk 2  disk 3
stripe 0      D0     D0'      D1     D1'
stripe 1      D2     D2'      D3     D3'
stripe 2      D4     D4'      D5     D5'
stripe 3      D6     D6'      D7     D7'

Redundancy

How an array keeps its data readable when a member fails: by storing more than the data itself. Two techniques do it. Mirroring keeps whole copies on separate disks; parity keeps a computed summary from which any one missing block, or two with a second parity, can be rebuilt. Redundancy always costs capacity; the question is how much, and how many failures it buys.

Read more — Redundancy

(N ÷ copies) × disk size
N = 4 disks of 2 TB, 2 copies → (4 ÷ 2) × 2 TB = 4 TB usable

the members an adversary must kill, minus one
two copies of every chunk: both copies of one chunk → 2 → tolerance 1

one logical write costs
every copy is written, no parity → 2 I/Os, random or sequential

Algorithm

The rule that says, stripe by stripe, which member holds the parity and where the data starts, or where a mirror's copies go. The level says what is stored; the algorithm says where. Left-symmetric for the parity levels and near for RAID 10 are the defaults nearly everything uses. The choice changes speed and compatibility, not capacity or safety.

Read more — Placement algorithm

RAID10 Far
The array is split into two equal sections on each disk. The first section holds the original copies in pure RAID0 order. The second section (physically far away on disk) holds the mirror copies, shifted right by near_copies positions — so each chunk's copy lives on a different disk than the original.
RAID10 Near default
Each chunk is stored near_copies times on adjacent physical disks within the same stripe. With near=2 and 4 disks: disk 0 and disk 1 hold the same data (span 0), disk 2 and disk 3 hold the next chunk (span 1).
RAID10 Offset
A compromise between near and far. Copies are placed in immediately adjacent stripes rather than a distant section. Consecutive stripe pairs form a unit: the even stripe holds originals, the odd stripe holds copies shifted right by near_copies=1. Each chunk and its copy are on different disks and in adjacent stripe positions.

Where it runs

The component that turns a RAID layout into disk operations. It owns the array's metadata, translates every request from the array's addresses to the members', writes the copies or computes the parity, and keeps serving when a disk fails. It is a role, not a fixed device: a RAID-on-Chip on a controller card, the operating system's own driver, or a boot firmware working with that driver.

Read more — RAID engine

RAID Engine (RoC)
A dedicated PCIe card that includes BOTH the HBA (protocol translation) AND a RAID-on-Chip (RoC) processor. The RoC computes parity, manages the stripe, and exposes one or more Virtual Drives to the OS — the OS never sees the individual physical disks. Examples: Broadcom MegaRAID, Adaptec SmartRAID.
RAID Engine (RoC, tri-mode)
A RAID-on-Chip controller whose ports speak SAS, SATA and NVMe alike (Broadcom MegaRAID 9500/9600 "tri-mode", Adaptec SmartRAID 3200). NVMe drives plug straight into it — no HBA, no SAS/SATA backplane in between — and it still builds the array itself and exposes one virtual drive to the OS. It is the one way hardware RAID over NVMe exists.
RAID Engine (metadata)
A dedicated chip placed between the HBA and the CPU (on the motherboard or near it) that owns the RAID metadata and boot firmware — no compute silicon of its own. The OS still sees individual disks (unlike hardware RAID) but uses a driver to participate in RAID operations; the actual parity computation runs on the CPU. The canonical example is Intel RST (Rapid Storage Technology) on Intel chipsets. Also known as "motherboard RAID", "BIOS RAID", or, once its wiring reveals what it is, "fake RAID".
OS — Linux
Linux operating system managing the RAID array in software. Uses mdadm (for traditional RAID 0/1/5/6/10) or ZFS (with integrated volume management and checksums). The CPU computes all parity; no dedicated hardware required.
OS — Windows
Windows operating system managing RAID in software via Storage Spaces (Windows 8+/Server 2012+) or legacy Disk Management (dynamic volumes). Storage Spaces supports mirroring, striping, and parity spaces with optional journaling for crash consistency.
  • RAID 10 uses the "far / near / offset" layout, which only exists under Linux software RAID (mdadm). On fake or hardware RAID, build a nested RAID 1+0 instead.

Below the minimum

Minimum for the level
4 disks
The real system still starts it at
2 disks
drivers/md/raid10.c setup_conf(): the only bound on the device count is copies ≤ raid_disks, so a 2-device near-2 array starts
With 2 disks it is linear + mirror
two copies over two disks: every chunk sits on both, there is nothing left to stripe across
drivers/md/raid10.c setup_conf(): copies == raid_disks is accepted; with 2 copies on 2 devices each device holds every chunk, near or far

In practice

Good at

  • Best write performance among redundant RAID levels (mirror penalty only, no RMW)
  • Full read parallelism across all N disks
  • near/far/offset layouts available under Linux mdadm (software RAID only)

Costs

  • 50% capacity efficiency (copies=2)
  • near/far/offset require Linux mdadm; hardware/fake RAID → use nested RAID 1+0

Used for

  • High-traffic databases
  • Virtualization hosts
  • Any workload needing both performance and fault tolerance

Not for

  • Large storage on a budget (50% efficiency)
  • Environments where near/far/offset layouts are needed on hardware RAID

RAID 10 is distinct from nested RAID 1+0 (a stripe-over-mirror-pairs build). The flat form (this file) is mdadm's own RAID 10 level, which supports the near/far/offset layout algorithms — none of which decompose into mirror pairs. Nested RAID 1+0 is recognized separately, as its own level.

Try it

Open this example in the sandbox

A desktop link: below the desktop breakpoint the sandbox is not offered (ADR-003).

See also

Related

Often confused with