Time: 40 Minutes

Generally I don’t really care about the details or best practices but over my career I have learned the importance of why best practices exist. I decided to build my own NAS from parts I had laying around. I had a RPi 4 model b (2 gb) and (2) 2 tb firecuda drives (spindle drives) I bought two sata to usb cables with power adapters to complete this build.

This is kind of a long article I apologize, but I felt the need to give all of the details of this particular build.

Here are the Pre-Requisites:
1 – Ubuntu Server/RPi OS Bullseye/Bookworm
2 – Webmin installed to manage it.
3 – iSCSI, nfs-kernel-server, & Samba-Cifs

note: If using the RPi 4 Device you will need the following:

1 – RPi 4 Model B Device
2 – (2) sata to usb cables/adapter w/power adapter
3 – (2) 2tb Hard Drives
4 – RPi OS installed on the device
5 – 30 minutes of time
6 – patience

Use RPi Imager to burn the os to the SD Card:

Erase the SD Card unless it’s new.
Choose the correct sd card.
Click write to start the erase procedure.
Click YES
Click Continue
Choose OS again then
Raspberry Pi OS or Other (Ubuntu Server is located under here).
Choose RPi OS Lite (Highlighted is Buster)
Choose your storage
Choose the Customisation tool on the right
Give the device your hostname
Enable SSH
Set the username and password
Set your timezone here
Uncheck Telemetry and Click Save button, Then Click write to start.
Click YES
Click Continue

Remove the SD Card and plug it back in we have some things we need to do before we boot the pi with it.

Open File Explorer

Open cmdline.txt with a text editor
sudo nano -c /boot/cmdline.txt on Ubuntu Server it’s sudo nano -c /boot/firmware/cmdline.txt

The Above can be copied and pasted into this file I always put it at the start of the line:

ip=12.18.2.21::12.18.2.1:255.255.255.0:rpi4-k3s-w02:eth0:off cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 swapaccount=1

Next we need to open the config.txt

sudo nano -c /boot/config.txt on Ubuntu Server it’s sudo nano -c /boot/firmware/config.txt
### This will disable WiFi and Bluetooth ###
dtoverlay=disable-wifi
dtoverlay=disable-bt
# dtparam=audio=on
dtparam=audio=off
### Add on the last line after the [all] section This makes sure 64bit is used ###
arm_64bit=1

note: Plug the SD Card back into the Pi and power it on. After it boots; ssh in to the Pi for the next steps.

Make sure we update the repositories and the OS packages
1 – sudo apt update && sudo apt -y full-upgrade
Let’s install the needed software, so that you cover the whole spectrum of a NAS Server:
2 – sudo apt -y install tgt samba nfs-kernel-server mdadm rsync dump
Check to see if the drives are recognized:
3 – sudo lsblk
Create the RAID array
Use double dashes in the command on line 4 please. I like to use all my space so I use raid 0.
4 – sudo mdadm –create –verbose /dev/md0 –level=0 –raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
Let’s make sure it was created properly
5 – cat /proc/mdstat
md0 : active raid0 sdc[1] sdb[0]
9767276544 blocks super 1.2 512k chunks


Create the filsystem on the raid
6 – sudo mkfs.ext4 /dev/md0
Create the mount point
7 – sudo mkdir -p /media/Stor1
8 – sudo mount /dev/md0 /media/Stor1
Let’s append the config to the mdadm config file
9 – sudo mdadm –detail –scan –verbose | sudo tee -a /etc/mdadm/mdadm.conf
Enable the Raid at boot
10 – sudo update-initramfs -u
Put the raid mount point in the fstab file
11 – sudo nano -c /etc/fstab
12 – /dev/md0 /media/Stor1 ext4 defaults,nofail,discard 0 0
Test the raid to make sure it’s functioning properly
13 – sudo chmod -Rf 777 /media/Stor1/
14 – sudo timedatectl set-timezone America/New_York

Let’s install your new GUI: (IF YOU ARE INSTALLING THIS ON A RPi 4 GOTO RPi4 install below)
15 – sudo apt -y install software-properties-common apt-transport-https
16 – apt-key list
# look for the jcameron-key if it's not there then do the following. #
17 - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys D97A3AE911F63C51

18 – sudo nano -c /etc/apt/sources.list
## Add this to bottom of the file - Webmin Repositories ##
deb http://download.webmin.com/download/repository sarge contrib

19 – sudo apt update && sudo apt -y install webmin
20 – sudo systemctl status webmin
Goto the interface in your browser after the script has completed.
21 – https://[your server’s IP]:10000/

### and login with your account. ###

Your NAS login
This is your dashboard
You will need to create your directories.

On the left navigation goto Tools>File Manager
I created my directories under /mnt directory
Mine look like this /mnt/Stor2/dir_name_here

/mnt/Stor2/dir_name_here

Now we need to share them. I will use NFS here, but I will also give an example smb/cifs/samba.

On the left goto Networking > NFS Exports > Click the hamburger to open up the screen.
Add a new export
Use the highlighted portions
Make sure to choose no on read-only and no on clients must be on secure port.
Check all the shares then click Enable Selected then Apply Changes

Enable Samba Share

On the left goto Servers > Samaba Windows File Sharing
Choose create new file share
Name your share > navigate to share location > Create with permissions 777 or whatever you want.
Click on the share you created
Click on Security an Control
Choose Yes on Writable and Choose Yes on Guest Access
Check your File permissions, make sure they are correct.
Check the share then click the Restart Samba Servers

That completes the process for Samba/NFS shares. If you have any questions you can email us support@rpihobby.us. Also use the comments also if you like.

I will not take credit for The Virtualmin Install part I posted earlier. The individual below gets all the credit. This is per enzochzng on the Raspberry Pi forums, Post is here.
RPi4 NAS Device

Thank you for reading and stopping by.

By Michael Cooper

30 years in IT last 15 as a Senior Systems Engineer. GO BUCKS!

Leave a Reply

Your email address will not be published. Required fields are marked *