Alright lets continue with our stock Raspberry Pi – Jessie build. It’s a long post, hang on to the handle bars!
First, install mdadm using the following commands:
sudo apt-get update #Updates our repository list
sudo apt-get install mdadm #Accept the prompt during the installation.
Second, we’ll assume the disks are intended for a built from scratch RAID 5 array, so we’ll destroy all data on the disk (technically all we’re doing is remove previous partition table and formatting information, it could still be recovered with data recovery software, many available on the Internet).
We’ll also assume 3 disks. More can be used, but not less than 3 for a RAID 5 array, that’s a requirement. In my case I have 3 powered external USB disks directly plugged in to the Pi.
Third, identify the disks using lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Here are my three disks, sda1, sdb1 and sdc1 (a through c denoting the sequence of the disks). My disks are partitioned already in the above picture (we’ll talk about that below) so they have numeric sequencing for their disks (the number 1 as all use the first partition). If they never partitioned then you’ll see sda, sdb, sdc and need to partition them before use.
Be very careful and verify that the disks identified are indeed disks that you intend to use! Once we proceed all previous data will be erased!
Fourth, we’ll start by partioning them using the command sudo parted. Once launched you’ll see a prompt with (parted). We’ll enter the following commands at this prompt. Start creating the partitions.
mkpart primary ext4 1049KB 3TB
select /dev/sda selects the first disk to be partitioned.
mklabel creates a partition table of type gpt (specifically needed for Linux and large multi Terabyte disks).
mkpart creates the partition. In this case I am starting at 1049KB (never mind the reasoning …) and ending at 3TB as that is the size of the disks I have (a 3TB external USB drive).
Proceed to the other disks (sdb and sdc replacing sda) the same way.
Enter quit to exit out of parted.
Fifth, we create the RAID 5 array using the following commands. This will prevent from the array created with spares (which we don’t want, we want to use all the disks for the maximum capacity we can get, we’re already losing 1/3 of the total disk space for parity information).
sudo mdadm –create –verbose –force –assume-clean /dev/md0 –level=5 \
–raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
Check that they’re running with the following command
You should see:
Lets create the filesystem (this is what most resembles the Format command in Windows).
sudo mkfs.ext4 -F /dev/md0
You should see:
It is now ready to mount so we can access it
sudo mkdir -p /mnt/raid5
You can now mount it using
sudo mount /dev/md0 /mnt/raid5
and see it’s content by
ls -al /mnt/raid5
You can also confirm its capacity by (note /dev/md0 with 5.5T of size).
df -h -x devtmpfs -x tmpfs
We’ll save the configuration in /etc/mdadm/mdadm.conf so it starts up at boot time automatically.
sudo mdadm –detail –scan | sudo tee -a /etc/mdadm/mdadm.conf
Update the initial file system (Raspberry Pi uses a RAM disk image when booting up and we want to include our array).
sudo update-initramfs -u
We’ll add the drive array to our filesystem table also so it will be mounted automatically when booting up.
echo ‘/dev/md0 /mnt/raid5 ext4 defaults,nofail,discard 0 0’ | sudo tee -a /etc/fstab
Finally confirm the array gets mounted by rebooting the Pi.
You should see the following when it has booted.
If “lost+found” entry isn’t listed there is more work to do (which I had to do with my Pi).
Edit /etc/rc.local file
sudo pico /etc/rc.local
Add the following line right before the line containing “exit 0”
Then we create a shell script at /usr/local/bin/raid5
sudo pico /usr/local/bin/raid5
Enter the following lines in it
# Sleep for 20 seconds after boot to make all the disks available for array assembly
sudo mdadm –assemble –scan # Assemble the RAID 5 array
Then set the execute permissions for the file
sudo chmod +x /usr/local/bin/raid5
Now reboot and the raid array should mount automatically. If it still doesn’t then add the following to /usr/local/bin/raid5
Once mounted run the following command so I can start populating the /mnt/raid5 folder.
sudo chmod ug+wrx /mnt/raid5
Next I’ll setup samba (SMB Windows shares for Linux) and share out the folder so I can connect to it from other machines …