A Dual-Node Home NAS Cluster for $210
Laser-Coder
A Dual-Node Home NAS Cluster for $210<br>By Jason Lenthe | May 22, 2026
FreeBSD + ZFS + Nginx = Home Videos on Demand
Over the past 20 years or so, I’ve accumulated about a terabyte<br>of data that is important to me and my family. This data primarily<br>consists of home videos taken with a Sony HD camcorder and a Nikon<br>DSLR camera as well as pictures and videos taken from various smart<br>phones over the last twelve years. This is personally valuable data<br>that I want to protect, preserve, and have easy access to at home.
Traditionally, I have kept these files on a computer and used an<br>external hard drive as backup. This got the job done, but left<br>something to be desired. It was a chore to remember to periodically<br>get the backup out, and copy recent data. Sometimes, I’d forget<br>to do this for a whole year. And playing the videos on a TV was<br>typically more trouble than one would hope—having to get an HDMI<br>cable out, hooking up a laptop to the TV, and navigating through each<br>video file from the laptop.
So I decided to do a fun home hobby project and make a custom DIY home<br>NAS system to store and secure my terabyte of data and make it easily<br>streamable to my TV. I’m happy to say that I’ve completed<br>the first working production version of it. In this article, I will<br>tell the full story of this home NAS and video streaming project and<br>all the fun I had implementing it.
Note: this article mentions several technologies related to storage,<br>cloud, and automation. If you’re not familiar with any of them,<br>follow the links to learn more.
Project Goals
The first goal of the project was to make a reliable backup<br>system—one you don’t have to worry about. While computer<br>and hard drive failures are somewhat rare, they absolutely do happen<br>and I’ve lost a number of devices over the years. Fortunately,<br>with serviceable backups, I’ve never had any major data loss,<br>but I have had to scrape recent non-backed up data off a dead computer<br>with functioning storage before, and it was not fun. Cloud services<br>can be great but they’re also limited by the bandwidth of your<br>internet connection and will run upwards of $100 per year for a<br>terabyte.
The second goal was ease of use both for backing up new content and<br>for letting any family member stream home videos to our family room<br>TV. Typically in the past this has been done by connecting a laptop<br>(that either has the data internally or with an external hard drive)<br>to the family room TV. That was never particularly difficult to do but<br>perhaps one or two steps too many for it to be a common occurrence.
The third goal was affordability. I could easily drop $400 on a<br>pre-built appliance and some hard disks, but, for this project, I<br>wanted to use my skills to make my dollars go as far as possible. I<br>also wanted a system that is easy to turn on and off, so that<br>it’s not burning electricity and wasting money all the time. I<br>really only need the system to be available a small percentage of the<br>time.
The Design
I designed the system around the idea of using cheap second-hand<br>computers running<br>FreeBSD and<br>ZFS<br>and a system of automatic replication. Cheap second-hand computers are<br>readily accessible on eBay. But you’re getting a machine<br>that’s been powered on in an office for years, possibly a<br>decade. There is simply no telling when such a machine will die. So,<br>the plan was to set up two computers in a cluster—one serving as<br>the primary and the other a replica. If either dies, a replacement can<br>be ordered and set up in a matter of weeks. ZFS send/recv provides an<br>easy and efficient way to replicate an entire file system from one<br>host to another. In practice, I only plan to use a single primary and<br>single replica, but the system is designed to support multiple<br>replicas if desired in the future.
But what if they both die around the same time? It seems unlikely but<br>perhaps more likely than one might expect, if, say, both machines were<br>taken from the same office and have about the same amount of power-on<br>time. I’ve never been one to roll the dice, so I planned on an<br>additional replication step to the cloud. I use AWS extensively at<br>work and know my way around S3 pretty well now.<br>S3 Glacier Deep Archive<br>is one of the most affordable cloud storage options available these<br>days with the only disadvantage that you may have to wait up to 48<br>hours to have your data restored. Given that S3 is really the backup<br>to the backup here, the 48 hour wait in an unlikely failure is fine.<br>Glacier Deep Archive is a great fit. The overall design is shown in<br>the following diagram.
System architecture diagram
Custom software components were planned for setting up and maintaining<br>the NAS hosts using<br>Ansible,<br>replicating a ZFS dataset, creating cloud resources, and monitoring<br>the NAS hosts for inactivity. Each custom component is described in<br>the following table.
Custom...