Skip to content

Restore from backup

Recording of what the nightly restic set holds is in backups.md. Always restore to a scratch directory first and verify content before replacing live data.

0. Preconditions

  • Target host reachable (mesh or LAN).
  • Password file / key for the repository available locally on the source host that owns the plan (Backrest UI, or the restic-backup@ unit env on pi-home).
  • Enough free space on the target scratch dir.

1. Locate the snapshot

On pi-home (local repos) or against the mounted NFS repo from vps-apps:

restic -r <pi-hdd-repo-path>/<host>/<branch> snapshots --latest 5

Search the listing for the host, plan branch (data/config) and timeframe. For the off-site copy, same command against gdrive:backups/<host>/<branch>.

2. Restore to scratch

restic -r <repo> restore <snapshot-id> --target /var/tmp/restore --verify

Outcome: a directory tree mirroring the backed-up roots.

3. Promote into service

  • vps-apps data: stop the app's compose project, move tree into /opt/homelab-data/<app>/, fix ownership (container UID), compose up -d.
  • pi-home data: stop the service unit (systemctl stop <unit>), restore into the userdata root, fix ownership/permissions, start the unit.
  • Config: restore the tracked file(s) or unit drop-ins, redeploy from the repo.

4. Verify

  • Service answers on its documented port (see nodes.md).
  • First log lines clean (journalctl -u <unit> / docker compose logs).
  • Fresh backup succeeds after restore; delete scratch.