mdadm is a Linux utility to manage software RAID.

Quick Usage[edit]

Creating a Raid 1 Mirror[edit]

# mdadm --zero-superblock /dev/sdb
# mdadm --zero-superblock /dev/sdc

Create the array:

# mdadm --create /dev/md0 --chunk=4 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

That's it! Create the filesystem and you're done. Using 4k chunk size.

To save your settings, run:

# echo "DEVICES /dev/sdb /dev/sdc" > /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm.conf
# cat /etc/mdadm.conf
DEVICES /dev/sdb /dev/sdc
ARRAY /dev/md/0 metadata=1.2 name=data:0 UUID=5f486d36:37899fcb:99ad8485:088bc180

Creating a Raid 5[edit]

Create the array:

# mdadm --create /dev/md0 --chunk=128 --level=5 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

You can specify hot spares with --spare-devices=N /dev/sdn

Disassemble / stop an array[edit]

# mdadm --stop /dev/md0

Reassemble an array[edit]

# mdadm --assemble --scan

You can assemble an array with specific devices using:

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

Recovering an Array[edit]

If you want to recover data from an array of a failed system, image the hard drives in case something goes terribly wrong. Then, attempt to reassemble the array with the -o or --readonly option for read only. This will prevent mdadm from attempting to resync, recover, or reshape the array.

# mdadm --readonly --verbose --assemble /dev/md0 /dev/sdb /dev/sdc
# or
# mdadm --readonly --verbose --assemble --scan

Check on the array status:

# cat /proc/mdstat


Issues[edit]

Device or resource busy[edit]

If you're unable to reassemble an array with this error:

# mdadm --assemble /dev/md0 /dev/sdb /dev/sdc
mdadm: cannot open device /dev/sdb: Device or resource busy
mdadm: /dev/sdb has no superblock - assembly aborted

You probably forgot to define your /etc/mdadm.conf settings before rebooting and mdadm probably tried to do something with one of your disks to create /dev/md127 (hence the reason the device is busy). To free /dev/sdb in the above example, just stop /dev/md127 by running:

# mdadm --stop /dev/md127

And then retry reassembling the array again.


/dev/sdx is apparently in use by the system[edit]

An unmounted disk that has just been repartitioned cannot be formatted:

root@velocity:~# mkfs.ext4  /dev/sdb1
mke2fs 1.43.3 (04-Sep-2016)
/dev/sdb1 is apparently in use by the system; will not make a filesystem here!

If the disk was part of a RAID, Linux might helpfully make a raid device out of the disk and call it /dev/md127.

root@velocity:~# ls -al /dev/md127
brw-rw----. 1 root disk 9, 127 Jan  1 12:12 /dev/md127

Stop it, then retry making the filesystem again.

root@velocity:~# mdadm -S /dev/md127
mdadm: stopped /dev/md127

root@velocity:~# mkfs.ext4  /dev/sdb1
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 488378390 4k blocks and 122101760 inodes
...