- 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>
52 lines
2.0 KiB
Markdown
52 lines
2.0 KiB
Markdown
# local backup cron on ks4 (leg 1)
|
|
|
|
Enabled 2026-08-22 (both ks4 backup crons had been commented out — no
|
|
backup of any kind was running). Overview of all legs:
|
|
[../backup-strategy.md](../backup-strategy.md).
|
|
|
|
## What runs now (root crontab on ks4)
|
|
|
|
```cron
|
|
0 1 * * * /root/scripts/incus-copy.sh -p backup -s backup >> /var/log/incus-copy.log 2>&1
|
|
```
|
|
|
|
- `01:00` — **local leg**: `incus copy --refresh` of all instances
|
|
into project `backup` on the sdb5 `backup` zpool (replaces the old
|
|
push to ks2; see [incus-copy.md](incus-copy.md)). The S3 instance
|
|
leg ([restic-backup.md](restic-backup.md) §6) chains onto this same
|
|
line once seeded — it reads the replicas this job just refreshed.
|
|
- The rsync stopgap to ks2 (`incus-backup.sh`, 04:00) and the plakar
|
|
data leg (04:30) are both **retired**; S3 backups are restic's job
|
|
at 05:00.
|
|
|
|
## Cleanup done the same day
|
|
|
|
- ks2: `incus delete biwiki spot` (abandoned instances — freed space
|
|
on the 95 %-full `data` pool)
|
|
- ks4: `incus delete spot --project backup`
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
# all instances present, incl. livetrail (first copy is a full send)
|
|
sudo incus list --project backup -c ns -f csv
|
|
# cron runs land here (manual screen runs don't):
|
|
sudo tail /var/log/incus-copy.log /var/log/incus-backup.log
|
|
# rsync leg freshness, on ks2:
|
|
ls -lat /backup/ns3061243/ | head
|
|
```
|
|
|
|
Notes:
|
|
|
|
- `flock` in both scripts makes overlapping cron/manual runs abort
|
|
safely instead of racing.
|
|
- Replicas get `boot.autostart=false` set by the script — they must
|
|
never fight the live instances for their static IPs.
|
|
- Keep `snapshots.schedule` set on the sources so refreshes stay
|
|
ZFS-incremental (a refresh without common snapshots falls back to
|
|
rsync). Corollary: the cron must run at least every
|
|
`snapshots.expiry` (7 d) — a longer gap expires every common
|
|
snapshot and the next refresh silently degrades to a **full
|
|
re-send** (observed 2026-08-22: seafile re-sent 933 G after the
|
|
weeks-long gap while the crons were commented out).
|