3.1 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 the handoff log with the snapshot name and result.