## Summary - Adds a second borgmatic config (`photos.yaml`) that backs up `/Volumes/photos` (sifaka SMB mount, ~128 GB) to a dedicated BorgBase repo (`immich-photos`), running daily at 4 AM - Separate launchd agent (`mcquack.eblume.borgmatic-photos`) so photo backups run independently from the main backup - Refactors `borgmatic_metrics` script to support multiple repos with a `repo` Prometheus label - Updates Grafana "Borg Backups" dashboard with a `repo` template variable so you can filter/compare repos - Docs updated: `backups.md`, `borgmatic.md` ## Prerequisites (manual) - [x] Create `immich-photos` repo on BorgBase with same SSH key - [ ] Upgrade BorgBase plan to Small ($24/yr) if currently on free tier (128 GB exceeds 10 GB limit) - [ ] After deploy: `borg init` the new repo (borgmatic does this automatically on first run) ## Test plan - [ ] Dry run: `mise run provision-indri -- --check --diff --tags borgmatic,borgmatic_metrics` - [ ] Deploy borgmatic role and verify both configs deployed - [ ] Run `borgmatic --config ~/.config/borgmatic/photos.yaml create --verbosity 1` manually for first backup (will take hours) - [ ] Verify metrics script collects from both repos: `~/.local/bin/borgmatic-metrics && cat /opt/homebrew/var/node_exporter/textfile/borgmatic.prom` - [ ] Sync grafana-config in ArgoCD and verify dashboard repo selector works 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: #315
1.8 KiB
1.8 KiB
| title | modified | tags | ||
|---|---|---|---|---|
| Borgmatic | 2026-03-16 |
|
Borgmatic
Daily backup system using Borg backup, running on indri.
Quick Reference
| Property | Value |
|---|---|
| Install | mise (pipx) |
| Main config | ~/.config/borgmatic/config.yaml |
| Photos config | ~/.config/borgmatic/photos.yaml |
| Main schedule | Daily at 2:00 AM |
| Photos schedule | Daily at 4:00 AM |
| Main targets | sifaka local + BorgBase offsite |
| Photos target | BorgBase offsite only |
What Gets Backed Up
Directories:
~/code/personal/zk- Zettelkasten/opt/homebrew/var/forgejo- Git forge data~/.config/borgmatic- Borgmatic config~/Documents- Personal documents~/.local/share/borgmatic/k8s-dumps/- SQLite dumps from k8s pods
PostgreSQL databases:
minifluxon postgresqlteslamateon postgresql
K8s SQLite databases (pre-backup dump via kubectl exec):
- mealie - Recipe manager (
/app/data/mealie.db)
Immich photo library (separate config, BorgBase offsite only):
/Volumes/photos(sifaka SMB mount, ~128 GB)
Not backed up (by design):
- ZIM archives (re-downloadable)
- Prometheus metrics (ephemeral)
- Loki logs (ephemeral)
Retention Policy
| Period | Count |
|---|---|
| Daily | 7 |
| Monthly | 12 |
| Yearly | 1000 |
Monitoring
Metrics exposed via textfile collector to prometheus:
borgmatic_up- Repository accessibilityborgmatic_last_archive_timestamp- Last backup timeborgmatic_repo_deduplicated_size_bytes- Disk usage
Dashboard: "Borgmatic Backups" in grafana
Related
- backups - Full backup policy
- sifaka - Backup target
- postgresql - Database backups
- restore-1password-backup - Recover 1Password from backup