Raspberry Pi RAID NAS Server Setup

Search for a command to run...

I found this article helpful.
Pihole installation on RaspberryPi 4

Private CA and self-signed certs that work with Chrome This method is for testing and development only. The vast majority of users should not use this method, as it requires loading a cert on each of your devices, which is both error-prone and requir...

Nginx Proxy Manager Docker Container On Raspberry Pi 4

Introduction Tailscale lets you easily manage access to private resources, quickly SSH into devices on your network, and work securely from anywhere in the world. Installation Install with one command : curl -fsSL https://raw.githubusercontent.com/ak...

A Docker Based Server!

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
Insert drive and list existing partition tables :
sudo fdisk -l
Unmount drive (if needed) :
sudo unmount /media/pi/<HARD-DRIVE-LABEL>
Partitioning :
sudo fdisk /dev/sda
Press the following Keys when prompted :
[m] for help
[o]
[n]
[p]
[1]
[Enter]
[Enter]
[w]
Formatting :
sudo mkfs.ext4 /dev/sda1
Press [y] when prompted.
Repeat steps 1-5 above for other drives.
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 :
sudo mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sda1 /dev/sdb1
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
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
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
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
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
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
$ 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
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
Open Finder
Menu "Go" โถ "Connect to Server..."
Address: [smb://rpi4/NAS]
[Connect]
Connect As:
Registered User
Name: pi
Password: โโโโโโโโ
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)
โ 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