Sonarr · Radarr · Plex · Jellyfin

Your ingest/organizer writes new files into the SSD fast tier. Apps read and update the library through the same mount, while indexed HDD paths serve readdir/getattr from index.db without waking disks. A nightly pfs move migrates eligible files during your maintenance window.

Media players
Plex
Jellyfin
READ
Library management
Sonarr
Radarr
Lidarr
Bazarr
READ
WRITE
Media ingest
Filebot
WRITE
One library path for all apps
/mnt/pfs/media/
Single virtual path — apps don't know which physical disk holds the file
🎵 library/music/** → reads + writes: SSDs only
🎬 library/{movies,tv}/** → reads: SSDs + HDDs
✏️ library/{movies,tv}/** → writes: SSDs only
✏️ ingest/** → writes: SSDs only
pfs router — new files land on SSD first · path-preserving keeps directories together · library metadata served without waking archive disks
Folder layout
/mnt/pfs/media/
├── ingest/ write zone
└── library/ read zone
├── music/ SSDs only
├── movies/
└── tv/
Filebot writes organized files under ingest/
pfs move migrates older files to HDD during maintenance
music/ stays on SSD — no HDD wakeup to skip a track
Fast tier — SSDs
ssd1
always on
new writes
land here first
ssd2
always on
overflow
pfs move
Archive tier — HDDs
hdd1
indexed
sleeps until
file opened
hdd2
indexed
sleeps until
file opened
hdd3
indexed
sleeps until
file opened
🌙 hd-idle · spins down after idle timeout
pfs maint (systemd timer) — pfs movepfs prunepfs index
Why HDDs stay asleep most of the time
Browsing the library? Metadata is served from the SQLite index (index.db) — HDDs never wake up just for a file listing.
New media ingest? Filebot organizes & writes to /mnt/pfs/media/ingest/ → lands on SSDs only. HDDs stay asleep.
Playing a file? Plex opens the actual file → only the one HDD holding it spins up. Others stay asleep.
Delete / rename? Changes on archive disks are queued and applied later — no spinup needed. (handled by pfs prune)
Actual spindown? PolicyFS reduces wakeups — hd-idle (or hdparm -S) is what physically spins the disk down after an idle timeout.
See config example →

Frigate

Frigate writes new clips and recordings to the SSD fast tier for fast access. Older footage is migrated to the HDD archive tier by pfs move on a schedule (systemd timer/cron) — or triggered manually. Frigate reads back through the same mount: recent clips come off SSD, archived footage off HDD.

NVR
Frigate
WRITE
Viewers
Web UI
Mobile
READ
Frigate sees a single path
/mnt/pfs/nvr/
Frigate uses a single path — PolicyFS keeps recent data on SSD and older recordings on the HDD archive tier underneath
📸
clips/** → reads + writes: SSDs only
snapshots & thumbnails — UI loads these constantly
📦
exports/** → reads + writes: SSDs only
manual exports stay on SSD for fast access
📖
recordings/** → reads: SSDs + HDDs
recent on SSD, older on HDD — both visible seamlessly
✏️
recordings/** → writes: SSDs only
new segments always land on SSD first
pfs router — new recordings always land on SSD · pfs move migrates older segments during maintenance
Folder layout
/mnt/pfs/nvr/
├── clips/ SSDs only
├── exports/ SSDs only
└── recordings/ tiered
YYYY-MM-DD/
HH/
<camera>/
MM.SS.mp4
Frigate writes segments to recordings/ by date/hour/camera
pfs move migrates segments past a configurable age to HDD
Frigate's own retention then prunes by event type
Fast tier — SSDs
nvme1
always on
clips · exports
recent recordings
pfs move
recordings past age threshold
Archive tier — HDDs
hdd1
archive
sleeps until
you review
hdd2
archive
sleeps until
you review
🌙 hd-idle · spins down after idle timeout
pfs maint (systemd timer) — pfs movepfs prunepfs index (if indexed)
Retention policy — what lives where and for how long
clips/
SSD only 30d alerts · 7d motion
Snapshots & thumbnails. Accessed constantly by the UI — keep on SSD.
recordings/ — recent
SSD configurable window
New segments land here first. Most likely to be reviewed immediately.
recordings/ — archive
HDD 7–30d (your config)
Migrated by pfs move after the age threshold. Disk sleeps until you review old footage.
exports/
SSD only manual cleanup
Manual exports stay on SSD for immediate access. By design — not worth tiering.
Why HDDs stay asleep most of the time
Browsing events/clips? Frigate UI loads thumbnails from clips/ on SSD. No HDD involved at all.
New recording segment? Frigate writes to recordings/ → lands on SSD only. HDDs sleep through it.
Scrubbing old footage? HDD only spins up when you actually play the segment.
Frigate prunes old segments? If your archive paths are indexed, deletes can be deferred and applied later by pfs prune.
See config example →

Ready to set one up?

The use cases reference has annotated configuration examples for each setup.