Converting an mdadm RAID1 array to RAID5

Converting an mdadm RAID1 array to RAID5
A former RAID1 array resyncing to RAID5

PREREQUISITES

1. An existing mdadm RAID1 array with <=2 drives. If you have >2 drives in the array, read below.

2. New drives with at least the same capacity as the existing drives.

In the commands below, substitute <ARRAY> with your existing mdadm array (e.g., /dev/md0)


Removing excess drives from the array

In order to move to a RAID5, you must have at most 2 drives in the existing RAID1. You can check how many drives are in the array using the following command.

mdadm --detail <ARRAY>

In order to remove the excess drives, you will need to fail and then remove them from the array.

mdadm --fail <ARRAY> <drive>
mdadm --remove <ARRAY> <drive>

They can be considered "new drives" and re-added after the array is changed to a RAID5.


STEPS

1. Change your existing array from RAID1 to RAID5.

mdadm --grow <ARRAY> --level 5

2. Add each new drive to the existing array.

<disk> is the RAID partition on the new disk (e.g., /dev/sdc1). If you are using the entire device, use the device itself instead (e.g., /dev/sdc)

mdadm --add <ARRAY> <disk>

3. Grow the array to use the newly added drives.

<drive count> is the new total number of drives in the array (e.g., if you had 3 drives and added 2 new drives, <drive count> would be 5).

mdadm --grow <ARRAY> --raid-devices <drive count>

4. The array should begin resyncing now with the newly added drives. After the resync is done, you can increase and maximize the array size if necessary.

mdadm --grow <ARRAY> --size max

Afterwards, you can increase the array partition size with something like fdisk and then resize the filesystem using resize2fs.

5. Make sure to update any other configurations as needed afterwards, such as:

  • Adding the new drives to mdadm.conf (e.g., to the devices= arg of the array if used)
  • Updating your ramdisk to use the updated mdadm.conf (e.g. on Arch, mkinitcpio -p linux)