I wanted a NAS for my home network. I could have just built a PC and shoved some hard drives in it. I wasn’t really interested in that approach at this time, because hardware prices are very high right now. Also size, noise, and power consumption is higher than a dedicated NAS. I also could have just bought an off the shelf NAS. The biggest downside here is price and ability to upgrade.
This is what I purchased though not the prices I paid. I got the hard drive enclosure from ebay, the raspberry pi 4 from pishop.us and had the microsd card laying around. Sadly the U shaped connector did limit my file transfer rates (cut them in half), so I’ve since ditched it. I really like how it looked, but it’s on the back of the NAS which my terrible cutting has made look bad anyway. The pi is powered off the 5 volt pins from the sata power inside the enclosure. I just took the sata male power connector and spliced it into the 90 degree usb c cable. You could definitely save some money by going with a usb 3.0 model, one without hardware RAID (I’m not using it), and if you want to go with a 4 bay enclosure (for 3 usable bays). You could also go with a pi with 4gigs of ram, and the heatsink with a fan is overkill. With all those omissions, you could build it for around $200.00.
Why do this?
I did this because I wanted to see if it would work. I was surprised how little similar projects I could find on the internet. There are plenty of NAS projects using compute modules and small batch boards. Also there are projects using 3d printed cases. I have not found anyone else taking a multi-bay usb enclosure and turning it into a self contained NAS. Other upsides are price and upgrade-ability. If they come out with a pi5 it should be trivial to swap it out and have a more powerful NAS.
Why shouldn’t you do this?
You are ultimately connecting up to 4 sata drives over a single usb 3.0 port. This bottlenecks access speeds, it’s fast enough for my uses, but something to keep in mind. If you need a high performance solution, this isn’t it. The project took some trial and error to get it working. And it probably isn’t the most reliable solution out there.
Someone brought to my attention that USB 3.0 has a capacity of 4.8Gb/s. It may still be a limiting factor. I’m only using a gigabit Ethernet connection, so that is the biggest bottleneck in this setup.
Thanks for reading
I’m probably overly proud of this thing. It looks better than an old computer. It’s specs are better than an off the shelf solution. And it feels like an original idea.
Its a single board computer similar to a raspberry pi that could be found for under $35.00. And to be honest it’s pretty terrible.
What’s bad about this board? The board doesn’t sit level on a surface because it has the gpio on the bottom.
It has a buggy bios and can be difficult to set up initially. It is pretty limited by 2gb of ram. Unless you buy another board to power it, you have to wire power through the gpio pins.
So why am I talking about it? Well what distinguishes this board is it can do hardware video encoding and decoding via Intel’s quick sync feature. This chart shows what formats the chip can do in hardware (the column labeled Cherry Tail).
This allows the board to punch way above its price point. Personally I’ve been running a plex server on this board since February 2020. I have not found its limit in a practical test. I have 3 TVs in the house with Rokus attached to them, and some people in my family who will stream content remotely. Generally I’ll peak at 3 or 4 simultaneous streams at the same time, and this board handles it with no issues. I’ve even pushed it to 7 streams with no noticeable issues. i honestly think my internet connection (currently 20 megabit upload) is the bottleneck I’ll hit first.
Storage Personally I have a raspberry pi running Open Media Vault with a 6TB Western Digital hard drive attached. All my media is on that server and I only have a small thumb drive attached to the plex server to hold configuration files. If you want to go that route, I plan to write an article on my NAS (network attached storage) in the future. If you don’t want to do this, you can attach a usb 3 hard drive directly to the atomic pi and put all your media there. I’ll go over both in future articles.
How much storage do I need? That will obviously vary person to person, but I’ll give you my rough setup. I have around 300 movies that are 1080p, and about 50 tv series and tens of thousands of songs. All that media is less than 2 terabytes. My 6tb drive will suite me for the foreseeable future. I also have plenty of hard drives in other computers where I have backups of all my media in case that drive fails (so I don’t worry about redundancy).
Plex Pass You can run a plex server without Plex Pass. But to get the most out of this little board you should use Hardware transcoding (what that chart above refers to) which is a feature only available with the paid plan. At $5 / month I think it’s worth it.
Powering the Atomic Pi The easiest way to power the Atomic pi is to buy the power supply and breakout board in the parts list above.
However you can power it with any 5volt 3 amp source to the gpio. You’ll need to run 2 hot wires and 2 ground. Hot should go to pins 3 and 5 and ground to pins 4 and 6.
One more note. That button on the board is not a power or reset switch. It’s a CMOS reset switch. holding that will reset the BIOS to factory defaults, so don’t push it thinking that it will just reboot the board.
Network The atomic pi has a wireless chip on it, however since it’s going to be a server I highly suggest using wired networking. If you still want or need to use wifi, here’s a spec sheet on it.
First Boot You’ll need a HDMI cable, monitor and a keyboard connected for your first boot. plug those things in first then plug the power into the board. When you see the following screen press the delete key a few times so that it will go into the bios.
When you’re in the bios you can play around with plenty of settings, but I had to set the following to get it to boot. Go to the Boot menu and change the OS Image Id to Android and change the Boot Options #1 to Android-IA then save changes and reboot. It should bring up a GUI with a login screen. On that login screen it will show the default password on that screen. Write down that password and shut down the machine.
Second Boot For your second boot you will only need the network cable plugged in, the power supply and the usb storage device (flash drive or hdd). This is when you can put the board in its case if you got one, and put it where it will live long term. After it is plugged in give it time to boot and then you can ssh in to it from another machine. The login is atomicpi and the password is what was displayed on the login screen.
Mount the usb drive 1. You’ll need to create a folder as a mount point traditionally it’s in a mnt folder sudo mkdir /mnt/usbdrive 2. get the partition name of the usb drive sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL 3. mount the usb drive to the mnt folder sudo mount /dev/sda1 /mnt/usbdrive 4. then you can navigate to the drive with cd /mnt/usbdrive
Mount a network drive 1. You need to install cifs-utils sudo apt-get install cifs-utils 2. Create a mount point mkdir /mnt/networkdrive 3. Create a user on the target machine 4. Mount the network drive sudo mount -t cifs -o username=[networkUser] //10.0.1.5/files/ /mnt/networkdrive/ This would mount a drive on the host machine 10.0.1.5 to /mnt/networkdrive. After running this command it will ask you for the [networkUser] password.
You can set the system up so that it auto mounts these drives on boot, but since I’ve only rebooted the machine once or twice in months I haven’t bothered yet.
Other Configurations Install Nano (a text editor) sudo apt install nano Change Hostname sudo nano /etc/hostname I called my plex server AtomicPlex sudo nano /etc/hosts Make sure Docker is installed docker -v
Create a Plex container Personally I use docker-compose to manage all my containers. Here’s an example of my docker-compose.yml file.
This creates a docker container that connects to a network drive for its media, and connects to a flash drive for its configuration. (plex does not support configuration being stored on a network drive).
Running the Container In order to run the above container navigate to the directory with docker-compose.yml file. Then run the following command sudo docker-compose up -d plex
Finally You can navigate to http://atomicplex:32400 Where [atomicplex] is the hostname or ip address of your atomic pi server.