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
T

102 lines
3.2 KiB
Markdown

# 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:
```bash
sudo /usr/local/sbin/agrarian-project-backup --manual
```
Force a scheduled-style snapshot even if no changes are detected:
```bash
sudo /usr/local/sbin/agrarian-project-backup --force
```
Check whether a snapshot would be created:
```bash
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:
```bash
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:
```bash
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.