My self-hosting adventure started during my university days. Once I actually had money to buy myself a decent used laptop (ThinkPad T430) that had more than 3GB of RAM that my ThinkPad T60 had, I could use some of my older hardware as testbeds for any of the stupid ideas that I had. For someone that liked to learn more about Linux and wanted any excuse to play around with hardware, something like a RAID0 setup over 4 80GB Samsung hard drives on an old PC setup sounded great.
I also had a small collection of data that I had on an 1TB external hard drive, and I wanted to also have backups of the data that lived on my laptop. This was the main motivation for setting up a machine that would serve as a NAS and a testbed for anything that I wanted to try out.
The first box: AMD Athlon 64 X2 4200+ based PC
At this point in time, I didn’t really have any names for my systems. They were simply named by the model of the machine or whatever else I had in mind.
One of the first “server” builds that I built was based on some old parts I had lying around. The CPU was from an old family PC that we got in 2006, and to this date, it is the only surviving component from that build. The motherboard was from a place that collected old hardware and resold some of it and if I remember correctly, it was the abit KN9 Ultra. AM2 socket, DDR2, 6 SATA ports, all that good stuff. This was coupled with 4GB of DDR2 memory. Not much, but it is a start.
The details regarding the hard drive situation are a bit hazy, but at least initially it hosted whatever drives I had around. At some point I managed to buy 8x 500GB hard drives to test out ZFS on a big array. This was mainly inspired by the glorious 32TB server build in an NZXT S340 case that someone showed off in Reddit. I’m still surprised that it was acceptable for me to be in the same room as that monstrosity.
This setup ran well for a while and there weren’t any hardware issues with this setup. Drives were OK, speed was acceptable, and ZFS did its job well, since this was all a big RAID-Z3 array. I even removed two drives temporarily to put in a GPU at one point and ZFS did not complain. After putting the drives back in, the drives were resilvered and all was good.
The engoodening of my server: AMD Ryzen
2017-2018 was wild in the world of CPU-s. AMD came in with some well-designed CPU-s that provided a much better value proposition than the competing Intel CPU-s at the time. The value was insane: double the cores for the same price! It didn’t take much for me to be convinced that the next server build will be an AMD Ryzen based machine, and as soon as I had the resources, I got myself parts for doing that upgrade.
The build wasn’t without hiccups, though. I discovered that cats really like playing around with screws and walking on all the expensive computer parts that took up half of the free space in the apartment. Nevertheless, I managed to complete the build.
Due to reasons that have no rational explanations, I started looking into switching out this perfectly working server machine into something more power efficient. The CPU sat idle most of the time and I figured that I could use the machine somewhere else.
And thus, one of the stupidest server builds was born: a ThinkPad X230 serving as a server, with two 4TB WD Red hard drives attached over USB 3.0, running BTRFS RAID1. I do not have pictures of the setup, but this was pretty much it. I learned soon after that cats like climbing on things and that they have no understanding of the amount of force that is required to temporarily disconnect the USB 3 cable from the laptop. This is the part where BTRFS failed on me and I actually lost data in the array. Luckily I had working backups.
Not long after this incident, I started looking for alternatives.
Low power, but still somewhat usable?
My search criteria was quite simple:
- low power (ruled out any desktop builds)
- x86 based (no OS lock-in)
- hosts at least 2 drives over SATA
- reasonably priced
The closest match I could find was the TerraMaster F2-221. It has a low-power Intel CPU, standard UEFI implementation, fits two drives and has two SATA ports. The only part that it really didn’t fit under well was the reasonable cost aspect, but it was still much more affordable than the alternatives.
Around this time I also discovered the world of shucking. I got myself two 8TB WD MyBook drives and used them in this build. However, what I did not take into account was the noise. These 8TB drives were much louder than the 4TB WD Red drives that I used previously, and allegedly this is due to WD labelling these drives as “5400-rpm class”, even though they actually run at 7200 rpm. The TerraMaster NAS unit had no vibration dampeners or other methods to isolate the noise, so I had to stick it in a closet.
The TerraMaster build was otherwise great. I could upgrade the RAM to 10GB using the available DDR3 SODIMM slot on the board, and the services that ran on it were fine. This thing could even run Jellyfin, assuming that you utilized the integrated GPU to provide hardware acceleration for transcoding video.
However, there were some limitations for this setup:
- OS lives on an USB drive. Generally fine, but depending on your setup you could pick between internal USB 2.0 ports or one of the USB 3.0 ports at the back.
- When you have lots of small files and a database on the system as well, the lack of SSD base storage became quite painful. You could do it over the available USB 3.0 ports on the back, but that’s it.
Back to the desktop
Due to a combination of me getting two ITX builds and having workloads that are performance-sensitive (PostgreSQL, Nextcloud, Jellyfin), I decided to go back to where I started from and put the setup back into a desktop case. For that purpose, I picked the Thermaltake Core V1, mainly due to how easy it is to build in it and it having room for 2x8TB hard drives and 2x 2.5" SSD-s.
This box was very fast. Too fast, in fact. It also used quite a lot of power. 70-120W doesn’t sound like much, but when this box is supposed to run for 24 hours a day, this really adds up. I had reached my storage target, the performance was acceptable and everything was working, which meant that the next logical step is to change the setup and hit some limits again.
Quest for low power usage
At this point, I had made it a game for myself to try to go as low as possible with the power usage of my setup while also running my workloads at an acceptable performance level. From my previous meddling, I had a ThinkPad T430 that now boasts 16GB of RAM and a 4-core Intel i7 3820QM quad-core CPU, which is plenty of performance. This laptop also houses up to three SSD-s, which meant that having performant storage around over SATA was also not an issue. The main storage (2x 8TB) was attached over USB 3.0. Not the best solution, but ZFS has handled these kinds of setups very well in my past experience.
Can we go even smaller?
Recently I have learned about tiny form factor machines produced by big OEM-s, such as Dell, HP and Lenovo. These machines are very compact, but can pack quite a punch with a desktop-level CPU and the ability to put in 16+GB of RAM while being powered by a laptop power supply. The only downside of these builds is that the internal storage can be limited to 1-2 drives (SATA or M.2 form factor) and not all USB ports might be USB 3.0.
Once I stumbled upon one offer for a Lenovo M73, I knew that I had to try this kind of setup out. Initially I was thinking
of using such a machine for media center purposes, but after I accidentally configured one too many UEFI settings for my
ThinkPad X230 in the advanced BIOS settings, I needed a replacement laptop. And thus, the ThinkPad T430 based server
was replaced by the M73. I did have to limit the CPU power usage using
intel_pstate driver and the USB 3.0 ports
needed a bit of bending so that they aren’t loose, but other than that it has been smooth sailing.
This is where the story ends for now. The machine takes about 13-15W when idling, and with 4 8TB external hard drives attached, the typical power usage is between 40-55W. I am planning on replacing the 4 drives with 2 high-capacity drives, something like a WD Elements/MyBook 14TB once those go on sale.
This is probably where the setup changes will stop for a while. I occasionally play around with some alternative setups to try to go even lower (Raspberry Pi 4), but so far this setup has proven to be the minimum viable server. It does everything that I need, the power usage is low and it has room for expandability with regards to services that I can run on it.
If I had to start from scratch, then I would probably opt for an AsRock Deskmini X300. It has the same power efficiency benefits, but you could install a more powerful CPU, a lot of RAM and up to 4 SSD-s, two of which can be NVMe drives.
The bulk storage would still be over USB 3.0, but that comes with its own benefits:
- you can not go over a reasonable amount of drives, meaning that your wallet will be happy.
- you do not need to shuck the drives, you can use them as-is and get warranty service without issues.
This has been my self-hosting journey throughout the years. I hope that it was at least somewhat interesting and maybe gave you some ideas to test out on your own.
If you prefer to share your thoughts on this post privately, just send me an e-mail!