Categories: LinuxRaspberry Pi

Build a Raspberry Pi RAID NAS Server – Complete DIY Guide

Introduction

Today I’ll show you how to build a Raspberry Pi 3 RAID NAS server using USB flash drives and the Linux native RAID application mdadm, along with SAMBA so the drive will show up as a normal network folder on Windows PC’s. It’s an intermediate tutorial and shows you how to create a Linux RAID array which is a good skill to have.

Hardware Requirements

Raspberry Pi

You can use Raspberry Pi’s from version 2 onward, so 2B, 2B+ and RPi 3’s are fine, but I recommend the latest Raspberry Pi 4 with 4GB RAM. You’ll also need a good quality micro-USB power pack suitable for the Raspberry Pi you’re using, if in doubt, just buy a combo pack that comes with case, power pack and other goodies.

USB Flash Drives

We will be using USB2.0 flash drives for our RAID array, however you can purchase USB3.0 drives if you’re using a Raspberry Pi 4 (which has 2 USB3.0 ports) and RAID levels 0 or 1. The drives should all be the same size and preferably the same manufacturer for a good RAID array however, if you have an odd one out, just make sure it’s the same size or larger than the smallest drive.

In terms of drive size, your budget will be the determining factor, so just get what you can afford. Remember that with RAID-0 you get the total amount of all drives put together, so 2x 64GB drives will give you 128GB. RAID-1 will halve your total capacity, so 2x 64GB drives will give you 64GB, and RAID-5/6 will give you roughly 2/3 of total capacity, so 3x 64GB drives will give you 128GB of storage. RAID-10 will halve your total capacity, so 4x 64GB drives will give you 128GB storage (more about RAID levels further below).

RAID Levels

The number of drives you have with determine what RAID level you’ll be able to create. I suggest 3 (or more) drives which is the minimum required for a RAID-4/5 array that offers a good balance between redundancy and speed. If you only have 2 drives, I suggest using RAID-0, and even though there is no redundancy, RAID-0 rarely fails on solid state media. I have had my workstation running on SATA-3 SSD RAID-0 for years and it never skips a beat, but If you’re storing important files, go with RAID-1.

If you’re confident in your Linux skills you can create a RAID-10 array with 4 drives, which is 2 sets of RAID-1, then each set is used to form a RAID-0 array giving you the benefit of speed and redundancy (I will show you how to create all types of Linux RAID arrays).

Number of Drives RAID Level Availability
2
  • RAID-0 Stripe (Fastest, but no redundancy)
  • RAID-1 Mirror (Excellent redundancy, good speed)
3
  • RAID-0 Stripe (Fastest, but no redundancy)
  • RAID-4 Dedicated parity disk (Good speed & redundancy)
  • RAID-5 Block-level striping with distributed parity (Excellent speed & redundancy)
4
  • RAID-6 Block-level striping with two parity blocks distributed across all member disks (Excellent speed & redundancy)
  • RAID 10 (nested RAID 1+0) (Excellent speed and redundancy)

Once you’ve chosen a desired RAID level, let’s move onto Install/Update Raspbian and mdadm.

Installing Raspbian

Now we need to prepare our MicroSD card, install Raspbian, update the system and install mdadm Linux RAID. You will need a MicroSD card of 8GB or more and the application Etcher to transfer the .img file to it (Etcher supports Windows, Linux and MAC).

  1. Download the latest version of Raspbian Lite from raspberrypi.org
  2. Click on and extract the .img file and take note of it’s location
  3. If not already installed, download and install Etcher for Windows, Linux or MAC
  4. Insert your MicroSD card into a card reader, close any automatic windows, prompts or alerts
  5. Fire up Etcher which should detect the MicroSD card automatically (important! if you have multiple choices, be sure to choose the SD card we are working with)
  6. Click on the Select Image button, navigate to your Raspbian .img file, select it and/or click Open
  7. Once you’re sure you have everything right by double checking, click on the Flash! button
  8. Etcher will now start the flashing process, click Yes to the Windows prompt, and close any automatic alerts/windows that appear shortly afterwards
  9. Flashing should take about 5 minutes, then you’ll be presented with the “Flash Complete!” dialog
  10. Close Etcher, remove the card reader and MicroSD card
  11. Insert the MicroSD card into your Raspberry Pi

