A
cd ..
System

RAID Management with mdadm

Manage software RAID arrays with mdadm for data redundancy.

2025-10-31
raid, mdadm, storage

Install mdadm

sudo apt install mdadm

RAID levels

  • RAID 0 - Striping (performance, no redundancy)
  • RAID 1 - Mirroring (redundancy)
  • RAID 5 - Striping + parity (min 3 disks)
  • RAID 6 - Double parity (min 4 disks)
  • RAID 10 - Mirror + Stripe (min 4 disks)

Create RAID 1 array

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Create RAID 5 array

sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

Create RAID 10 array

sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

View RAID status

cat /proc/mdstat

Detailed RAID info

sudo mdadm --detail /dev/md0

Format RAID array

sudo mkfs.ext4 /dev/md0

Mount RAID array

sudo mkdir /mnt/raid
sudo mount /dev/md0 /mnt/raid

Save RAID configuration

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

Add to fstab

echo "/dev/md0 /mnt/raid ext4 defaults 0 2" | sudo tee -a /etc/fstab

Add disk to array

sudo mdadm --add /dev/md0 /dev/sde

Mark disk as failed

sudo mdadm --manage /dev/md0 --fail /dev/sdc

Remove failed disk

sudo mdadm --manage /dev/md0 --remove /dev/sdc

Replace failed disk

# 1. Mark as failed
sudo mdadm --manage /dev/md0 --fail /dev/sdc

# 2. Remove from array
sudo mdadm --manage /dev/md0 --remove /dev/sdc

# 3. Add new disk
sudo mdadm --manage /dev/md0 --add /dev/sdf

Check RAID consistency

echo check > /sys/block/md0/md/sync_action
cat /sys/block/md0/md/mismatch_cnt

Monitor RAID

sudo mdadm --monitor --scan --daemonise

Stop RAID array

sudo umount /mnt/raid
sudo mdadm --stop /dev/md0

Start RAID array

sudo mdadm --assemble /dev/md0 /dev/sdb /dev/sdc

Grow RAID array (add disks)

# Add disk first
sudo mdadm --add /dev/md0 /dev/sde

# Grow array
sudo mdadm --grow /dev/md0 --raid-devices=4

Convert RAID level

# Add spare first
sudo mdadm --add /dev/md0 /dev/sde

# Convert RAID 1 to RAID 5
sudo mdadm --grow /dev/md0 --level=5 --raid-devices=3

Examine disk

sudo mdadm --examine /dev/sdb

Remove RAID array

# 1. Unmount
sudo umount /mnt/raid

# 2. Stop array
sudo mdadm --stop /dev/md0

# 3. Zero superblocks
sudo mdadm --zero-superblock /dev/sdb /dev/sdc

# 4. Remove from config
sudo vi /etc/mdadm/mdadm.conf

Create RAID with spare

sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
  /dev/sdb /dev/sdc /dev/sdd /dev/sde

Set write-intent bitmap

sudo mdadm --grow /dev/md0 --bitmap=internal

View resync progress

watch -n 1 cat /proc/mdstat

Email notifications

Edit /etc/mdadm/mdadm.conf:

MAILADDR your-email@example.com

Test email notification

sudo mdadm --monitor --scan --test

Check RAID health

sudo mdadm --detail /dev/md0 | grep -i state

Recover RAID metadata

sudo mdadm --assemble --scan

Force assemble

sudo mdadm --assemble --force /dev/md0 /dev/sdb /dev/sdc

Read performance test

sudo hdparm -tT /dev/md0

Benchmark with dd

# Write test
sudo dd if=/dev/zero of=/mnt/raid/testfile bs=1G count=1 oflag=direct

# Read test
sudo dd if=/mnt/raid/testfile of=/dev/null bs=1G count=1 iflag=direct

RAID 0 example (2 disks)

sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid0

RAID 1 example (2 disks)

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid1

Complete RAID 5 setup

# Create array
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 \
  /dev/sdb /dev/sdc /dev/sdd

# Wait for sync
cat /proc/mdstat

# Format
sudo mkfs.ext4 /dev/md0

# Mount
sudo mkdir /mnt/raid5
sudo mount /dev/md0 /mnt/raid5

# Save config
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

# Add to fstab
echo "/dev/md0 /mnt/raid5 ext4 defaults 0 2" | sudo tee -a /etc/fstab

# Update initramfs
sudo update-initramfs -u

Troubleshooting

# Array won't start
sudo mdadm --assemble --scan --verbose

# Check journal
sudo journalctl -u mdadm

# Examine all disks
sudo mdadm --examine /dev/sd[b-e]

# Reset superblock (DANGEROUS!)
sudo mdadm --zero-superblock /dev/sdb

Was this useful?

Share with your team

Browse More