Backups & restore¶
Per-server rsync over SSH to the PiHerder backup volume. Runs on Celery (not inside the web request).
Enable backups¶
- Server Edit → Features → enable Backups.
- Open the server’s Backups page (ops-hero + source cards — same width as other host pages).
- Add source paths on the remote host (configure form lists current sources; empty only when none are set).
- Optional: destination override, retention, cron schedule.
- Path allow/deny — default deny of OS roots; optional prefixes.
How success is decided¶
- Each source must finish with
rc == 0and no error classification. - Failed runs: status failed, audit error details,
last_backup_atnot updated. - Successful backups resolve open
backup_failednotifications.
rsync path¶
- Default:
--rsync-path "sudo -n rsync"(or local sudo). - Root user / HAOS: plain
rsyncis auto-probed and used.
Schedules¶
Enable + cron on the Backups page. Same server never runs two backups at once (Redis mutex); different hosts can run in parallel.
From the Servers list you can multi-select hosts and run Backup in bulk (only hosts with backups enabled) — Bulk actions.
Restore wizard¶
- Backups page → restore for a source.
- Dry-run reverse rsync (preview).
- Confirm to apply.
- Path policy enforced; audit action
backup_restore.
Restore is privileged
You are writing back onto the remote host. Prefer dry-run first.
Retention¶
Retention cleanup is a separate job type (retention) driven by configured keep rules.
Not the same as PiHerder self-backup¶
| Server backups | Herder self-backup | |
|---|---|---|
| Data | Files from fleet hosts | PiHerder DB config, users, keys… |
| UI | Server → Backups | Settings → PiHerder backup |
| Volume | /backups | /herder_backups |
See Self-backup & DR.