STFN

State of my homelab/NAS in June 2024

20 minutes

Almost a year has passed since I last wrote about the the state of my homelab. Basically every component of it has been replaced since that time, and so I decided to write a new episode.

As in the previous iteration, I have a combined server and NAS for my homelab. The more proper way would be to divide it into separate units, but due to space, power and budget constrains, I’m running a single box to both host my services and store data.

And this iteration is quite a revolution, I finally went with a “desktop” PC, with proper storage and low-power, but reasonable specs.

Hardware

Tha hardware used for this build is mostly stuff I already had lying around, coming from my old “gaming” desktop, or from Alicja’s (my wife <3) Netflix box. She used to have a small mATX PC connected to a TV, but a month ago I found a good deal for a Fujitsu USFF desktop computer, gave it to her, and reacquired her PC for parts for my NAS.

Actually, the only parts I bought specifically for the homelab were the hard drives.

The inside
of my new homelab server. The particular parts are described in the blog post.The inside of my new homelab server

The case is a Cooler Master Elite back from 2014 which was the basis for my first very own desktop PC. It’s age is visible in the fact that it has three 5.25” trays (who uses 5.25” trays anymore?!), and there are no means for cable management. But for my needs it’s great, it can store a lot of hard drives, and the airflow is good. It even still has the DVD drive/burner that was useful a decade ago. I would remove it, but I don’t have the replacement mesh cover for the front, so the DVD drive works as a high-tech plug for the front of the case. How the times have changed.

The motherboard is a Gigabyte GA-Z97P-D3. Not much to say about it. It has a 1150 socket, six SATA ports and four RAM slots. Typical of the time. The webpage for it says that it supports NVME drives via PCIe, something I might investigate in the future. If the system could boot from an NVME drive in a PCIe slot, then I could use the whole six SATA ports for storage.

The CPU is more interesting than the motherboard. It is an i3-4170T with two cores, four threads. The T in the name denotes that it is a low power variant, with only 35W of TDP. From what I’ve seen so far, it is absolutely fast enough for the tasks I throw at it.

The CPU cooler is a SilentiumPC Spartan 5 120mm, an overkill for the 35W TDP CPU, but that allows it to run at the lowest possible speed, making the build almost silent.

The RAM is just some 32GB in four sticks of 8GB, 1600MT/s. It works. It’s not ECC. Maybe one day I will move to a system with ECC RAM?

The PSU is a Seasonic 500W low tier model. It has only Bronze rating, I’m using it as it is also a hand-me-down from a previous build. If I were to buy a power supply specifically for a homelab, I would go with a Gold or Platinum rating.

For cooling the drives, there is a BeQuiet! 120mm fan in the front. Also set to run in silent mode. All in all, I have no problems living and sleeping in the same room as the box, the fan hum drowns out in the background noise.

Finally there is the PCIE Wi-Fi card, because again, due to space constrains in the vicinity of the router, the NAS needs to use wireless to connect to the rest of the network. Not perfect but here we are.

Drives

The drives are a mix of ones bought specifically for it to be a NAS, and ones taken from the previous iteration of my homelab.

The inside
of my new homelab server, closeup on the four drives.The drives. There’s still room for more.

The boot drive is a 500GB SSD from my previous homelab.

The main storage is a pair of 4TB HDDs, one WD Pro, and one Seagate Ironwolf. Both are CMR, 5600rpm

The secondary, “fast” storage is a pair of 2.5”, 1TB SSDs.

And there is also a single 500GB SSD just because I had nothing to do with it. Currently it serves as a place to store random, temporary files.

Six drives in total, populating all of the available SATA ports. If one day I need more ports, I will probably buy a PCIe expansion card for either NVME or SATA drives.

The case had no place for 2.5” drives, another sign of it’s age, so the four SSDs live in this shiny 3.5” -> 2.5” adapter cage.

The yellow and red spaghetti in the middle is there because the PSU did not have enough SATA power ports, and I had to buy MOLEX to SATA power converters. They are not pretty but they work.

Storage configuration

All drives, apart from the boot one, use ZFS. For the boot drive I stayed with ext4, to save myself the hassle of setting up ZFS-on-boot in Debian.

The two HDDs run in a ZFS mirror, the same as the two 1TB SSDs. The remaining 500GB SSD is a ZFS single.

