This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AgrarianGameArchive/Docs/Ops/AgrarianProjectBackupRunbook.md

3.2 KiB

Agrarian Project Backup Runbook

Agrarian project backups run from the Codex/dev host and write encrypted, deduplicated restic snapshots to Linastorage.

Paths

  • Source: /mnt/projects/AgrarianGameBulid
  • NAS mount: /mnt/backups/linastorage
  • Backup root: /mnt/backups/linastorage/backups/agrarian-game/project
  • Restic repository: /mnt/backups/linastorage/backups/agrarian-game/project/restic-repository
  • State files: /mnt/backups/linastorage/backups/agrarian-game/project/state
  • Password file: /root/.backup-secrets/agrarian-project-restic.password
  • Script: /usr/local/sbin/agrarian-project-backup
  • Service: agrarian-project-backup.service
  • Timer: agrarian-project-backup.timer

Schedule

The timer runs every two hours with a small randomized delay. The script exits without creating a snapshot when there are no changes compared to the latest snapshot.

The first implementation attempt used rsync --link-dest, but Linastorage over SMB did not support the hard-link operations required for that model. The active job uses restic instead. Restic stores encrypted, deduplicated chunks as normal files, which is a better fit for this SMB target.

Manual snapshots can be created before risky work:

sudo /usr/local/sbin/agrarian-project-backup --manual

Force a scheduled-style snapshot even if no changes are detected:

sudo /usr/local/sbin/agrarian-project-backup --force

Check whether a snapshot would be created:

sudo /usr/local/sbin/agrarian-project-backup --dry-run

Included

  • Unreal project files.
  • Git metadata, including unpushed local history when practical.
  • Local source data under Data/, including raw terrain source inputs excluded from GitHub.
  • Scripts, docs, configs, plugins, content, and project metadata.

Excluded

  • DerivedDataCache/
  • Intermediate/
  • Saved/
  • Binaries/
  • Builds/
  • transient Git LFS temp files
  • local Visual Studio temp files

Retention

The script uses restic retention:

  • All snapshots within 7 days.
  • Daily snapshots for 30 days.
  • Weekly snapshots for 12 weeks.
  • Monthly snapshots for 12 months.

The script records a source signature and skips scheduled runs when no project changes are detected.

Restore Test

Restore one file to a temporary path:

mkdir -p /tmp/agrarian-project-restore-test
sudo sh -c 'RESTIC_PASSWORD_FILE=/root/.backup-secrets/agrarian-project-restic.password \
  restic -r /mnt/backups/linastorage/backups/agrarian-game/project/restic-repository \
  dump latest /mnt/projects/AgrarianGameBulid/AGRARIAN_DEVELOPMENT_ROADMAP.md \
  > /tmp/agrarian-project-restore-test/AGRARIAN_DEVELOPMENT_ROADMAP.md'
diff -q /mnt/projects/AgrarianGameBulid/AGRARIAN_DEVELOPMENT_ROADMAP.md \
  /tmp/agrarian-project-restore-test/AGRARIAN_DEVELOPMENT_ROADMAP.md

List snapshots:

sudo RESTIC_PASSWORD_FILE=/root/.backup-secrets/agrarian-project-restic.password \
  restic -r /mnt/backups/linastorage/backups/agrarian-game/project/restic-repository \
  snapshots --tag agrarian-game --tag project

Record restore tests in Docs/Ops/BackupRestoreTestLog.md with the snapshot name, restored path, result, and cleanup status. Summarize the latest result in handoff notes when useful.