="expanded?" 9="expanded" 10=":" 11="''"" tabindex="0" 12=">1." 13="Choose" 14="your" 15="microSD" 16="drive," 17="then" 18="click" 19="choose" 20="image" 21="" 22="" 23="class="ampforwp-gallery-item" 24="" 25="tabindex="1">" 26="" 27="[class]="expanded?" 28="expanded" 29=":" 30="''"" 31=">2." 32="Navigate" 33="to" 34="your" 35="Raspbian" 36=".img" 37="file" 38="and" 39="select" 40="it" 41="" 42="" 43="class="ampforwp-gallery-item" 44="" 45="tabindex="2">" 46="" 47="[class]="expanded?" 48="expanded" 49=":" 50="''"" 51=">3." 52="Click" 53="on" 54="the" 55="Flash!" 56="button" 57="in" 58="Etcher" 59="" 60="" 61="class="ampforwp-gallery-item" 62="" 63="tabindex="3">" 64="" 65="[class]="expanded?" 66="expanded" 67=":" 68="''"" 69=">4." 70="Etcher" 71="will" 72="flash" 73="the" 74=".img" 75="file" 76="to" 77="your" 78="microSD" 79="card" 80="" 81="" 82="class="ampforwp-gallery-item" 83="" 84="tabindex="4">" 85="" 86="[class]="expanded?" 87="expanded" 88=":" 89="''"" 90=">5." 91="Flash" 92="complete" 93="" 94="" id="gallery-lightbox" 95="layout="nodisplay">" 96="" 97="tabindex="0">" 98="" 99="tabindex="0">" 100="" 101="" 102="

