Separate Jellyfin app data, cache, and backups by asking what must survive a rebuild, what can be regenerated, and what must remain available after the live state device fails. These three roles can share a physical SSD in a small server, but they should not share the same lifecycle or recovery policy.
Durable application state includes the database, configuration, user and playback state, and other files required to return the same server. Cache and transcode work are disposable once no active task needs them. Backups are recovery copies and should not depend on the same storage boundary they are meant to recover.
Make Persistent App Data the Authoritative State Role
Start by mapping the host path or volume that owns Jellyfin's durable state. In a container deployment, the image is replaceable; the mounted state is what must reconnect after the container is recreated. Record the host path, container path, ownership, filesystem, free-space floor, and backup method.
A current Jellyfin Docker Compose layout separates persistent configuration and cache directories before media is mounted. That path distinction is operationally useful even when both directories initially live on the same SSD.
Do not put the authoritative database in a location you are willing to clear during troubleshooting. A successful cache cleanup should never be capable of resetting users, libraries, watch state, or server identity.
Treat Cache and Transcode Space as Rebuildable Working Data
Cache exists to reduce repeated work or hold temporary processing output. Its value is performance and convenience, not identity. Give it enough capacity for the largest normal background and transcode peaks, but allow it to be recreated without restoring the whole server.
Keep high-churn cache or transcode activity from dictating the backup policy for the database. If the same fast device holds both roles, use separate directories or datasets with separate quotas and monitoring. This prevents a temporary burst from consuming the free space needed for database writes or a future restore.
When browsing, metadata, and state operations feel slow while sequential media reads remain healthy, the ZimaSpace analysis of keeping interactive media-server state on SSD provides a useful next test without treating the bulk media library as the same storage workload.
The Container Is Disposable; the State and Rebuild Recipe Are Not
A container can be pulled again; its deployment recipe and persistent data cannot be assumed to reappear. Save the Compose or service definition, image version or tag policy, mount map, service identity, required secrets references, and the persistent Jellyfin state.
The practical rule in this Docker volume backup workflow is that useful recovery data lives in volumes, bind mounts, app data, and service definitions rather than in the disposable container itself.
For live databases, consistency matters more than copying every byte while the service is busy. Use the application's supported backup path or a controlled stop/snapshot method appropriate to the deployment instead of treating an arbitrary live file copy as a proven recovery point.
A Backup Beside Live State Does Not Cover Host Failure
A backup beside the live database can help with accidental changes, but it does not survive every pool, host, ransomware, theft, or power event that can remove production. Keep a recovery copy on another device or administrative boundary and protect any keys or credentials needed to read it.
A self-hosting backup plan should map state, secrets, recovery copies, and restore instructions together. This self-hosting recovery audit emphasizes copies outside the obvious blast radius and written rebuild inputs rather than counting snapshots as a complete plan.
Do not let the backup destination be consumed by the same cache-retention rule or cleanup command as the live app pool. The backup is a separate role even if it is temporarily stored on the same chassis.
Map the Storage Roles Before Buying or Moving Drives
| Role | Examples | Can be rebuilt? | Primary policy |
|---|---|---|---|
| Durable app state | Database, config, users, watch state, plugins/settings | Not cheaply | Low latency, free space, consistent backup |
| Cache / temporary | Cache, transcode scratch, disposable intermediates | Yes | Capacity, performance, bounded cleanup |
| Backup | Versioned state copy, deployment recipe, recovery metadata | No; it is the recovery source | Independent failure domain, retention, restore test |
| Media | Movies, shows, family video | Depends on source | Capacity and separate protection policy |
This map prevents a common redesign mistake: moving everything to the fastest disk when only app-state latency was a problem, or backing up every temporary file while omitting the service definition needed to rebuild the container.
Prove the Separation With a Disposable Restore
Restore Jellyfin state into a new path or isolated host, point a copied deployment definition at that location, provide non-destructive access to representative media, and start the service without the original cache. The server should return with the expected identity, libraries, users, and settings even though the cache begins cold.
The distinction becomes measurable only when a backup is restored into an isolated target and verified without borrowing production state. The test Jellyfin instance should start from the recovery copy, reconnect its required paths, and prove that the live volume is not secretly completing the restore.
The layout passes when cache can be deleted without losing identity, the runtime can be recreated without rebuilding the library from memory, and at least one backup can restore the service after the live app-data device is assumed unavailable.
NAS & Server Setup
More to Read

How AI-Like Analysis and Automation Change Jellyfin Storage and Compute Needs
Automation and adjacent AI analysis add scans, derived data, CPU/GPU work, cache, scratch space, and background scheduling beyond ordinary Jellyfin playback.

How to Integrate Jellyfin Into a Small Apartment or Rental Network
Build a rental-friendly Jellyfin network around stable local addressing, minimal wiring, quiet hardware, CGNAT-aware remote access, and reversible changes.

How Many Users and Background Jobs Should One Jellyfin Host Support?
Treat Jellyfin users and background jobs as one shared workload budget; capacity ends when playback latency, queues, or resource pressure becomes repeatable.

