Guide
6 min read

Splitting App Storage from Bulk Storage on a NAS-plus-Mini-PC Homelab

The NAS-plus-mini-PC combo only stays fast and reliable if you decide early what lives on the SSD and what lives on the spinning pool. A clear split before Docker piles up.

Splitting App Storage from Bulk Storage on a NAS-plus-Mini-PC Homelab

The NAS-plus-mini-PC homelab is a great pairing: the mini PC runs the containers, the NAS holds the terabytes. It goes wrong when the split between them is never actually decided, and Docker volumes land wherever the first tutorial put them. A month later there's a SQLite database living on an NFS share, a docker-compose.yml that assumes a path that only exists at 2am when the NAS is awake, and a Jellyfin library that's somehow both places. Decide the split before the stack grows and none of that happens.

Two kinds of storage, two very different needs

  • App state — databases, app config, indexes, lock files. Small, latency-sensitive, and intolerant of the disk disappearing. Wants fast local SSD and a filesystem that never goes away mid-write.
  • Bulk data — media, photos, backups, archives. Large, throughput-oriented, fine over the network, tolerant of slightly higher latency.

Almost every homelab storage problem comes from putting app state on bulk storage. NFS latency, a sleeping NAS disk, or a dropped mount turns into a corrupted database — exactly the failure mode covered in USB-DAS storage guardrails.

The split: SSD for state, NAS for bulk

  • Databases and app config → the mini PC's internal SSD/NVMe. Postgres, MariaDB, SQLite, and each app's config directory live local. Fast, always-present, journaled.
  • Media and large files → the NAS. Mount the share read-write for the media apps that need it, and keep it out of the database path entirely.

Concretely, for a media app: the library files live on the NAS share, but the app's database and metadata live on the SSD. That one separation is the difference between "the NAS hiccuped and Jellyfin paused" and "the NAS hiccuped and the database is corrupt."

Make the mounts explicit and resilient

  • Mount NAS shares by a stable name with nofail so a missing NAS doesn't wedge boot.
  • Set soft/timeout options on NFS so an unreachable NAS errors instead of hanging containers forever.
  • In Compose, map the SSD path and the NAS path as distinct named volumes/binds — never a single tree that straddles both.

Watch the cross-cutting effects

Once several apps share one mini PC and one NAS, they compete. Keep app ports and resources from colliding (see multi-app VPS port collisions), and back up the SSD app state off the box — the NAS holding your media is not a backup of the database that indexes it.

Quick layout

Data Lives on Why
Postgres/MariaDB/SQLite mini-PC SSD latency + always-present
App config / index mini-PC SSD small, must stay consistent
Media / photos / archives NAS large, throughput, network-tolerant
Backups of app state off-box / NAS and off-site survive loss of either box

Takeaway

Decide it once: state on the SSD, bulk on the NAS, mounts explicit and nofail, app-state backups off the box. Make that call before the first stateful container and the NAS-plus-mini-PC homelab stays fast, boots cleanly, and survives the inevitable NAS nap.

nas
mini-pc
storage
docker
homelab

From across the StoicSoft network

Hand-curated reads on the same topic from sister sites in the StoicSoft family.

Keep reading

Guide
7 min

Storage Guardrails for USB-DAS Mini-PC Servers Before Your First Docker Stack

A mini PC with a USB direct-attached drive is a great cheap server until a power blip or a sleeping disk corrupts a database. Set the storage guardrails before the first container.

Guide

First-time NAS builds need appdata, backup, and OS-placement guardrails before services pile up

Before your first NAS box even arrives, a handful of structural decisions will determine whether your homelab stays manageable or becomes a recovery project. Get OS placement, appdata protection, and backup tiers sorted upfront and the rest is incremental.

Guide

Homelab consolidation decisions now mix electricity costs, Immich storage, and future migration risk

Running multiple rack servers or stacking new services on aging hardware is forcing self-hosters to weigh power bills, storage safety, and the hidden cost of migrating everything later. Here is how to think through the decision before you buy or consolidate.

Guide
8 min

Container monitoring is moving from uptime dashboards to egress policy, backup-state widgets, and service-level proof

Fresh self-hosting posts point to a more specific monitoring need than simple green/red uptime. One homelab user running rootless Podman quadlet services wants per-container outbound blocking, domain allowlists, and traffic visibility but cannot see how to…

Guide
8 min

NAS-hosted Jellyfin failures cluster around bind mounts, library state, and update rollback

Fresh Jellyfin and self-hosting posts show the same operator pain from multiple angles: the media server is running, but the boundary between Docker, NAS paths, and app state is fragile. One new self-hoster cannot deploy a Portainer/Jellyfin stack because…

Guide
8 min

Pi-to-NAS migrations need app-data and restore plans before RAID shopping

Fresh homelab threads show users trying to move from small Raspberry Pi or improvised storage setups into dedicated NAS hardware while still deciding how app data, media, RAID, and backups should work. One operator wants to migrate a Pi NAS with Docker…