[/slb_group"]

Raspbian Initial Setup

Now we need to do some initial setup of Raspbian, so go ahead and hook up a screen, keyboard and power up your Raspberry Pi and remember, on first boot your RasPi will automatically expand the file system to fit your MicroSD card size, then it will reboot. Once rebooted, login with username: pi password: raspberry

raspi-config Options

Now we’ll do some basic setup options for our RasPi NAS server, so enter the following and use raspberry for the password prompt:

sudo raspi-config

Then change the following:

  • Note* Use the Arrow keys to move up and down, use Enter key to select/confirm, use Tab key to select Cancel or Finish
  • Select “Change User Password” and change user:pi’s password
  • Select Hostname, then type RASPINAS for host-name (or anything you want) hit Ok
  • Select Interfacing Options > SSH, then Yes to enable
  • On Home Screen, hit Tab key until the <Finish> item is selected, hit Enter to reboot
  • You Raspberry Pi is now configured

Step-by-step screenshots of the above process:

[slb_group

1. Enter username pi and password raspberry
2. Enter sudo raspi-config
3. Select Change user password
4. Click OK to confirm
5. Enter your new password
6. Click OK
7. Select Network Options
8. Select Hostname
9. Click on OK
10. Enter RASPINAS or whatever you like, then click OK
11. Select Interfacing Options
12. Select SSH
13. Select Yes to enable the SSH service
14. Click on OK
15. Select Finish using the Tab key
16. Click on Yes to reboot

Update & Install MDADM

Now we just need to update Raspbian and install the mdadm RAID package:

sudo apt-get update 
sudo apt-get upgrade -y 
sudo apt-get install mdadm -y

Setup Drives and RAID Volume

Just to make things easier for identifying our USB drives, we need to format and label each one sequentially:

  1. Windows
  2. Insert one of your USB drives (close any automatic windows)
  3. (Win7,XP,Vista) Go to Start > Computer (Win8,10) search “File Explorer” and open top result
  4. Right-click on the USB drive icon, then select Format
  5. In the Format window, change the following options: File system: NTFS, Volume label: USB01
  6. Now click the Start button, then Yes to alert box
  7. Repeat this process for each USB drive you want to use, increment Volume label: to USB02, USB03 etc
  1. MAC OS X
  2. Insert one of your USB drives (close any automatic windows)
  3. Go to Finder > Applications > Utilities > Disk Utility
  4. Locate the USB drive from the left hand-side and select it
  5. Click on the Erase tab and choose the following options: Format: ExFAT, Name: USB01
  6. Now click on Erase button, then confirm the Erase on the alert box
  7. Repeat this process for each USB drive you want to use, increment Name: to USB02, USB03 etc
  1. Linux (Ubuntu/Debian)
  2. Insert one of your USB drives (close any automatic windows)
  3. Open “All applications” icon bottom-left of your screen, then choose Utilities > Disks
  4. Select the USB drive from left side panel, then click the Gears icon, select Format partition
  5. Choose the following options: Erase: Don’t overwrite existing data (quick), Type: NTFS, Name: USB01
  6. Now click Format… button, then confirm by clicking Format button on alert window
  7. Repeat this process for each USB drive you want to use, increment Name: to USB02, USB03 etc

Now it’s time to insert your USB drives into your Raspberry Pi, it doesn’t matter which drive goes where. We need to find out the mount points for each drive using the following command:

sudo blkid

Which should produce something like the following:

pi@RASPINAS:~ $ sudo blkid 
/dev/mmcblk0p1: LABEL="boot" UUID="CDD4-B453" TYPE="vfat" PARTUUID="498dcd43-01" 
/dev/mmcblk0p2: LABEL="rootfs" UUID="72bfc10d-73ec-4d9e-a54a-1cc507ee7ed2" TYPE="ext4" PARTUUID="498dcd43-02" 
/dev/sda1: LABEL="8GB01" UUID="8A44B0F244B0E1DD" TYPE="ntfs" PARTUUID="01411281-01" 
/dev/sdb1: LABEL="8GB02" UUID="2CF48901F488CE90" TYPE="ntfs" PARTUUID="bd5d9029-01" 
/dev/sdc1: LABEL="8GB03" UUID="A8CE3E46CE3E0D56" TYPE="ntfs" PARTUUID="0fb30d0e-01" 
/dev/sdd1: LABEL="8GB04" UUID="3AC2CC7DC2CC3F3F" TYPE="ntfs" PARTUUID="0fb30d2b-01" 
/dev/mmcblk0: PTUUID="498dcd43" PTTYPE="dos" 
pi@RASPINAS:~ $

We need to confirm the mount points of our USB drives, most of the time it will be /dev/sda1, /dev/sdb1, /dev/sdc1 and /dev/sdd1

/dev/sda1: LABEL="8GB01" 
/dev/sdb1: LABEL="8GB02" 
/dev/sdc1: LABEL="8GB03"
/dev/sdd1: LABEL="8GB04"

If you have different mount points than shown here, it doesn’t really matter, you’ll just need to replace the code snippets with the mount points you have. It also doesn’t matter if the drive labels are out of order, just so long as they match up to your mount points.

Depending on how many drives you have, choose your RAID level and follow the instructions for your chosen level below.

Setup RAID-0 Volume

Enter the following code to setup two or more USB drives into a high-performance RAID-0 array in parallel, replacing --raid-devices=X with the number of drives you’re using, and /dev/sda1 /dev/sdb1 with your mount points:

sudo mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sda1 /dev/sdb1

If I were using 4 drives in my RAID-0 array the code would be as follows:

sudo mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Setup a RAID-1 Volume

To setup a redundant RAID-1 array using two drives, enter the following code:

sudo mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1

Setup RAID-4/5/6 Volume

To setup a redundant RAID-4, RAID-5 with three drives, or RAID-6 array with four drives, use the following code, replacing --level=X with the RAID level you want:

sudo mdadm --create --verbose /dev/md0 --level=4 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

If I wanted a RAID-5 array using three drives and a hot spare, I would use the following code:

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1 --spare-devices=1 /dev/sdd1

Setup RAID-10 Volume

To setup a fast, redundant RAID-10 (aka Nested RAID-1+0) use the following code:

sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Confirm your RAID Array

Now let’s confirm all went well creating your RAID array with the following command:

cat /proc/mdstat

Which should produce something like this (replace raid10 with whatever RAID level you chose):

pi@RASPINAS:~ $ cat /proc/mdstat 
Personalities : [raid10] 
md0 : active raid10 sdd1[3] sdc1[2] sdb1[1] sda1[0] 
15319040 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] 
[>....................] resync = 0.4% (61504/15319040) finish=28.9min speed=8786K/sec 
unused devices: <none>

Save your RAID array

For some reason Raspbian won’t let us save the RAID array as user:pi even using sudo, so we need to temporarily change to root account, enter the following:

sudo -i

Now we can save our RAID array by entering the following code:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

It’s also good to confirm it was saved by viewing the mdadm.conf file and look for something like this at the bottom of the file:

# This configuration was auto-generated on Fri, 19 Jan 2018 08:14:18 +0000 by mkconf 
ARRAY /dev/md0 metadata=1.2 name=RASPINAS:0 UUID=0d7c55bd:ae5f8fbc:0e048a15:79de5064

Then exit from root user:

exit

Create File System

You have a number of choices when it comes to Linux file systems, but I will be using the EXT4 file system as it’s the best choice for our RAID array. If you want to learn more about some of the flags (stride, stripe-width, block options) see this article. The following code will produce an EXT4 filesystem with a block size of 4096kb, stride of 32, a stripe-width of 64 and will leave 1% free so it won’t fill up and cause issues:

mkfs.ext4 -v -m .1 -b 4096 -E stride=32,stripe-width=64 /dev/md0

If successful, you should see the following output:

pi@RASPINAS:~ $ sudo mkfs.ext4 -v -m .1 -b 4096 -E stride=32,stripe-width=64 /dev/md0 
mke2fs 1.43.4 (31-Jan-2017) 
fs_types for mke2fs.conf resolution: 'ext4' 
Filesystem label= 
OS type: Linux 
Block size=4096 (log=2) 
Fragment size=4096 (log=2) 
Stride=32 blocks, Stripe width=64 blocks 958464 inodes, 3829760 blocks 3829 blocks (0.10%) reserved for the super user 
First data block=0 Maximum filesystem blocks=2151677952 117 block groups 32768 blocks per group, 
32768 fragments per group 8192 inodes per group Filesystem UUID: 394fd8f2-7b2a-474f-8e58-48b81a6ca8fb 
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 
Allocating group tables: done 
Writing inode tables: done 
Creating journal (16384 blocks): done 
Writing superblocks and filesystem accounting information: done 

pi@RASPINAS:~ $

We also need to mount the file system so we can access it using the following command:

sudo mount /dev/md0 /mnt

We need to automatically mount the file system at boot, so let’s find out the UUID of our mounted file system by entering the following command:

sudo blkid

Which should produce something like the following:

pi@RASPINAS:~ $ sudo blkid 
/dev/mmcblk0p1: LABEL="boot" UUID="CDD4-B453" TYPE="vfat" PARTUUID="498dcd43-01" 
/dev/mmcblk0p2: LABEL="rootfs" UUID="72bfc10d-73ec-4d9e-a54a-1cc507ee7ed2" TYPE="ext4" PARTUUID="498dcd43-02" 
/dev/mmcblk0: PTUUID="498dcd43" PTTYPE="dos" 
/dev/sda1: UUID="0d7c55bd-ae5f-8fbc-0e04-8a1579de5064" UUID_SUB="f954ff33-87db-4e26-8be9-e978aa0ef815" LABEL="RASPINAS:0" TYPE="linux_raid_member" PARTUUID="bd5d9029-01" 
/dev/sdb1: UUID="0d7c55bd-ae5f-8fbc-0e04-8a1579de5064" UUID_SUB="eea15556-4e0a-1985-163a-064670df9db2" LABEL="RASPINAS:0" TYPE="linux_raid_member" PARTUUID="01411281-01" 
/dev/md0: UUID="394fd8f2-7b2a-474f-8e58-48b81a6ca8fb" TYPE="ext4" 
/dev/sdc1: UUID="0d7c55bd-ae5f-8fbc-0e04-8a1579de5064" UUID_SUB="2a8456d7-6fea-eba2-7728-ebd20aa238e5" LABEL="RASPINAS:0" TYPE="linux_raid_member" PARTUUID="0fb30d2b-01" 
/dev/sdd1: UUID="0d7c55bd-ae5f-8fbc-0e04-8a1579de5064" UUID_SUB="51019b58-995f-cf35-f6c3-33d61a104d76" LABEL="RASPINAS:0" TYPE="linux_raid_member" PARTUUID="0fb30d0e-01"

The item we’re after is the UUID of /dev/md0: which in my case is 394fd8f2-7b2a-474f-8e58-48b81a6ca8fb but yours will be different. Highlight and copy the UUID, then add it to fstab and backup the original fstab just in case:

sudo cp /etc/fstab /etc/fstab.bak 
sudo nano /etc/fstab

Just before the bottom comments, make a space and enter the following on a single line (replace [your_uuid] with the UUID of your file system):

UUID=[your_uuid] /mnt ext4 defaults 0 0

So, my fstab entry would look like this:

UUID=394fd8f2-7b2a-474f-8e58-48b81a6ca8fb /mnt ext4 defaults 0 0

Now save Ctrl+O and exit Ctrl+X.

Install and Setup SAMBA

SAMBA is a Windows file sharing system that runs on Linux, works flawlessly, and is easy to setup too. Let’s install SAMBA and then configure it with the following command:

sudo apt-get install samba samba-common-bin -y

After SAMBA finishes installing, let’s add user:pi and share password by entering the following command (enter a password at the prompts):

sudo smbpasswd -a pi

Which should produce the following result if successful:

pi@RASPINAS:~ $ sudo smbpasswd -a pi 
New SMB password: 
Retype new SMB password: 
Added user pi. 
pi@RASPINAS:~ $

Before we start altering the SAMBA config file, let’s make a backup:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

Now we edit the smb.conf file:

sudo nano /etc/samba/smb.conf

Scroll down to the bottom of the file using your arrow key, then add the following code to create your NAS file share:

# NAS Share 
[NAS] 
path = /mnt 
comment = RasPi NAS Share 
valid users = pi 
writable = yes 
browsable = yes

The save Ctrl+O and exit Ctrl+X. Now let’s make sure our changes work, enter the following:

testparm

Which should product the following (if you want a full output, press Enter at the prompt):

pi@RASPINAS:~ $ testparm 
Load smb config files from /etc/samba/smb.conf 
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) 
WARNING: The "syslog" option is deprecated 
Processing section "[homes]" 
Processing section "[printers]" 
Processing section "[print$]" 
Processing section "[NAS]" 
Loaded services file OK. 
Server role: ROLE_STANDALONE 

