Skip to content

rsnapshot — hardlinked version history of immich and EmbeddedEra on disk1

Hourly hardlink snapshots (24 h / 30 d / 12 w / 24 m / 5 y) of the two irreplaceable trees into /mnt/disk1/Storage-snapshots/. 214.56 GB allocated at the November 10 audit (one complete du traversal across all intervals). Unchanged file contents are shared by hardlinks; do not sum separate per-snapshot du runs.

Input → Movement → Output

Reads /mnt/storage/EmbeddedEra/ and /mnt/storage/immich/ (excluding immich/postgres/, immich/thumbs/, *.db-shm, *.db-wal). Produces hourly.0…23, daily.0…29, etc. under the snapshot root.

Why this shape

Parity and the NVMe copy protect against loss; neither protects against an edit or a deletion that then propagates. Snapshots do. They live on an array disk, so they do not survive disk1 — which is why the versioned history moved to the parity-protected restic repo on 2026-09-08 (history-repo). rsnapshot stays for now. Before reducing hourly retention, choose the recovery objective and measure unique old versions across every interval. Reducing 24 hourly snapshots to 6 does not imply reclaiming most of the tree because file contents are shared with daily/weekly/monthly snapshots. See November 10 storage audit and plan.

Steps

  1. /etc/cron.d/rsnapshot runs /usr/bin/rsnapshot <interval> as root.
  2. Config /etc/rsnapshot.conf: snapshot_root /mnt/disk1/Storage-snapshots/; retains above; two backup lines.
  3. /usr/local/bin/rsnapshot-safe-rm exists as a guarded remover for the tree.

Consequences to know: the September audit counted 3.66 million inodes in this forest (historical measurement, not a fresh tree count) — never tune2fs -c a forced boot fsck onto it; snapraid touch and scans on d1 take minutes. /Storage-snapshots/ is excluded from parity; the compose samba (ghost) points at the pool path, the live samba-nas serves it read/write from /mnt/disk1/…. Stale Storage-snapshots/ dirs also exist on disk2 and disk3 (71.27 GB on disk2, 37.96 GB on disk3; 109.23 GB combined, measured November 10; documented as stale since early 2026, unique-history check required before removal) — reclaimable.

If you change this

  • Hits: disk1 inode count and scan time · Samba share · the two exclude lines that keep DB WAL files out.
  • Does not hit: parity (excluded), precious, the rescue kit.

See

  • Objects: datasets, immich
  • Source: /etc/rsnapshot.conf · /etc/cron.d/rsnapshot

November 10 verification

Live /etc/rsnapshot.conf and /etc/cron.d/rsnapshot agree with the stated retention/schedule. The 21:00 hourly run completed at 21:03:24. Latest hourly snapshot correctly excludes Immich thumbs and postgres, but contains 32.09 GB of encoded-video; a blanket exclusion would drop the motion-photo originals. No snapshot or retention setting changed. Audit details and proposed consolidation: ../../projects/server-cron-space-audit-2026-11-10.