doc: split per-host READMEs, gitea cross-repo links, consistency pass
- nuc/README.md and ks4/README.md carry the host sections (+ network flows) that lived in the top-level README; links rebased - top README: repo links (doc/scripts on git.lutran.fr), index points at the new per-host pages - cross-repo references now use https://git.lutran.fr/julien/scripts instead of relative ../scripts paths that resolve nowhere - plakar-s3-data.md and plakar-incus-integration.md marked SUPERSEDED / RETIRED with pointers to restic-backup.md; their measurements and rationale kept - install.md, local-backup-cron.md, incus-copy.md: crontab sections updated to the live schedule (01:00 replicas, 05:00 restic, Sun maintenance); retired legs labelled as such - restic-backup.md: status live, cutover recorded, post-GC memory estimate, seed plan dated - seafile-gc.md: online GC noted, stale 'crons commented out' removed - ks2/: what-ks2-does-today rewritten (nothing writes to it any more), legs table and gates reflect restic, decommission steps updated - db-exclude replaces the plakar-era config name (script keeps a fallback) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
80f0219716
commit
a0e3a7dd86
+23
-20
@@ -1,10 +1,12 @@
|
||||
# restic backups on ks4 — the S3 leg
|
||||
|
||||
Status: **decided 2026-08-25 — restic replaces plakar as the S3
|
||||
backup tool** (evaluation first: parallel run + comparison, see §8).
|
||||
Final architecture: **two tools** — `incus copy` for replication
|
||||
(local sdb, nuc after FTTH, ks2 push as interim), **restic** for
|
||||
everything S3.
|
||||
Status: **live since 2026-08-28** — restic replaced plakar as the S3
|
||||
backup tool (plakar crons off, its kloset kept for
|
||||
[#2338](https://github.com/PlakarKorp/plakar/issues/2338); see §8).
|
||||
Architecture: **two tools** — `incus copy` for replication (local sdb,
|
||||
nuc after FTTH), **restic** for everything S3. Data leg (`restic-data`)
|
||||
runs nightly at 05:00; the instance leg (`restic-incus`, §6) is written
|
||||
and awaits its first seed.
|
||||
|
||||
Why: plakar's incremental cost scales with tree size, not churn
|
||||
(~800 MiB parent metadata re-read from S3 + hours of CPU per night on
|
||||
@@ -58,9 +60,10 @@ property).
|
||||
### Memory (the real constraint on this 23/31 GiB-used box)
|
||||
|
||||
- Index RAM ≈ 200–300 B/blob → combined `restic-data` index
|
||||
~1–1.5 GiB per operation (nextcloud ~1 M blobs + seafile ~2–4 M);
|
||||
prune peaks 2–3×. Accepted with the merged layout (§1) — measure
|
||||
peak RSS during the evaluation week (`/usr/bin/time -v`).
|
||||
~1 GiB per operation; prune peaks 2–3×. The seafile side of that
|
||||
estimate collapsed after its garbage collection (24.9 M → 0.5 M
|
||||
objects, [seafile-gc.md](seafile-gc.md)). Measure peak RSS with
|
||||
`/usr/bin/time -v` if the box ever feels tight.
|
||||
- `GOGC=20` trades CPU for a smaller Go heap — enable if the seafile
|
||||
prune ever pressures the box.
|
||||
|
||||
@@ -140,7 +143,7 @@ for r in restic-data restic-incus; do
|
||||
done
|
||||
```
|
||||
|
||||
## 4. Seed plan
|
||||
## 4. Seed plan (executed 2026-08-25 → 08-28)
|
||||
|
||||
1. **ARC floor first** (helps every walk on the box):
|
||||
```sh
|
||||
@@ -252,18 +255,18 @@ restic -r s3:…/restic-data restore latest --target /backup/restore-test --incl
|
||||
diff -r … && rm -rf /backup/restore-test
|
||||
```
|
||||
|
||||
## 8. Evaluation protocol + plakar retirement
|
||||
## 8. Cutover (done) + what is left
|
||||
|
||||
- **Parallel week**: plakar 04:30 cron keeps running untouched;
|
||||
restic runs at 05:00 on the same data. Same nights, same churn →
|
||||
direct comparison (wall, bytes read from store, bytes written, peak
|
||||
RSS via `/usr/bin/time -v`) against plakar's measured table in
|
||||
[plakar-s3-data.md](plakar-s3-data.md). Restore-speed compared on
|
||||
the same 10 GiB dumps tree (plakar measured: 39 min).
|
||||
- **Cutover** (after the comparison confirms + restore test passes):
|
||||
drop the plakar 04:30 + Sunday-check crons; 01:00 becomes
|
||||
`incus-copy ; restic instances phase` (or stays in the 05:00 run).
|
||||
Update plan.md legs table.
|
||||
- **Cutover 2026-08-28**: plakar's 04:30 and Sunday crons are off;
|
||||
restic's 05:00 data leg is the S3 backup. The formal parallel-week
|
||||
comparison was cut short — the evidence had already settled it
|
||||
(plakar: ~800 MiB metadata re-read and 3–4 h per night on the
|
||||
nextcloud tree, churn-independent; restic: seed at 60–115 MiB/s,
|
||||
local-cache incrementals). plakar's measurements stay in
|
||||
[plakar-s3-data.md](plakar-s3-data.md).
|
||||
- **Left to do**: seed `restic-incus` (§6) and chain it onto the 01:00
|
||||
line; restore test on the complete `restic-data`; then the ks2
|
||||
decommission gates ([../ks2/plan.md](../ks2/plan.md)).
|
||||
- **plakar retirement, one exception**: keep plakar installed and
|
||||
keep the `plakar-data` kloset until
|
||||
[#2338](https://github.com/PlakarKorp/plakar/issues/2338) concludes
|
||||
|
||||
Reference in New Issue
Block a user