Press enter to see a dump of your service definitions

If the line reads “Loaded services file OK.” then you’re good to go.

Finally, we need to restart the SAMBA service by with the following command:

sudo /etc/init.d/samba restart

Connect to your NAS

Now let’s connect to your NAS share and make it automatically show up in your Network drive. Open File Explorer (Win8/10 search “File Explorer” and open top result) (WinXP/Vista go to Start > Computer), then click on the Network item on left-side window pane. Click inside the address bar, then type \\RASPINAS (or whatever you chose for a hostname during Debian setup, if you’re unsure enter the hostname command) and hit Enter

="expanded?" 9="expanded" 10=":" 11="''"" tabindex="0" 12=">1." 13="Enter" 14="your" 15="Raspberry" 16="Pi's" 17="hostname" 18="" 19="" 20="class="ampforwp-gallery-item" 21="" 22="tabindex="1">" 23="" 24="[class]="expanded?" 25="expanded" 26=":" 27="''"" 28=">2." 29="Inside" 30="your" 31="NAS" 32="" 33="" 34="class="ampforwp-gallery-item" 35="" 36="tabindex="2">" 37="" 38="[class]="expanded?" 39="expanded" 40=":" 41="''"" 42=">3." 43="Click" 44="on" 45="your" 46="NAS" 47="folder," 48="then" 49="enter" 50="your" 51="credentials" 52="" 53="" 54="class="ampforwp-gallery-item" 55="" 56="tabindex="3">" 57="" 58="[class]="expanded?" 59="expanded" 60=":" 61="''"" 62=">4." 63="Inside" 64="your" 65="NAS" 66="folder" 67="" 68="" 69="class="ampforwp-gallery-item" 70="" 71="tabindex="4">" 72="" 73="[class]="expanded?" 74="expanded" 75=":" 76="''"" 77=">5." 78="Click" 79="on" 80="Map" 81="network" 82="drive," 83="enter" 84="your" 85="Raspberry" 86="Pi" 87="hostname" 88="and" 89="nas" 90="folder" 91="name" 92="" 93="" 94="class="ampforwp-gallery-item" 95="" 96="tabindex="5">" 97="" 98="[class]="expanded?" 99="expanded" 100=":" 101="''"" 102=">6." 103="Your" 104="new" 105="NAS" 106="folder" 107="as" 108="a" 109="permanent" 110="drive" 111="" 112="" id="gallery-lightbox" 113="layout="nodisplay">" 114="" 115="tabindex="0">" 116="" 117="tabindex="0">" 118="" 119="" 120="

