sam-4screen-desktop 2026-9-1:9:54:8
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
---
|
||||
created: 2026-09-01
|
||||
modified: 2026-09-01
|
||||
type: plan
|
||||
client: sam
|
||||
project: web-host-migration
|
||||
status: pending
|
||||
priority: 1
|
||||
tags:
|
||||
- backup
|
||||
- restore
|
||||
- aws
|
||||
- s3
|
||||
- borg
|
||||
- kopia
|
||||
- restic
|
||||
aliases:
|
||||
- backup-action-plan
|
||||
- backup-gaps-fix
|
||||
id: 1848129027-BAP
|
||||
---
|
||||
# Backup Action Plan — Close the Gaps + Restore Procedures
|
||||
|
||||
> Part of [[Migration Plan — InMotion to Local + AWS Offsite]]. Follow-up to [[Backup Architecture — Offsite to AWS S3]].
|
||||
> **Status: PLAN ONLY (no changes yet).** Created 2026-09-01 after scope-gap review.
|
||||
|
||||
## Why this exists
|
||||
The original offsite S3 plan covered **photos + archive + .27 desktop** — but review (2026-09-01) found:
|
||||
1. **.13 system configs are not fully in Borg** (`/home/sam/deployment` 23G, voice/audio/pi dirs, etc missing).
|
||||
2. **.13's Borg repo (`borg/.13`) is NOT in S3** — only .27 is.
|
||||
3. **.35's backup repos (restic 1.1T, kopia 71G on .23) are NOT in S3** and depend on `.23` (single point of failure, no backup, on-site).
|
||||
4. **No documented restore procedure** exists in the notes.
|
||||
|
||||
## Facts verified 2026-09-01
|
||||
| Item | Detail |
|
||||
|---|---|
|
||||
| .13 Borg `local-to-storage` covers | `~/Docker`, pocketbase-*, dotfiles, `.ssh`, `/mnt/data/family-home-lab`, photo-pipeline |
|
||||
| .13 NOT in Borg | `~/deployment` (23G), gst-plugins-rs (2.8G), speech_piper (1.5G), voice_bridge (946M), whisper-api (518M), librespot (842M), voice-agent (82M), mopidy-radionet (3.1M), `~/.agents` (844M), `~/.pi` (481M), bin, .config |
|
||||
| .35 Restic (Backrest) plan sources | /docker-config, /docker-containers, /docker-volumes, trilium-data, /host_fs/mnt/hd |
|
||||
| .35 Kopia snapshots | Docker/Containers, trilium-data, var/lib/docker/volumes |
|
||||
| .35 repos on .23 | **restic 1.1T**, kopia 71G, borg-repos 462G |
|
||||
| .23 | NFS file-server; **holds ALL .35 repos + .13 borg copies; itself has NO backup** |
|
||||
| S3 currently | photos/by_date, archive, borg/.27 only |
|
||||
|
||||
## Action plan
|
||||
|
||||
### Step 1 — Close .13 Borg coverage gap (local, immediate, $0)
|
||||
- [ ] Add to `.13` `backup.nix` `local-to-storage` paths:
|
||||
- `~/deployment`
|
||||
- `~/gst-plugins-rs`, `~/speech_piper`, `~/voice_bridge`, `~/whisper-api`, `~/voice-agent`, `~/librespot`, `~/mopidy-radionet`
|
||||
- `~/.agents`, `~/.pi`, `~/bin`, `~/.config`
|
||||
- [ ] Exclude: `.cache`, `.npm`, `.local` (junk/regenerable)
|
||||
- [ ] Rebuild + run Borg → verify new archive includes `~/deployment`
|
||||
|
||||
### Step 2 — Add .13's repo + key dirs to S3 (cheap, ~31G)
|
||||
- [ ] Extend `offsite.nix` S3 seed to include:
|
||||
- `backup/borg/.13` → `borg/.13/` (STANDARD) — tiny (304M)
|
||||
- `~/deployment` + voice/audio dirs → `home/...` (DEEP_ARCHIVE) — ~31G ≈ <$0.05/mo
|
||||
- [ ] First seed after Step 1 completes so .13's own config is offsite too
|
||||
|
||||
### Step 3 — .35 restore path → S3 (DECISION NEEDED on scope)
|
||||
Given restic repo is 1.1T on .23, options:
|
||||
- **Option A (recommended, restore-focused):** Do NOT ship the whole 1.1T repo. Instead:
|
||||
- Ship **Borg .13 archive copies on .23** (462G of borg-repos) → S3 DEEP_ARCHIVE (these are already dedup'd single-copy restorable archives) — the highest-value offsite target.
|
||||
- For .35's restic/kopia, ship ONLY `mnt/hd` (Immich original photos — already in S3 via photos) — restic/kopia repos remain local (on .23) since .23 will be separately protected.
|
||||
- **Option B (complete):** Also ship restic/kopia repos → S3 (~1.1T+) — expensive (first 90 days Standard ≈ $40-80/mo then Deep Archive ≈ $1.6/mo). Only if you want full .35 restore from cloud.
|
||||
- **Decision:** pick A or B (recommend A).
|
||||
|
||||
### Step 4 — Protect .23 (the single point of failure)
|
||||
- [ ] Since .23 is the hub for ALL repo copies: either
|
||||
- **A:** ship .23's borg-repos to S3 (covers Step 3A), or
|
||||
- **B:** give .23 its own backup (rsync to .13? but .13 is on-site too) — **offsite is the real fix** → S3.
|
||||
- Recommendation: the S3 copies in Step 2+3A effectively close .23's vulnerability for restore-critical data.
|
||||
|
||||
### Step 5 — RESTORE PROCEDURES doc (in backup notes)
|
||||
- [ ] Create **Restore Runbook** (in [[Backup Architecture — Offsite to AWS S3]] or new note): step-by-step for:
|
||||
- Restore .27 from `borg/.27` (local + S3)
|
||||
- Restore .13 from `borg/.13` (local + S3) + the /home additions
|
||||
- Restore .35 containers/volumes from Backrest/Kopia (local .23) + from S3 if repos offsited
|
||||
- Restore Immich/My-Passport from S3 photos (DEEP_ARCHIVE — note hours-to-restore)
|
||||
- Restore Gitea (from /Docker/Containers in restic/kopia)
|
||||
- [ ] Add a "test a restore" cadence (e.g. monthly spot-check from S3)
|
||||
|
||||
### Step 6 — Verify
|
||||
- [ ] After changes: run backup, confirm S3 object counts for new prefixes
|
||||
- [ ] Test-restore ONE path from S3 (prove read path)
|
||||
- [ ] Update monitoring page to show new prefixes
|
||||
|
||||
## Cost estimate (AUD)
|
||||
- Step 2 (.13 → S3): +31G → < $0.10/mo steady (DEEP_ARCHIVE)
|
||||
- Step 3A (borg-repos 462G → S3): ~$0.01/mo steady DEEP_ARCHIVE after first-90-day Standard (~$16/mo transient)
|
||||
- **Total steady-state ≈ $2-4/mo** (vs current ~$1-2). Well within budget.
|
||||
|
||||
## Restore flow summary (target)
|
||||
1. **Machine died, .23 alive:** restore .13/.35 from local repos (fast) — documented runbook.
|
||||
2. **House fire:** .23 gone → restore .27, .13 configs, photos, Immich from S3 (Glacier hours) — documented runbook.
|
||||
3. **Monthly:** spot-test one S3 restore.
|
||||
|
||||
---
|
||||
*Linked: [[Backup Architecture — Offsite to AWS S3]], [[Migration Work Log]], [[Migration Plan — InMotion to Local + AWS Offsite]].*
|
||||
Reference in New Issue
Block a user