4.3 KiB
R-49 — Immich's off-site copy: what it holds, and two ways to shrink it (2026-10-20)
Status: measure and plan only — nothing changed. Night brief part 2 (run by day), Part 4. Architecture: 07-backup-architecture.md
(the off-site tier = the recovery unit + the app's mandatory data). Measured read-only on scratch guest 9202 (demo-hp), Immich
v3.2.4 + ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0, data on the drive /mnt/sizing-bench, 09:0x UTC.
What today's off-site copy holds
The off-site tier copies the recovery unit (backups/primary/immich/, 1 160 553 825 B) and the mandatory drive folder
appdata/immich/ (166 077 159 B) — about 1.33 GB in all. The external library media/photos is optional (not off-site;
0 B here anyway).
| Part | Where | Bytes | Share | Can it come back without the copy? |
|---|---|---|---|---|
| ML model cache | unit volume-dumps/immich_immich_ml_cache.tar (volume 823 835 298 B) |
823 764 480 | 62 % | Yes — Immich downloads the models again when a smart-search or face job first needs them |
| Raw database folder | unit volume-dumps/immich_immich_postgres_data.tar (volume 282 169 461 B) |
283 049 472 | 21 % | Yes, if a restore from the logical dump alone is proven (below) |
| Immich's own database backups | appdata/immich/backups/ |
115 367 547 | 9 % | Yes — a second copy of what the logical dump already holds; it grows every night |
| Logical database dump | unit db-dumps/immich-postgres.sql |
53 711 763 | 4 % | No — this IS the household's albums, people, metadata |
| Originals | appdata/immich/upload/ |
48 673 663 | 4 % | No — the photos themselves |
| Thumbnails | appdata/immich/thumbs/ |
2 035 910 | <1 % | Yes — Immich regenerates them |
| Redis | volume immich_immich_redis_data (31 594 479 B) |
— | — | not in the unit (a queue cache) |
What must survive: 102 MB of 1.33 GB (8 %). The 2026-07-19 measurement (R-49) said the same shape: ~60 % model cache.
Two options
| A — leave out all three re-fetchable parts | B — leave out only the model cache | |
|---|---|---|
| Off-site size here | ~105 MB (dump + originals + thumbnails + unit metadata) — −92 % | ~510 MB — −62 % |
| What a restore then needs | the models download again (~824 MB, from Immich's model host) before smart search and face recognition work again — the photos, albums and timeline work at once; the database is rebuilt from the logical dump alone into an EMPTY volume (no raw folder to lay under it) | the models download again, as in A; the database comes back as today (volume, then dump) |
| The proof it needs | (1) one off-site restore of Immich onto a box with an empty model cache: photos and albums read back, then a smart search answers after the download (time measured); (2) one off-site restore from the dump alone into an empty database volume, on this vectorchord image: the extensions and vector indexes come back, the row counts match, Immich starts and searches — today's restore always lays the raw folder first, so this has never been run | only proof (1) |
| Risk | the dump-only database restore is the unmeasured part; if the vector extension needs more than the dump gives, a restore would fail where it works today (option A's put-back keeps the app as it was, but the backup would be weaker) | none new: the cache is a cache |
| Also | Immich's own backups/ folder needs a catalog class (excluded) — a template change in the hdd block |
a catalog change: the model-cache volume marked as not captured |
Not measured today: the model download's time and size on a real line (the 824 MB is the cache as it stands, which holds every model this box used); the off-site bytes after restic's compression and de-duplication (the table is the plain size).
Pick: B now, then A's other two parts after proof (2)
B removes 62 % of the copy with no new risk — the strongest case R-49 named first — and needs only proof (1). The raw database folder and Immich's own backups are another 30 %, but leaving out the raw folder changes HOW the database comes back, and that path has never run for this extension image; it should be a separate step with its own proof, not ride along.
If the operator does nothing: every Immich household keeps sending ~12× its real data off-site each night, against its quota and transfer.