<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Linux on Russell ‛Russ’ Frith</title><link>https://russfrith.com/tags/linux/</link><description>Recent content in Linux on Russell ‛Russ’ Frith</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 20 Apr 2026 10:04:30 -0400</lastBuildDate><atom:link href="https://russfrith.com/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Quiet NAS for a Real Small Office (and Why I Chose TrueNAS)</title><link>https://russfrith.com/posts/building-a-quiet-nas-for-a-real-office/</link><pubDate>Mon, 20 Apr 2026 10:04:30 -0400</pubDate><guid>https://russfrith.com/posts/building-a-quiet-nas-for-a-real-office/</guid><description>How I’m Running My Office Infrastructure Like Something I’d Trust in Production</description><content:encoded><![CDATA[<p>When people talk about building a NAS, the conversation usually goes one of two ways:</p>
<ul>
<li>A step-by-step install guide for software such as TrueNAS</li>
<li>Or a massive rack-mounted setup with more drives than most small businesses will ever need</li>
</ul>
<p>Neither of those was what I was looking for.</p>
<p>I didn’t want a homelab,
I didn’t want a science project,
And I definitely didn’t want something that sounded like a server room sitting five feet from my desk.</p>
<p>I wanted something simple:</p>
<blockquote>
<p>A reliable, quiet NAS that fits into a real office and just does its job.</p>
</blockquote>
<p>This is how I approached that problem—and why I landed on TrueNAS.</p>
<hr>
<h2 id="the-constraints-this-is-where-it-starts">The Constraints (This Is Where It Starts)</h2>
<p>Before looking at hardware or software, I had to be honest about the constraints.</p>
<p>This wasn’t going into a basement or a dedicated rack closet; it was going into a small office where I actually work every day.</p>
<p>That meant:</p>
<ul>
<li><strong>Noise matters</strong> — constant fan and/or hard disk noise gets old fast</li>
<li><strong>Size matters</strong> — I don’t have space for a full rack server</li>
<li><strong>Power usage matters</strong> — this runs 24/7</li>
<li><strong>Reliability matters</strong> — this is storing real work, not media hoarding</li>
<li><strong>Cost matters</strong> — but not at the expense of stability</li>
</ul>
<p>And maybe most importantly:</p>
<blockquote>
<p>I didn’t need “infinite scalability.” I needed “appropriate capacity.”</p>
</blockquote>
<p>That framing alone rules out a lot of overbuilt solutions.</p>
<hr>
<h2 id="why-not-just-buy-a-synology">Why Not Just Buy a Synology?</h2>
<p>I seriously considered it.</p>
<p>Synology (and others) are great for:</p>
<ul>
<li>Plug-and-play setups</li>
<li>Low effort</li>
<li>Clean UI</li>
</ul>
<p>But I kept coming back to a few concerns:</p>
<ul>
<li>You’re locked into their ecosystem</li>
<li>Hardware is often underpowered for the price</li>
<li>You don’t really control the underlying system</li>
<li>ZFS (which I wanted) isn’t part of the story</li>
</ul>
<p>For some use cases, that tradeoff is fine. For mine, I wanted something that felt a little closer to the metal, without becoming a full-time job to manage.</p>
<hr>
<h2 id="why-not-reuse-old-hardware">Why Not Reuse Old Hardware?</h2>
<p>This is the classic “free NAS” trap.</p>
<p>Take an old desktop, throw some drives in it, install something, and call it a day.</p>
<p>The problem is:</p>
<ul>
<li>It’s usually <strong>louder</strong></li>
<li>It’s often <strong>less power efficient</strong></li>
<li>It tends to become <strong>less reliable over time</strong></li>
</ul>
<p>It works—until it doesn’t. I wanted something intentionally built for the role.</p>
<hr>
<h2 id="hardware-right-sized-not-overbuilt">Hardware: Right-Sized, Not Overbuilt</h2>
<p>I ended up building around an Intel N5105-based motherboard in a compact NAS case.</p>
<p>That decision wasn’t about chasing performance—it was about practicality.</p>
<p>A big factor was:</p>
<p>I already had DDR4 SO-DIMMs on hand</p>
<p>That immediately lowered the cost of the build and made the N5105 platform a very natural fit. It’s easy to overlook things like existing parts, but they can (and should) influence your decisions.</p>
<p>Beyond that, the platform checked the boxes I cared about:</p>
<ul>
<li>Low power draw</li>
<li>Quiet operation (no need for aggressive cooling)</li>
<li>Enough performance for storage and light services</li>
<li>Compact, purpose-built NAS boards available</li>
</ul>
<p>For storage, I went with:</p>
<p>3 × WD Red Plus 6TB drives
Configured as RAIDZ1</p>
<p>Why 3 drives?</p>
<p>Because it hit the balance I was looking for:</p>
<ul>
<li>Redundancy</li>
<li>Reasonable usable capacity</li>
<li>Lower cost and less noise than a larger array</li>
</ul>
<p>Could I have gone bigger? Sure. But again, the goal wasn’t to build the biggest NAS possible—it was to build the right one.</p>
<hr>
<h2 id="the-case-for-quiet">The Case for Quiet</h2>
<p>The case matters more than most people think.</p>
<p>I went with a <strong>Jonsbo N1</strong>, which is:</p>
<ul>
<li>Compact</li>
<li>Clean looking</li>
<li>Designed for NAS builds</li>
<li>Capable of good airflow without excessive fan noise</li>
</ul>
<p>Combined with:</p>
<ul>
<li>Fewer drives</li>
<li>Efficient CPU</li>
<li>No unnecessary components</li>
</ul>
<p>…the result is something that fades into the background.</p>
<p>That was the goal.</p>
<hr>
<h2 id="why-truenas">Why TrueNAS</h2>
<p>Once hardware was settled, the OS decision became much easier.</p>
<p>I considered:</p>
<ul>
<li>Unraid</li>
<li>Plain Linux + ZFS</li>
<li>Even going back to something simpler</li>
</ul>
<p>But TrueNAS hit the balance I wanted:</p>
<h3 id="1-zfs-without-compromise">1. ZFS Without Compromise</h3>
<p>ZFS was a requirement:</p>
<ul>
<li>Snapshots</li>
<li>Data integrity</li>
<li>Long-term reliability</li>
</ul>
<p>TrueNAS treats ZFS as a first-class citizen.</p>
<hr>
<h3 id="2-a-real-ui-without-losing-control">2. A Real UI (Without Losing Control)</h3>
<p>I didn’t want to manage everything via CLI.</p>
<p>But I also didn’t want a locked-down appliance.</p>
<p>TrueNAS sits in a good middle ground:</p>
<ul>
<li>Web UI for 90% of tasks</li>
<li>CLI available when needed</li>
</ul>
<hr>
<h3 id="3-designed-for-this-exact-use-case">3. Designed for This Exact Use Case</h3>
<p>TrueNAS isn’t trying to be everything.</p>
<p>It’s very clearly designed to:</p>
<blockquote>
<p>Store data reliably.</p>
</blockquote>
<p>That focus shows up in:</p>
<ul>
<li>Dataset management</li>
<li>Snapshots</li>
<li>Replication</li>
<li>Backup workflows</li>
</ul>
<hr>
<h2 id="setup-what-actually-mattered">Setup: What Actually Mattered</h2>
<p>There are plenty of guides on installing TrueNAS, so I won’t repeat that.</p>
<p>What <em>did</em> matter:</p>
<h3 id="network-gotchas">Network Gotchas</h3>
<p>My onboard NICs didn’t behave as expected during install.</p>
<p>This is one of those moments where:</p>
<blockquote>
<p>Having a simple USB Ethernet adapter saved a lot of time.</p>
</blockquote>
<p>Once installed, everything worked—but it’s a good reminder that:</p>
<ul>
<li>Hardware compatibility still matters</li>
<li>“Supported” doesn’t always mean “smooth”</li>
</ul>
<hr>
<h3 id="pool-design">Pool Design</h3>
<p>I kept things simple:</p>
<ul>
<li><code>boot-pool</code> (system)</li>
<li><code>core-pool</code> (main RAIDZ1 storage)</li>
</ul>
<p>There’s a temptation to over-engineer this early. I’d recommend resisting that. Start simple. Expand later.</p>
<hr>
<h3 id="dataset-structure">Dataset Structure</h3>
<p>Instead of dumping everything into one dataset, I split by purpose:</p>
<ul>
<li>Backups (Proxmox)</li>
<li>General storage</li>
<li>Future expansion</li>
</ul>
<p>This gives flexibility later without overcomplicating the initial setup.</p>
<hr>
<h2 id="how-it-fits-into-my-stack">How It Fits Into My Stack</h2>
<p>This NAS isn’t standalone.</p>
<p>It’s part of a broader setup:</p>
<ul>
<li><strong>Proxmox</strong> running VMs and containers</li>
<li>Backups flowing into TrueNAS</li>
<li>Future plans for snapshots and replication</li>
</ul>
<p>The goal is:</p>
<blockquote>
<p>Compute happens on Proxmox
Storage lives on TrueNAS</p>
</blockquote>
<p>Keeping those roles separate has already proven to be the right call.</p>
<hr>
<h2 id="what-id-do-differently">What I’d Do Differently</h2>
<p>A few small things:</p>
<ul>
<li>I’d plan static IP assignments earlier</li>
<li>You don&rsquo;t need a huge boot drive; I settled on 32GB and it&rsquo;s been plenty</li>
<li>I’d document drive bay → serial mappings sooner</li>
</ul>
<p>Nothing major—but these are the kinds of details that matter over time.</p>
<hr>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>There are a lot of ways to build a NAS.</p>
<p>Most of them fall into one of two categories:</p>
<ul>
<li>Overbuilt</li>
<li>Or underthought</li>
</ul>
<p>I was aiming for something in the middle.</p>
<ul>
<li>Not flashy.</li>
<li>Not massive.</li>
<li>Not complicated.</li>
</ul>
<p>Just:</p>
<blockquote>
<p>Reliable, quiet, and appropriate for the job.</p>
</blockquote>
<p>And for that, TrueNAS turned out to be the right foundation.</p>
<hr>
<p>If you’re building something similar, my advice is simple:</p>
<ul>
<li>Start with your constraints.</li>
<li>Be honest about what you actually need.</li>
<li>And resist the urge to build for a future that may never come.</li>
</ul>
<p>That alone will get you 90% of the way there.</p>
]]></content:encoded></item><item><title>Practical Proxmox</title><link>https://russfrith.com/posts/practical-proxmox/</link><pubDate>Mon, 30 Mar 2026 13:33:33 -0400</pubDate><guid>https://russfrith.com/posts/practical-proxmox/</guid><description>How I’m Running My Office Infrastructure Like Something I’d Trust in Production</description><content:encoded><![CDATA[<p>Proxmox gets a lot of attention in home lab circles, and I get why. But my use case pushed past hobby territory into services that are genuinely important to my small business and my personal life.</p>
<p>Once the stakes changed, so did the approach. Something you&rsquo;re willing to let break overnight is very different from something you actually need to work. That meant building with intention: defined structure, real recovery paths, and a level of trust you don&rsquo;t usually demand from a weekend project.</p>
<p>This isn&rsquo;t about building the flashiest setup. It&rsquo;s about applying production thinking at personal scale, without pretending I have an enterprise budget behind it.</p>
<h2 id="the-goal-treat-it-like-production-without-the-budget">The Goal: Treat It Like Production (Without the Budget)</h2>
<p>I don&rsquo;t want a toy.</p>
<p>I want something that:</p>
<ul>
<li>Survives mistakes</li>
<li>Recovers quickly</li>
<li>Mirrors real-world architecture decisions</li>
<li>Doesn&rsquo;t require babysitting</li>
</ul>
<p>That means fewer &ldquo;cool experiments&rdquo; and more boring, intentional structure.</p>
<p>Proxmox is the foundation, but it&rsquo;s not the strategy. It&rsquo;s just the tool that lets the strategy work.</p>
<h2 id="the-core-philosophy-separation-over-convenience">The Core Philosophy: Separation Over Convenience</h2>
<p>The biggest mistake in most home labs is collapsing everything into one flat network on one giant VM host.</p>
<p>It works — until it doesn&rsquo;t.</p>
<p>I&rsquo;ve moved toward clear separation:</p>
<ul>
<li><strong>Management network</strong> – where Proxmox, switches, and controllers live</li>
<li><strong>Server network</strong> – where actual workloads run</li>
<li><strong>User network</strong> – normal devices</li>
<li><strong>IoT / guest / camera networks</strong> – isolated and restricted</li>
</ul>
<p>This mirrors how real environments are structured, and more importantly, it forces you to think about access, routing, and failure boundaries.</p>
<p>If everything can talk to everything, you haven&rsquo;t designed anything — you&rsquo;ve just delayed the problem.</p>
<h2 id="proxmox-the-control-plane-not-the-junk-drawer">Proxmox: The Control Plane, Not the Junk Drawer</h2>
<p>Proxmox isn&rsquo;t where I dump random services anymore. It&rsquo;s the control plane, and that distinction matters.</p>
<p>Instead of treating it as a place to &ldquo;run stuff,&rdquo; I treat it as:</p>
<ul>
<li>A hypervisor with clean networking boundaries</li>
<li>A predictable host with minimal drift</li>
<li>A system that should almost never change</li>
</ul>
<p>Most of the actual work happens inside LXCs and VMs that can be destroyed and rebuilt at will.</p>
<p>If I hesitate to delete something, that&rsquo;s a smell. In a real environment, rebuildability matters more than preservation.</p>
<h2 id="hardware-boring-and-replaceable">Hardware: Boring and Replaceable</h2>
<p>Rebuildability doesn&rsquo;t mean much if the box itself is a snowflake.</p>
<p>I run Proxmox on an HP EliteDesk 800 G6, not because it&rsquo;s special, but because it&rsquo;s the opposite; it&rsquo;s a common corporate refurbish, sold in volume, cheap enough that losing one isn&rsquo;t a budget event.</p>
<p>That&rsquo;s the actual point: pick hardware that&rsquo;s common enough to replace or duplicate without a special order. A few reasons this matters more than it seems:</p>
<ul>
<li><strong>Failure stops being a crisis.</strong> If a node dies, you buy the same (or equivalent) machine and restore, instead of scrambling to source a part.</li>
<li><strong>It sets up real redundancy.</strong> Once one node is expendable, adding a second or third for clustering and failover is a natural next step, not a special project.</li>
<li><strong>It keeps the &ldquo;control plane should barely change&rdquo; idea honest.</strong> A host you can&rsquo;t easily replace is a host you&rsquo;ll be afraid to touch — which undermines the whole philosophy.</li>
</ul>
<p>You don&rsquo;t need a rack of matched enterprise servers to think like production. You need hardware boring enough that its failure is a shrug, not an outage.</p>
<h2 id="containers-vs-vms-be-intentional">Containers vs. VMs: Be Intentional</h2>
<p>There&rsquo;s a temptation to default everything to Docker. I don&rsquo;t.</p>
<ul>
<li><strong>LXCs</strong> for lightweight, single-purpose services</li>
<li><strong>VMs</strong> when isolation actually matters</li>
<li><strong>Docker</strong> inside LXCs when it simplifies deployment</li>
</ul>
<p>That last one is controversial, but it works well if you&rsquo;re disciplined.</p>
<p>The key isn&rsquo;t the tool — it&rsquo;s consistency. If every service is deployed differently, you&rsquo;re not building flexibility, you&rsquo;re building future confusion.</p>
<h2 id="storage-backups-are-the-product">Storage: Backups Are the Product</h2>
<p>The most important part of the entire setup isn&rsquo;t compute. It&rsquo;s storage and backups. Everything else is replaceable.</p>
<p>The strategy:</p>
<ul>
<li><strong>Primary workloads</strong> run on Proxmox</li>
<li><strong>Backups</strong> go to a separate storage system</li>
<li><strong>Snapshots</strong> are used for short-term recovery</li>
<li><strong>Backups</strong> are used for &ldquo;oh no&rdquo; moments</li>
</ul>
<p>There&rsquo;s a big difference between:</p>
<blockquote>
<p>&ldquo;I can roll back a bad update&rdquo;</p>
</blockquote>
<p>and</p>
<blockquote>
<p>&ldquo;I can rebuild everything after losing a node&rdquo;</p>
</blockquote>
<p>If you don&rsquo;t have the second one, you don&rsquo;t have a system — you have something that works right up until it doesn&rsquo;t.</p>
<h2 id="naming-and-ip-strategy-future-you-matters">Naming and IP Strategy: Future You Matters</h2>
<p>One of the most underrated improvements is consistency in naming and IP allocation. Not because it looks nice — because it reduces thinking when something goes wrong.</p>
<ul>
<li>Gateways are always <code>.1</code></li>
<li>Core services live in predictable ranges</li>
<li>Management IPs are easy to recognize</li>
<li>Temporary systems don&rsquo;t collide with permanent ones</li>
</ul>
<p>When something breaks, you shouldn&rsquo;t have to guess what <code>10.101.200.73</code> is. You should already know whether it belongs there.</p>
<h2 id="networking-where-things-actually-break">Networking: Where Things Actually Break</h2>
<p>Most of the real work has gone into networking, not Proxmox. VLANs, firewall rules, DNS, NAT — this is where the complexity lives, and it&rsquo;s also where most guides fall short.</p>
<p>A few lessons:</p>
<ul>
<li>Direction matters more than you&rsquo;d think (<code>in</code> vs. <code>out</code> rules will get you)</li>
<li>DHCP and DNS are the first things to check, not the last</li>
<li>&ldquo;It should work&rdquo; is not a debugging strategy</li>
</ul>
<p>The moment things started behaving like a segmented network instead of a flat LAN, everything became more predictable — even if it took more upfront thought to get there.</p>
<h2 id="the-stack-build-slowly-not-broadly">The Stack: Build Slowly, Not Broadly</h2>
<p>There&rsquo;s a long list of services I could run. That doesn&rsquo;t mean I should run them all at once.</p>
<p>The current approach is simple:</p>
<ol>
<li>Get the foundation stable</li>
<li>Add one service at a time</li>
<li>Make it observable (logs, uptime, access)</li>
<li>Make it recoverable</li>
<li>Then move on</li>
</ol>
<p>It&rsquo;s tempting to spin up ten containers in a weekend. It&rsquo;s better to have three that you actually understand and trust.</p>
<h2 id="cloudflare--reverse-proxy-one-door-in">Cloudflare + Reverse Proxy: One Door In</h2>
<p>Externally, everything comes through a single path:</p>
<ul>
<li>Cloudflare Tunnel</li>
<li>Reverse proxy routing internally</li>
</ul>
<p>No exposed ports. No one-off configurations per app. If a service needs to be public, it goes through the same entry point as everything else.</p>
<p>That&rsquo;s not just cleaner — it&rsquo;s how you avoid creating invisible risk over time.</p>
<h2 id="what-this-actually-enables">What This Actually Enables</h2>
<p>This setup isn&rsquo;t just for fun. It supports:</p>
<ul>
<li>Development environments that behave like production</li>
<li>Internal tools that don&rsquo;t rely on third-party services</li>
<li>Experiments that don&rsquo;t risk everything else</li>
<li>A platform for building real products</li>
</ul>
<p>That last one is the point. If your environment doesn&rsquo;t make it easier to build or run something useful, it&rsquo;s just expensive entertainment.</p>
<h2 id="final-thought">Final Thought</h2>
<p>A good setup isn&rsquo;t about how much you run. It&rsquo;s about how confidently you can change it.</p>
<p>If you can tear something down and bring it back cleanly, you&rsquo;re doing it right.</p>
<p>If you&rsquo;re afraid to touch it, you&rsquo;ve already limited what it can become.</p>
<hr>
<p>Focus less on tools and more on structure. The tools will change. The structure is what makes everything else work.</p>
]]></content:encoded></item></channel></rss>