Hardware:
- Raspberry Pi 4 (4GB RAM)
- Micro SD card 32GB
- 2x Integral USB 3.1 flash drives 128GB
OS:
- Raspbian Buster
-
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
[m] for help
[o]
[n]
[p]
[1]
[Enter]
[Enter]
[w] -
Formatting:
$ sudo mkfs.ext4 /dev/sda1
[y]
*** DO NOT MOUNT THE DRIVE ***
-
Repeat steps 1-4 above for other drives.
-
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
-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 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:
$ 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 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
-
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
-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: ●●●●●●●● -
[Connect]
$ rsync options source destination
: remote/local file-copying tool
$ rsync -ahv /mnt/u1/ /mnt/u2/
: example of the above
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 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
don't copy the brackets around the UUID in step 12 into fstab (like I did - d'oh). If you do, the Pi won't boot with the message "cannot open access to console, the root account is locked". To fix this you need to mount the SD card on another working computer and edit /etc/fstab to remove the mistake.