[/slb_group"]

Summary

Well I hope this guide has shown you some cool RasPi and Linux stuff and that you had fun 🙂 Something to think about is adding a USB hub to expand the drive number capacity instead of forking out big $$ for large capacity USB drives. You can also add normal 2.5″ or 3.5″ SATA drives via a USB adapter, see this article. If you have any questions or comments, leave them below.

Share
Richie @RicmediaPCHelp

I've been a web developer since 2006 and also have a keen interest in everything Linux and Raspberry Pi. This is where I share my knowledge and projects.

View Comments

  • 1 When suddenly powering off, file system on microsd can be corrupted.
    2 If your system is not readonly, your microsd will die soon.
    The question:
    If I move writable part of OS to RAID will I be safe from the above fails?

  • Hi Ritchie, I also needed to use 'sudo service smbd restart' to restart samba as Lance posted but other than that, all seemed to be good and went smoothly. However, I cannot for the life of me get Win 10 to see the pi. It a Pi 4 with 2 drives (ssd & sata both on powered hub) set as a mirror. I used 'mdadm --detail /dev/md0' to verify the drives are good and they are syncing, so your system is working fine. Any tips about getting Windows to play would be most appreciated (other than binning it!)

    Regards,
    John

    • I take it all back! If I had only read your"Connect to your NAS" correctly, it would have worked the first time.
      Nice work, Ritchie.

      John

  • Sorry, I typoed up above ... the string I added to /boot/cmdline.txt is "usb-storage.quirks=0bc2:2343: " (without the quotes)

  • Hey Richie, SUCCESS!! I've just completed a successful install using your instructions, creating a RAID-5 array on a Pi 4, 4GB using 4 1-TB Seagate drives as noted above, with the Sabrent powered USB hub to power the drives. I opted for 4-drive RAID5 configuration since this is just backup and a hot spare is probably overkill (I'm gambling that I don't lose more than one drive at a time in the array, obviously). Resulting drive is 2.68 TB. Connecting to a wired gigabit ethernet LAN, I just transferred a 1GB file from a SSD on my desktop computer (Windows 10 Pro) to the NAS in about 17 seconds.

    Two things I had to do that weren't exactly the same as your directions:

    1) The command "sudo /etc/init.d/samba restart" did not work because on this version of Raspian the Samba daemon is named "smbd." There is no "samba" in /etc/init.d.

    2) I had to manually chown my /mnt folder to pi, as it started out owned by root. This may be because I used the "sudo bash" cheat to do all the other commands from root so I didn't have to type "sudo" every time, so perhaps it was my fault. But it's worth your readers knowing that if you can connect to the drive from Windows and read, but not write, checking permissions/ownership may fix the problem.

    Other than that though, your instructions worked flawlessly once I supplied sufficient power to my drives.

    One other thought you may consider adding to your instructions: I like being able to use a GUI for administrative purposes so I installed webmin following the instructions for the APT repository at http://webmin.com/deb.html.

    Thanks for this excellent reference!

    • Hi Dan, awesome work mate and integrating Webmin for monitoring is a great idea. I think if anyone else is following this it would be optimal to use SSD's instead of mechanical drives as they draw much less power and many times faster: https://www.storagereview.com/node/2567. You'd still need a powered hub for best performance though. You could also use large capacity USB3.0 flash drives without the need for extra power (512GB are available but $$$). What would be ideal is to source or build a powered USB3.0 rack for 4x SSD drives, let the Pi run the RAID array as usual, all inside a compact unit. eBay or some more obscure websites may have such a rack (looking for just the USB3 rack and powered hub without any OS).

      Cheers!
      Richie

      • Hey Richie, just one thought further ... to your suggestion of large-capacity flash drives. I'm thinking theoretically not experimentally here, but it seems to me possible that one might prefer to use a USB 3.0 hub (powered or not) even with those, since the Pi has only 2 USB 3.0 ports and two USB 2.0. The performance bottleneck of 2.0 would, it seems to me, reduce RAID performance more than a hub at 3.0. True?

      • I agree Richie. The only reason to go with mechanical spindles is cost for storage. That said, my objective was a cheap NAS, and at that we have succeeded.

    • One more addition ... since I care about being able to monitor my array, I also installed smartmontools which doesn't come with Raspian by default. Once installed it'll also be active in Webmin. This is to be able to query SMART parameters for the drives and know if they're threatening to crash.

      Just because I wasn't having enough fun already though, it turns out that Seagate drives tend to be unsupported using smartmontools due to their implementation of UAS. As a consequence one of several methods for addressing a "quirk" in the USB driver are necessary in order to enable SMART on those drives. The documentation for this quirk is at https://www.smartmontools.org/wiki/SAT-with-UAS-Linux, and the instructions for inserting the quirk into the Raspberry Pi configuration are at https://www.raspberrypi.org/forums/viewtopic.php?t=245931.

      What I actually did was to find the vendor and product IDs of the drives by using lsusb. In my case the Seagate drives were 0bc2:2343. So then I used nano to edit the file /boot/cmdline.txt to add the string in front of what was already there, save and reboot. Presto! smartctl can now query the drives.

  • One further question though ... I see you referenced the mount "fail on boot." Are USB drives not hot-mountable on the Pi?

  • Hi Richie, very interesting guide. I'm seriously considering this among my options, but planning to build a much larger array to store media and photos. Wonder if you're aware if the Pi has a limit on the size of drives which can be connected? My intent is to use 4 x either 1TB or 2TB drives, probably 2.5" notebook drives on USB-to-SATA cables. Using spindle drives rather than SSD it should be possible to do this really on the cheap, like around $40 per drive (for real brand name like WD) and 8-dollar USB cables. If the Pi can hack it, this could provide a 3-4 TB RAID-6 NAS for under $200.

    Do you know/think Pi would cooperate in such a scenario?

    • Hi Dan, no problems. Speed is the only issue, although I have not tested this guide with the RPi 4 (4GB RAM) which may be faster. As Raspbian is simply a modified version of Linux I can't see any issue with the larger drives. If it turns out the setup isn't speedy enough you could use a mini-itx mobo that has a PCIe x8 oe x16 slot and a RAID card (like a LSI MegaRAID 9260 8i) on the cheap.

      Would love to hear how it goes Dan.

      Cheers!
      Richie

        • Looks good Dan and should work well. I have a similar or identical case (aluminum) and it's fantastic.

          cheers!
          Richie

          • Hey Richie, so my first go isn't looking too good. Two problems I'm finding so far:

            1) the drives don't seem to be auto-mounting ... at least, when I do the "blkid" command I'm not getting any mounts but the original SD card. If I do a tail -f /var/log/messages (found it on another thread) I see evidence of the drives being recognized (as sda, sdb, sdc, etc), but not mounted.

            2) probably more importantly, it looks like by the time I mount the 3rd drive I'm over the current that the Pi wants to pass through the USB bus. I'm actually seeing an "overcurrent" fail on the messages occasionally. And if I connect all 4 drives the power lights on all four (but not on the Pi itself) actually go off.

            I'm thinking perhaps a powered USB3 hub might solve problem #2 ... what do you think? And do I just need to manually mount the disks to solve problem #1?

          • Hi Dan, ahh yes the Pi won't be able to handle the amps for a mechanical drives so you'll need to power via hub or directly (sorry I didn't think of that earlier). The power issue may have also caused the mount to fail on boot. Once the power has been sorted, it should auto mount as there is no real difference between mechanical and flash drives in terms of filesystems.

            Choosing the right powered USB3 hub will be important, the best I can find is the Orico here.

            That should fix the problems you're experiencing.

            cheers!
            Richie

  • Thank you so much for this comprehensive step-by-step guide! I am thinking about building my own RAID-5 using your tutorial. However, I also want to know if one of the drives fails, e.g. sdb1 fails, then how do I do hot swap and rebuild?

  • I'm excited to give this a shot in my own home as I've never built a RAID before. With that said, how would I rebuild this raid in the event one drive crashes? Is it as easy as plugging in a new blank drive and the software does it for me? or would I have to rebuild the project?

  • I think "sudo /etc/init.d/samba restart"
    Needs to be changed to:

    sudo service smbd restart
    sudo service nmbd restart

    Thanks for the article!

Recent Posts

Change default email client on Windows 10

Today I'll show you two ways to change your default email client on Windows 10: first using the search box,… Read More

6 months ago

Install HTTP/2 LAMP Stack on Ubuntu 18.04 Server (Linux, Apache, MySQL, PHP)

This tutorial shows you how to install a super-fast HTTP/2 LAMP stack (Linux, Apache, MySQL, PHP) on Ubuntu 18.04 LTS… Read More

7 months ago

Ricmedia.com Launch

After the success of Ricmedia PC Help, I have decided to migrate over to the root domain Ricmedia.com and publish… Read More

7 months ago