Skip to content
Backups and Recovery

Backups and Recovery

The recovery system distinguishes portable application exports, generic volume archives, ZFS snapshots, and a separate monthly copy.

Protection layerDestinationFrequency and retention
Application exports and volume archivesTrueNAS backup datasetDaily; seven-day default retention
Dataset snapshotsTrueNAS ZFS snapshotsVaries by dataset
Selected important datasetsWestern Digital 2 TB external hard driveManual, approximately monthly
    flowchart LR
  subgraph sources["APPLICATION HOSTS"]
    apps["Applications"] --> native["Native exports"]
    volumes[("Container volumes")] --> archive["Stopped-volume archives"]
  end

  native --> verify["Validate manifests<br/>and SHA-256"]
  archive --> verify
  verify -->|"daily · 7-day retention"| nas[("TrueNAS<br/>backup dataset")]
  nas -->|"varying frequency"| snapshots["ZFS snapshots"]
  nas ==>|"monthly manual copy<br/>selected datasets"| usb[("WD 2 TB<br/>external drive")]

  classDef source fill:#211b32,stroke:#9c82d4,color:#e3d9fa;
  classDef process fill:#2b1d15,stroke:#c47d4a,color:#f3d1ba;
  classDef storage fill:#10271e,stroke:#58b184,color:#c7efda;
  class apps,volumes source;
  class native,archive,verify process;
  class nas,snapshots,usb storage;
  

Daily application backups

Persistent systemd timers run staggered overnight sequences on the application and edge hosts. Scripts lock against concurrent runs, require mounted network storage, preserve the previously running container set, and fail if a service does not return. Timestamped sets default to seven days of retention.

ApplicationCapture method
GiteaNative dump plus SSH host identity
Paperless-ngxNative document export with manifest validation
ImmichCompressed PostgreSQL dump; media stays on TrueNAS
OpenProjectPostgreSQL dump plus uploaded assets
VaultwardenSQLite online backup plus durable files
Matrix SynapseConsistent data including signing identity
UmamiPostgreSQL custom-format dump

Applications without a portable exporter are briefly stopped while selected named volumes are archived. Downloaded models, reproducible caches, and large NAS-resident media are not duplicated into daily application archives. Jellyfin configuration is outside the current backup manifest.

Dataset protection

Important datasets receive ZFS snapshots at frequencies appropriate to their rate of change and recovery value. Approximately monthly, selected datasets are copied manually to the external drive. Its capacity makes this a selective copy rather than a complete replica of the media collection.

Restores

Documented procedures cover PostgreSQL applications, Immich, Vaultwarden, Matrix, Gitea, Paperless, and generic volume archives. Restores verify checksums or application integrity and refuse destructive volume replacement without explicit confirmation.