Raspberry Pi RAID NAS Server Setup

ยท

5 min read

Raspberry Pi RAID NAS Server Setup

Prerequisite

  • Raspberry Pi 4 (4+GB RAM)

  • Micro SD card 64GB

  • 2x Integral USB 3.1 flash drives 128GB Or 2x USB 3.1 HDDs 1024GB

  • OS: - Raspbian Bullseye

RAID Setup

FORMAT DRIVES

  1. Insert drive and list existing partition tables :

     sudo fdisk -l
    
  2. Unmount drive (if needed) :

     sudo unmount /media/pi/<HARD-DRIVE-LABEL>
    
  3. Partitioning :

     sudo fdisk /dev/sda
    
  4. Press the following Keys when prompted :

    [m] for help
    [o]
    [n]
    [p]
    [1]
    [Enter]
    [Enter]
    [w]

  5. Formatting :

     sudo mkfs.ext4 /dev/sda1
    

    Press [y] when prompted.

    ๐Ÿ’ก
    DO NOT MOUNT THE DRIVE
  6. Repeat steps 1-5 above for other drives.


CREATE RAID ARRAY

  • Update the system and install 'mdadm' RAID package :

      sudo apt-get update
      sudo apt-get upgrade
      sudo apt-get install mdadm
    
  • Find out the mount points for each drive :

      blkid
    

    OR

      lsblk
    
  • Create RAID volume/array :

    Linear Mode

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

    RAID-0 (Stripe Mode)

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

    OR

      sudo mdadm -Cv /dev/md0 -l0 -n2 /dev/sd[ab]1
    

    RAID-1 (Mirror Mode)

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

    OR

      sudo mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[ab]1
    

    RAID-4/5/6

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

    RAID-10

      sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
    
  • Confirm RAID array :

      cat /proc/mdstat
    
  • Save RAID array :

      sudo -i  
      mdadm --detail --scan >> /etc/mdadm/mdadm.conf  
      less /etc/mdadm/mdadm.conf  
      exit
    
  • Create file system :

      sudo mkfs.ext4 -v -m .1 -b 4096 -E stride=32,stripe-width=64 /dev/md0
    
    ๐Ÿ’ก
    NOTE: To change advanced parameters after creation if needed :
      tune2fs -E stride=n,stripe-width=m /dev/md0
    
  • Create a mount point and mount file system :

      sudo mkdir /mnt/raidx  
      sudo mount /dev/md0 /mnt/raidx
    
    ๐Ÿ’ก
    NOTE: To change the owner of the mount point to pi :
      sudo chown pi:pi /mnt/raidx
    
  • Check the content of the mounted file system :

      ls -la /mnt/raidx
    
  • Confirm its capacity :

      df -h -x devtmpfs -x tmpfs
    

  • 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
    
  • Check the UUID of the mounted file system :

      blkid
    

    OR

      ls -l /dev/disk/by-uuid
    
  • Add to fstab (make the drive permanent and auto mount drive at boot) :

      sudo nano /etc/fstab
    

    Enter a new line before the bottom comments and add :

      UUID=(my_uuid) /mnt/raidx ext4 defaults,noatime 0 0
    
  • Save and exit :

    [Ctrl+O]
    [Ctrl+X]

  • Retrieve drive parameters and test speeds (optional) :

      sudo hdparm -I /dev/md0
      sudo hdparm -tT --direct /dev/md0
    
  • Reboot

      sudo reboot
    

Useful commands/Manage Mode

$ cat /proc/mdstat: show the status of all RAID devices
$ mdadm --detail /dev/md0 : detailed information about RAID md0 (mdadm -D)
$ mdadm --detail --brief /dev/md0 : for shortened/brief details (mdadm -Db)
$ mdadm --query /dev/md0 : quick human-readable summary of RAID md0 (mdadm -Q)
$ mdadm --examine /dev/sdx: information about RAID component device sdx (mdadm -E)
$ mdadm --stop /dev/md0 : stop RAID device md0
$ mdadm --assemble --scan: restart/assemble RAID device


SET UP NAS

  • Install SAMBA

      sudo apt-get install samba samba-common-bin
    
  • Set up SAMBA password (for user pi) :

      sudo smbpasswd -a pi
    
  • Edit SAMBA config file :

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

    Scroll down to the bottom of the file and add the following code to create NAS file share :

      # NAS Share Block  
      [NAS]  
      path = /mnt/raidx  
      comment = RPI4 RAID0 NAS Server  
      volume = NAS-Server  
      valid users = pi  
      read only = NO  
      guest ok = NO  
      public = NO  
      writable = YES  
      browsable = YES  
      ### -rwxr--r--  
      create mask = 0744  
      ### -rwxr-xr-x  
      directory mask = 0755  
      ### All hosts on the 192.168.142 subnet allowed:  
      hosts allow = 192.168.142.
    
  • Save and exit :
    [Ctrl+O]
    [Ctrl+X]


  • Check the configuration file for internal correctness :

      testparm
    
  • Restart SAMBA service :

      sudo /etc/init.d/samba restart
    

    OR

      sudo service smbd restart
    
  • Reboot

      sudo reboot
    

USAGE ON MAC

  • Open Finder

  • Menu "Go" โŸถ "Connect to Server..."

Address: [smb://rpi4/NAS]

  • [Connect]

  • Connect As:

  • Registered User

Name: pi
Password: โ—โ—โ—โ—โ—โ—โ—โ—

  • [Connect]

APPENDIX

COMMANDS TO CHECK

$ rsync options source destination : remote/local file-copying tool
$ rsync -ahv /mnt/u1/ /mnt/u2/ : example of the above

RAID LEVELS

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)


REFERENCES

โ‡’ mdadm(8) - Linux man page
โ‡’ How To Manage RAID Arrays with mdadm
โ‡’ Advantages and disadvantages of various RAID levels
โ‡’ RAID setup
โ‡’ A guide to mdadm
โ‡’ Characteristics of Linux RAID levels
โ‡’ Build your own Raspberry Pi NAS
โ‡’ How to set up a Raspberry Pi Samba Server
โ‡’ Build a Raspberry Pi RAID NAS Server โ€“ Complete DIY Guide
โ‡’ Partitioning, Formatting, and Mounting a Hard Drive in Linux

Did you find this article valuable?

Support Akash S by becoming a sponsor. Any amount is appreciated!

ย