-
Notifications
You must be signed in to change notification settings - Fork 0
Storage Layout
github-actions[bot] edited this page May 10, 2026
·
6 revisions
MMS splits storage between NFS (bulk media on TrueNAS) and local SSD (per-service config and Immich generated content).
/data/ # NFS from TrueNAS
├── media/
│ ├── movies/ # Radarr / Radarr 4K library
│ ├── series/ # Sonarr library
│ └── music/ # Lidarr library
├── usenet/
│ ├── incomplete/ # SABnzbd in-progress
│ └── complete/
│ ├── movies/ # Completed movie downloads
│ ├── series/ # Completed TV downloads
│ ├── music/ # Completed music downloads
│ └── manual/ # Manual import staging
├── backups/
│ ├── arr-api/ # *arr API backups (30-day retention)
│ │ ├── prowlarr/
│ │ ├── radarr/
│ │ ├── radarr4k/
│ │ ├── sonarr/
│ │ └── lidarr/
│ └── config/ # Config backups (age-encrypted, daily 03:00)
├── photos/ # Immich user content (NFS)
│ ├── upload/ # User uploads
│ └── library/ # External library links
└── recordings/ # Channels DVR recordings
/home/mms/config/<service>/ # Local SSD, per-service config
/home/mms/config/immich/media/ # Local SSD, Immich generated content
├── encoded-video/ # Transcoded video (regenerable)
├── thumbs/ # Thumbnails (regenerable)
├── profile/ # Profile images (regenerable)
└── backups/ # Immich internal backups
/home/mms/config/open-notebook/ # Open Notebook app config + data
/home/mms/config/open-notebook-db/ # SurrealDB data (separate for cold backup)
/home/mms/config/logging/ # Observability stack config
├── bin/ # Host-side helper scripts
│ └── mms-log-inspect # Policy-driven log inspector
├── inspection/ # Log inspection runtime state
│ ├── policies/ # Active JSON inspection policies
│ ├── latest-report.json # Most recent inspection report
│ └── notifications.env # Optional webhook URLs, mode 0600
├── loki/ # Loki config + alert rules
├── alloy/ # Alloy collector config
├── grafana/ # Grafana config + provisioning
├── prometheus/ # Prometheus scrape config
├── loki-data/ # Loki log storage (retention-managed)
├── grafana-data/ # Grafana SQLite DB (disposable)
└── prometheus-data/ # Prometheus TSDB (retention-managed, disposable)
This follows the TRaSH Guides recommended folder structure, enabling hardlinks between download and library directories.
-
NFS (
/data/): Bulk media, downloads, photos, and API backups. Stored on TrueNAS for capacity and redundancy. -
Local SSD (
/home/mms/): Per-service config databases and Immich generated content (thumbnails, transcoded video). Stored locally for performance.
Immich is the most complex service for storage:
-
User content (NFS):
upload/andlibrary/under/data/photos/-- actual photos and videos -
Generated content (local SSD): thumbnails, transcoded video, and profile images under
/home/mms/config/immich/media/-- regenerable by Immich on demand -
Config (local SSD): PostgreSQL database and Redis data under
/home/mms/config/immich/
This split means backups only need to cover the config directory (database); user content lives on NFS (backed up separately by TrueNAS), and generated content is regenerable.
- Local config volumes:
:Zfor private SELinux labeling - NFS volumes: no
:Z/:zlabels (usesvirt_use_nfsSELinux boolean instead)