## 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
71 lines
1.8 KiB
Markdown
71 lines
1.8 KiB
Markdown
---
|
|
title: Borgmatic
|
|
modified: 2026-03-16
|
|
tags:
|
|
- service
|
|
- backup
|
|
---
|
|
|
|
# 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:**
|
|
- `miniflux` on [[postgresql]]
|
|
- `teslamate` on [[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 accessibility
|
|
- `borgmatic_last_archive_timestamp` - Last backup time
|
|
- `borgmatic_repo_deduplicated_size_bytes` - Disk usage
|
|
|
|
Dashboard: "Borgmatic Backups" in [[grafana]]
|
|
|
|
## Related
|
|
|
|
- [[backups|Backups]] - Full backup policy
|
|
- [[sifaka|Sifaka]] - Backup target
|
|
- [[postgresql]] - Database backups
|
|
- [[restore-1password-backup]] - Recover 1Password from backup
|