So I’ve been a long time Synology user. I think their machines are great. I have had three models over the years, the latest one is a DS415+

Having a pre-made NAS has its own set of drawbacks, as mentioned here:

But considering I’m a curious person and the fact that I have some hardware from a previous PC build doing nothing, I decided to build my own NAS.

So even though I’m a big fan of Synology boxes, I decided to go in another direction because:

I’m a fairly advanced user. And I’m not a SysAdmin, but I’ve had my fair share of developing scripts and I’m very familiar with the Linux console Synology software is awesome, but honestly their machines are a bit underpowered. In some cases, this is partially justifiable: those ARM-based CPUs consume little power and in general, serving files should not require massive hardware. When you start to heavily use a machine like this, you go beyond just serving files, and your need for both storage and processing capacity can grow overnight. Scaling on a premade NAS box can become really expensive, specially if you are interested on x86-type CPUs

I have been toying with this DIY NAS idea for a long time, but there was always something that held me back. Over that time, I have had the opportunity to look at different options (I’m only considering open-source options):

FreeNAS: It may be the most popular NAS operating system. One of its strongest features may be the use of ZFS. It has a strong community. I didn’t like it: the GUI looks ancient; it is FreeBSD-based, and I feel familiar with Linux; The minimum hardware requirements and recommendations were off with my available hardware, and it doesn’t have a very well defined Docker support. You cannot fully utilize different-sized disks on a ZFS pool, and this was a deal breaker to me, as for home usage I find opportunity of adding any drives I find on sale.

NAS4Free: Less popular than FreeNAS but it is certainly an option. To me, it was just more of the same as it was the case of FreeNAS.

unRAID: This may be the second most popular option. It is Debian-based (Linux). It is fast (once it loads up). It has Docker support. Nice community. You can use different-sized disks. It can use SSDs for caching. What I didn’t like: The whole thing about installing and running the OS from a USB stick didn’t feel right to me. I mean, why would I invest hundreds of dollars on SATA drives, CPU, RAM, Motherboard, Chasis, PSU and so on, when everything will boot from an USB drive? That makes no sense to me. The GUI looks like a website from the 90s. There is a lifetime fee for a license (unRAID is developed and commercially maintained by a company), and then if you scale, you have to buy licenses again (I guess this is fine, and I respect that, but I personally prefer to invest in hardware). Finally, I had some strange errors sometimes and the interface froze on me a couple times. I also remember I tried to create a boot USB and somehow my thumb drive was blacklisted, with no previous use for that.

Ubuntu server + a bunch of packages on it: I really liked this option. Almost there, I guess. I created my own Dockers using docker-compose but it had three main issues: 1) Adding/managing disks using MergerFS + SnapRAID via command line wasn’t friendly and a way to potential disaster 2) Having a dedicated GUI is nice, because script your way all the time can be overwhelming over time, specially when you want to do something quick, like setting up a new share 3) The complexity of having different (but related) packages on a system to work in concert in an integrated way can become difficult, and perhaps even too much work for a home server.

Then I stumbled upon Openmediavault. It ticked all my checkboxes. I installed on a VM and I could verify it did all I am interested in.

So this is my server part list.

There are a few “lies” in that part list. The smaller SSD is from another brand that I could not find on PCPartpicker or Amazon, so I replaced with some Kingston drive. For the bigger SSD, in reality I have a Samsung CM871a that I also could not find anywhere. The 8TB drives are not really WD Red, but WD “white label”; those are disks “shucked” from WD EasyStore drives. More info here.

I basically already had all the parts, except for the ones explicitly specified. For a home NAS server, this might be a little overkill, but I think I have some other ideas down the line to take advantage of the hardware. But anyway, my general design considerations are:

A case with the ability of holding up to 10 3.5" HDDs (or at least 8 + my SSDs).

A CPU robust enough to do Plex transcoding

A motherboard with as much SATA ports as possible. I got 10 on that motherboard, but SSDs will use 2, so I’m down to 8. In any case, I can add an expansion card later, if I need it.

The ability to run Docker containers

Be able to use disks of potentially different capacities and have 1-drive parity (hence MergerFS + SnapRAID)

The OS will be installed on the smaller SSD (120GB, as boot drive)

The other SSD (256GB, as “hot” drive) will be used to hold downloads and bittorrrent seeds. This is also where plex trancodes will be done and the files for Docker containers will be stored. So in essence, this will a somewhat busy drive, and that is why I wanted an SSD here. Then the files that rarely change, will go to main storage (as expected from a media server).

To install OMV, I recommend this video:

To set-up MergerFS + SnapRAID I recommend this guide.

Now, on to install Docker and a bittorrent client. I prefer Deluge over Transmission, but whatever:

To install Plex:

And finally, Radarr, Sonarr and Jackett:

So here are some pictures and screenshots of the build:

Some of the parts before building

The case arrived

Starting build

Boot and OS install

So this is how you take out the drive cages

Each drive cage can hold up to 4 3.5-inch drives

Everything in place, cable management only thing pending

SysInfo right after install

List of disks attached to the system

List of filesystems and their corresponding type across all disks. MergerFS on datapool01

Data pool composition

SnapRAID config. 1-drive parity

My file shares

Some performance graph. SnapRAID Sync was executing, photos were being indexed by Plex the night before

RAM usage. SnapRAID Sync was running

Network traffic stats

My list of Docker containers. I got everything I needed

I installed Muximux on a Docker container, which gives me access to all those apps from a single point

Typical system status after installation

Finished product

To migrate all my data, I used used the “Remote mount” plugin to mount shares from my old NAS box to my new machine (all mounted shares will be under ‘/srv’ dir, just replace source and destination dir/file):

rsync -rva /src /dst

I really enjoyed working on this project. I already pointed most of my client devices to the server. So far so good.

Let me know if you have any questions of the comments section.

Cheers!

EDIT: There is now a part 2, get it here.