A New NAS: Eir

A few years ago I built my NAS / Homelab, which I named Tyr, following my convention of naming devices on my local network after the Norse pantheon. It rapidly became a critical piece of my personal infrastructure, hosting many docker containers and all of my data.

I haven’t had many issues with it, and there isn’t a great reason to upgrade, but, while helping a friend design a similar system, I started to hanker for some newer hardware. Tyr idles at around 35 watts which is respectable, but not great for an always-on server. I want the new system to be significantly better, ideally around 10 watts.

Tyr also lives in my home office, and while it’s reasonably quiet, the PSU fan is audible and collects dust. One time, a friend that was sleeping on the couch in the office was annoyed by the fan, and switched the machine off, causing my only downtime.

I have a small network cabinet that would be a perfect home for a server, so another goal is to build the new system small enough that it can live here.

It’s not easy to estimate power-draw for hardware. There doesn’t seem to be any decent source for data, and of course workload is a large determining factor in the power-draw. Nonetheless, thermodynamics is a law, so making less heat means less energy is required. This hint led me to look at motherboards with built in CPU and passive cooling- if a small piece of aluminium can disperse all the heat the CPU makes in normal operation, then surely that’s a clue that power consumption is low. It also removes the power and noise from any fan.

One option here is the Intel N100 CPU, which is the latest in Intels line of low power workhorses. I wanted a motherboard that was small (read mini ITX) and that had at least 2 SATA ports (to allow a mirrored set of spinning disks). There only seemed to be one motherboard that fulfilled my requirements - the ASRock N100DC-ITX.

I paired this with a cheap SSD (HP EX900 250 GB, M.2 2280) and some cheap ram (Crucial 16GB, 3200 MHz, DDR4-RAM, DIMM).

One nice thing about this motherboard is that you can power it with a barrel jack, so I got a cheap notebook power supply, and also a smart plug (Shelly Plus Plug S) so I could monitor the power draw.

Finally I added a spinning disk (Seagate IronWolf 4 TB, 3.5", CMR).

One of the motivations behind the build was making it small enough to fit in my network cabinet, and for fun I thought I would try building a homemade case out of (makerbeam)[https://www.makerbeam.com/] and 3D printed panels.

This worked nicely, although my home soldered powerbutton / led is a little janky, but the whole system fits in a small shoebox size form factor that fits on the floor of the network cabinet.

With the system built, the next step was the operating system.

I'd heard some interesting things about NixOs and it seemed a good fit - I'd far rather maintain a configuration file that guaranteed the state of the server rather than mess around with manual configuration. One of the reasons I was hesitant to move from Tyr was the amount of manual shell work that would be required to replicate the current setup.

And as the majority of the real work of the server would happen inside docker containers, all orchestrated with a single docker compose file, the Nixos Configuration could be fairly simple.

All that it would need would be:

The key parts of this in configuration.nix are:

# == Packages ==
environment.systemPackages = with pkgs; [

# Enable tailscale
services.tailscale = {
    enable = true;
    openFirewall = true;
    authKeyFile = "/home/peterbraden/secrets/tailscale";
    extraUpFlags = [ "--reset" "--hostname=eir" ];

and an update.sh script:

sudo nix-collect-garbage --delete-older-than 30d
sudo nixos-rebuild switch -I nixos-config=/home/peterbraden/home-network/asgard/eir/configuration.nix

chezmoi init --apply peterbraden

With that, the server came up inside my tailnet on boot, and could be completely updated with a single command.

With that good start, it was time to see how I had done with my original goals. Without any services running, it's ticking along at 15watts which isn't great, compared to my initial goal of 10 watts, but is less than the 35watts of Tyr. Once the services are migrated I assume this will rise somewhat.

So overall, a fun project that hasn't made much sense. At least it fits inside the network cabinet.