This is part 3 of a series of posts regarding setting up a linux RAID 5 disk array. Let’s say you started your disk array with three drives and now you have more funds and you purchased an additional drive to increase the size of your disk array. Adding a fourth drive to a three drive RAID 5 array will increase your storage space by 50%. So you get a lot of bang for your buck.
Let’s continue with my example. I started with three 1 TB SATA drives and now I’m adding a fourth 1 TB drive. Before I had approximately 2 TB of storage, and after adding this fourth drive, I will end up with approximately 3TB of storage space.
Here are the basic steps that I will cover:
- Partition the bare drive
- Add the drive to your array as a spare
- Grow your array to include this spare
- Extend your file-system to recognize this additional space
- Save your new configuration
First lets create an “auto-detect” partition on the bare drive. You have seen this step before, I’ll include it again to refresh your memory. This step is essential.
$ sudo fdisk /dev/sde Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-133674, default 1); Using default value 1 Last cylinder, +cylinder or +size{K,M,G} (1-133674, default 133674): Using default value 133674 Command (m for help): t Selected partition 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. $ sudo fdisk -l Disk /dev/sde: 1099.5 GB, 1099511627776 bytes 255 heads, 63 sectors/track, 133674 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0xbe84c178 Device Boot Start End Blocks Id System /dev/sde1 1 133674 1073736373+ fd Linux raid autodetect
Now we will add this disk, to the our array as a spare drive. If you merely want to add a hot spare drive to your array, you can stop after this next step. A hot spare is a drive that is automatically used, whenever you have a failure of one of your active drives.
$ sudo mdadm --add /dev/md0 /dev/sde1
Now in this next step we will initiate the process of growing the existing array to include this new drive. I say initiate, because this is a very lengthy process. The data on your existing array is rewritten so that it is spread across four drives instead of three. This will take several hours. The good news is that your array remains online during this process. You don’t have to endure any downtime.
$ sudo mdadm --grow /dev/md0 --raid-devices=4
You can monitor the progress with the file /proc/mdstat. Periodically “cat” the contents of /proc/mdstat and you can see the percentage of progess. When it has finished, you will have a four disk array, but your mounted file-system will still show its old size. It will not automatically recognize the additional space. You to resize your file-system so that it recognizes the additional free space. Fortunately this step is very fast and takes only a few minutes.
$ sudo resize2fs /dev/md0
When this is done, you can do df -h and see that your file-system now has the additional free space. What’s cool is you added lots of free space without downing your box all afternoon.
Please don’t forget to update your array configuration file. Since you now have a four disk array instead of three, you need to let the system know to expect to see four drives instead of three.
If you forget this step, you array will not mount after you reboot.
$ sudo mdadm --detail --scan | sudo tee /etc/mdadm.conf ARRAY /dev/md0 metadata=0.90 UUID=622146c2:61b0872d:6bbacb7a:b6d31587
That is all. Enjoy.