Backup and Restore MDADM Raid
Linux Essentials
I recently created an 8 disk RAID5 array using mdadm (multiple device administration) in Ubuntu. I had to reinstall my operating system and wanted to make sure I could restore everything afterwards without much fuss. Turns out as long as you back up your config file it is pretty easy!
Now keep in mind doing anything with data is stressful. You will likely always want to have a recent copy of your data backed up somewhere else (3-2-1 rule), especially before doing something like this. Planning for the worst, hoping for the best has saved a lot of potentially ruined days.
Speaking of back ups, the first step you need to take is to back up the config file for mdadm. You can do this by running the following command:
sudo mdadm --detail --scanI got the following output:
ARRAY /dev/md0 metadata=1.2 spares=1 UUID=576d6fe7:c8528a0a:2c0fd278:09a74e22Save the output of the scan to a file so that you can reference it later. That’s it for the back up. Technically, assuming all things go well, you will not need this when you assemble your drives after the reinstall.
To restore your RAID array, make sure mdadm is installed:
sudo apt install mdadmThen open up the config file and add in the scan data from the backup, then run
sudo mdadm --assemble --scanFor me, when I ran this there was no output. You can confirm everything worked by running:
sudo mdadm --detail /dev/md0You should see details of your array printed out, for my RAID5 I got:
Version : 1.2
Creation Time : Sun Sep 22 23:45:45 2024
Raid Level : raid5
Array Size : 123047371776 (114.60 TiB 126.00 TB)
Used Dev Size : 17578195968 (16.37 TiB 18.00 TB)
Raid Devices : 8
Total Devices : 8
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Sep 29 21:47:41 2024
State : clean
Active Devices : 8
Working Devices : 8
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Name : milton:0 (local to host milton)
UUID : 576d6fe7:c8528a0a:2c0fd278:09a74e22
Events : 80586
Number Major Minor RaidDevice State
0 8 0 0 active sync /dev/sda
1 8 16 1 active sync /dev/sdb
2 8 112 2 active sync /dev/sdh
3 8 32 3 active sync /dev/sdc
4 8 80 4 active sync /dev/sdf
5 8 48 5 active sync /dev/sdd
6 8 96 6 active sync /dev/sdg
8 8 64 7 active sync /dev/sdeHere is where I ran into problems, I have no spare listed which is not good. So I need to add one, which oddly enough means I have to mark a drive as failed, remove it, then re-add it specifically as a spare:
So here we go, mark one as failed, I chose randomly:
sudo mdadm --fail /dev/md0 /dev/sdhRemove it:
sudo mdadm --remove /dev/md0 /dev/sdhAdd it back but as a spare
sudo mdadm --add-spare /dev/md0 /dev/sdhNow you will need to save the state of the array by updating initramfs:
sudo update-initramfs -uLastly you will want to probably update fstab to automatically mount the drive. I will mount my raid array to /media/shared, so first I’ll create the folder:
sudo mkdir /media/sharedCheck the UUID, changing /dev/md0 as needed, with:
sudo blkid /dev/md0I get this:
/dev/md0: UUID="b8273bf2-9661-4006-a8d7-19710ead427d" BLOCK_SIZE="4096" TYPE="ext4"So I will use that UUID and filesystem when creating my fstab. Open up your fstab file
sudo nano /etc/fstabThen add the following, using your UUID and mount point
UUID=b8273bf2-9661-4006-a8d7-19710ead427d /media/shared ext4 defaults,nofail 0 0Press CTRL+X, then Y, then ENTER to save. Then mount it (you can do this even while the array is rebuilding if you just added a spare).
sudo mount -avVerify everything with:
df -hAnd that is it! You should have successfully restored your RAID array with mdadm.