The pools are shared over the network using NFS configured straight in ZFS.

One thing that surprised me is that I cannot see detailed statistics of how full the drivers are, neither via Prometheus nor Telegraf. This is possible, but only under FreeBSD. For reasons I don’t exactly understand, Linux does not have such powers.

And from the few weeks that I have been using my NAS, I can see that what they say that “ZFS likes RAM” is true. Any larger copying operation results in most of those 32GB of RAM being occupied.

Software

As the box is not only a NAS, but also a homelab, it runs several self-hosted services.

The operating system is Debian 12 Bookworm. I think you can already see that the name of this build is simplicity and “just-workism” and Debian fits into this philosophy perfectly.

The systems run a mix of ways, most of them are Docker containers, but some are systemd daemons. I don’t know and don’t care much about the systemd drama in the Linux world, for me it’s an awesome tool, and I’ve been liking it even more once I learnt how to daemonize stuff myself.

Screenshot
of my homepage. More detailed description in the blog post.The dashboard

Homepage

For the dashboard of my homelab, I am running homepage. I switched to it from Dashy because the editing workflow for Dashy was for me janky at best. Homepage is edited by writing YAML files, which I found much cleaner and simpler.

Metube

Metube is a Youtube downloading service. I’m surprised it’s still running with all those YT wars with ad blockers and the like. I try to download as much stuff from YT as possible before they lock it down even further. Great for getting music and tutorials.

FreshRSS

FreshRSS is a self-hosted RSS reader with a clean UI.

Navidrome

Navidrome is a music player. I still have some mp3s that I bought on Basecamp.

PhotoPrism

One of my newest discoveries, PhotoPrism is a self-hosted photo management app, similar in UI to iPhotos on the IOS cloud. A cool feature is that it can do object detection on the photos, and tag and sort them based on what it finds. One day I will write a longer blog post on it.

Podgrab

Podgrab is an app to automatically download new podcast episodes as they appear. Actually, I use this app only for preservation (a.k.a hoarding) of podcasts, I listen to them only on my phone using AntennaPod.

Grafana, InfluxDB, Prometheus

My monitoring solution is based on Prometheus and Node Exporter collecting metrics, InfluxDB digesting them, and Grafana as the presentation layer. Also a topic for a future blog post.

Cockpit

Cockpit is a web interface for server management, allows reviewing and modyfying settings, updating software, reading logs, all that sysadmin stuff.

PiHole

Who said PiHole can only be installed on a Pi? I’m sure most homelabbers use it, it’s a DNS based adblocker.

FlatNotes

FlatNotes - a super simple app for making notes. I use it to make drafts of new blog posts. The notes are saved as markup file straight on the disk, allowing for easy backup

IT Tools

A set of tools in a single Docker container useful for any software developer. I use them all the time, mostly for formatting JSON files, generating UUIDs, all those small things that have to be done.

Forgejo

Forgejo is a self-hosted git repository manager, a great alternative to GitHub. It also supports actions similar to GitHub Actions. I use it to store my blog repo, and publish it live on every merge to main. Forgejo I am running as a systemd service.

Hoarder

Hoarder is a new app, still under development. It’s a bookmark manager with a nice trick up its sleeve: It can use AI to tag newly added bookmarks. There will soon be a whole separate blog post on this.

Bottom Text

Having a homelab is an iterative journey. My first homelab was a single Raspberry Pi Zero running PiHole. I then moved to a pair of Pi 4s, then an old Thinkpad, and now I arrived at having a “desktop” box with redundant storage and a lot of RAM. I’m happy where I am now, and I learnt a ton along the way.

Cosplaying as a sysadmin ((c) Jeff Geerling) gives you a wide set of skills, and, at least for me, I am using some of them in my day work. For example, without a homelab I would not have learnt so much about Docker, something that I use everyday for my job, and I can put on my resume.

One thing I need to take a closer look at is power consumption. I don’t have a wall meter yet, so I don’t know how much power the box is drawing. Something that I will tackle in the near future and report my findings.

I already have a plan how to enhance my homelab, so stay tuned! And you can stay tuned by subscribing to my RSS feed. Please do not “smash the like button” as I don’t have one.

Thanks for reading!

If you enjoyed this post, please consider helping me make new projects by supporting me on the following crowdfunding sites. Your donation will also go towards a new iteration of my homelab :)