Software RAID

Software RAID with mdadm — array creation, monitoring, disk replacement, and recovery procedures.

Array Creation

Create RAID 1 (mirror) — two disks, survives one failure
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
Create RAID 5 (striped parity) — three disks minimum, survives one failure
sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
Create RAID 0 (stripe) — performance only, no redundancy, total loss on any failure
sudo mdadm --create /dev/md2 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
Create RAID 10 (mirror + stripe) — four disks, best performance with redundancy
sudo mdadm --create /dev/md3 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Create RAID 1 with a hot spare — automatic rebuild on failure
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 --spare-devices=1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Monitoring and Status

Check real-time rebuild/sync progress — percentage and speed
cat /proc/mdstat
Detailed array info — state, devices, UUID, rebuild status
sudo mdadm --detail /dev/md0
Examine a component disk — which array it belongs to
sudo mdadm --examine /dev/sdb1
Brief status of all arrays — one-liner inventory
sudo mdadm --detail --scan

Configuration Persistence

Save array config so it survives reboot — essential after creation
sudo mdadm --detail --scan | sudo tee /etc/mdadm.conf
On Arch, regenerate initramfs after mdadm.conf changes
sudo mkinitcpio -P
Assemble arrays from config at boot — normally automatic via initramfs
sudo mdadm --assemble --scan

Disk Replacement

Mark a disk as failed — first step in planned replacement
sudo mdadm /dev/md0 --fail /dev/sdc1
Remove the failed disk from the array
sudo mdadm /dev/md0 --remove /dev/sdc1
Add replacement disk — rebuild starts automatically
sudo mdadm /dev/md0 --add /dev/sde1
Watch rebuild progress — wait for completion before any further changes
watch cat /proc/mdstat

Spare Management

Add a hot spare to an existing array — auto-activates on failure
sudo mdadm /dev/md0 --add /dev/sdf1
Verify spare is registered — State should show "spare"
sudo mdadm --detail /dev/md0 | awk '/spare/'

Growing an Array

Grow a RAID 5 from 3 to 4 disks — add disk first, then grow
sudo mdadm /dev/md1 --add /dev/sde1
sudo mdadm --grow /dev/md1 --raid-devices=4
After grow completes, resize the filesystem to use new space
sudo resize2fs /dev/md1

Array Monitoring

Set up email alerts on array events — catches degraded state early
sudo mdadm --monitor --daemonise --mail=root@localhost --delay=300 /dev/md0
Enable systemd mdmonitor service for persistent monitoring
sudo systemctl enable --now mdmonitor.service

RHCSA Patterns

Full workflow — create RAID 1, format, mount, persist
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
sudo mkfs.ext4 /dev/md0
sudo mkdir -p /mnt/raid
sudo mount /dev/md0 /mnt/raid
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
echo '/dev/md0 /mnt/raid ext4 defaults 0 2' | sudo tee -a /etc/fstab
Verify array health — state, sync status, mount
sudo mdadm --detail /dev/md0 | awk '/State/' && cat /proc/mdstat && df -h /mnt/raid

See Also

  • Disk — underlying disk and partition management

  • LVM — logical volume layer often stacked on RAID