Raspberry Pi RAID NAS Server Setup
- Raspberry Pi 4 (4GB RAM)
- Micro SD card 64GB
- 2x Integral USB 3.1 flash drives 128GB
OS: - Raspbian Bullseye
FORMAT DRIVES¤
- 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
[o]
[n]
[p]
[1]
[Enter]
[Enter]
[w]
- Formatting:
$ sudo mkfs.ext4 /dev/sda1
*** DO NOT MOUNT THE DRIVE ***
- Repeat steps 1-4 above for other drives.
CREATE RAID ARRAY¤
- Update 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
$ 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
$ 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
$ 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 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 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 UUID of mounted file system:
-or-$ blkid
$ ls -l /dev/disk/by-uuid
-
Add to fstab (make the drive permanent and auto mount drive at boot):
$ sudo nano /etc/fstab
Enter 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 status of all RAID devices
$ mdadm --detail /dev/md0
: detailed information about RAID md0 (mdadm -D
)
$ mdadm --detail --brief /dev/md0
: for shorthened/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 all the way 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 configuration file for internal correctness:
$ testparm
- Restart SAMBA service:
$ sudo /etc/init.d/samba restart
$ 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 Setup a Raspberry Pi Samba Server
⇒ Build a Raspberry Pi RAID NAS Server – Complete DIY Guide
⇒ Partitioning, Formatting, and Mounting a Hard Drive in Linux