141 lines
5.2 KiB
Markdown
141 lines
5.2 KiB
Markdown
|
|
# Windows Main-Computer Backup Setup
|
||
|
|
|
||
|
|
The AtoCore backup pipeline runs nightly on Dalidou and already pushes snapshots
|
||
|
|
off-host to the T420 (`papa@192.168.86.39`). This doc sets up a **second**,
|
||
|
|
pull-based daily backup to your Windows main computer at
|
||
|
|
`C:\Users\antoi\Documents\ATOCore_Backups\`.
|
||
|
|
|
||
|
|
Pull-based means the Windows machine pulls from Dalidou. This is simpler than
|
||
|
|
push because Dalidou doesn't need SSH keys to reach Windows, and the backup
|
||
|
|
only runs when the Windows machine is powered on and can reach Dalidou.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
- Windows 10/11 with OpenSSH client (built-in since Win10 1809)
|
||
|
|
- SSH key-based auth to `papa@dalidou` already working (you're using it today)
|
||
|
|
- `C:\Users\antoi\ATOCore\scripts\windows\atocore-backup-pull.ps1` present
|
||
|
|
|
||
|
|
## Test the script manually
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
powershell.exe -ExecutionPolicy Bypass -File `
|
||
|
|
C:\Users\antoi\ATOCore\scripts\windows\atocore-backup-pull.ps1
|
||
|
|
```
|
||
|
|
|
||
|
|
Expected output:
|
||
|
|
```
|
||
|
|
[timestamp] === AtoCore backup pull starting ===
|
||
|
|
[timestamp] Dalidou reachable.
|
||
|
|
[timestamp] Pulling snapshots via scp...
|
||
|
|
[timestamp] Pulled N snapshots successfully (total X MB, latest: ...)
|
||
|
|
[timestamp] === backup complete ===
|
||
|
|
```
|
||
|
|
|
||
|
|
Target directory: `C:\Users\antoi\Documents\ATOCore_Backups\snapshots\`
|
||
|
|
Logs: `C:\Users\antoi\Documents\ATOCore_Backups\_logs\backup-*.log`
|
||
|
|
|
||
|
|
## Register the Task Scheduler task
|
||
|
|
|
||
|
|
### Option A — automatic registration (recommended)
|
||
|
|
|
||
|
|
Run this PowerShell command **as your user** (no admin needed — uses HKCU task):
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
$action = New-ScheduledTaskAction -Execute 'powershell.exe' `
|
||
|
|
-Argument '-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File C:\Users\antoi\ATOCore\scripts\windows\atocore-backup-pull.ps1'
|
||
|
|
|
||
|
|
# Run daily at 10:00 local time; if missed (computer off), run at next logon
|
||
|
|
$trigger = New-ScheduledTaskTrigger -Daily -At 10:00AM
|
||
|
|
$trigger.StartBoundary = (Get-Date -Format 'yyyy-MM-ddTHH:mm:ss')
|
||
|
|
|
||
|
|
$settings = New-ScheduledTaskSettingsSet `
|
||
|
|
-AllowStartIfOnBatteries `
|
||
|
|
-DontStopIfGoingOnBatteries `
|
||
|
|
-StartWhenAvailable `
|
||
|
|
-ExecutionTimeLimit (New-TimeSpan -Minutes 10) `
|
||
|
|
-RestartCount 2 `
|
||
|
|
-RestartInterval (New-TimeSpan -Minutes 30)
|
||
|
|
|
||
|
|
Register-ScheduledTask -TaskName 'AtoCore Backup Pull' `
|
||
|
|
-Description 'Daily pull of AtoCore backup snapshots from Dalidou' `
|
||
|
|
-Action $action -Trigger $trigger -Settings $settings `
|
||
|
|
-User $env:USERNAME
|
||
|
|
```
|
||
|
|
|
||
|
|
Key settings:
|
||
|
|
- `-StartWhenAvailable`: if the computer was off at 10:00, run as soon as it
|
||
|
|
comes online
|
||
|
|
- `-AllowStartIfOnBatteries`: works on laptop battery too
|
||
|
|
- `-ExecutionTimeLimit 10min`: kill hung tasks
|
||
|
|
- `-RestartCount 2`: retry twice if it fails (Dalidou temporarily unreachable)
|
||
|
|
|
||
|
|
### Option B -- Task Scheduler GUI
|
||
|
|
|
||
|
|
1. Open Task Scheduler (`taskschd.msc`)
|
||
|
|
2. Create Basic Task -> name: `AtoCore Backup Pull`
|
||
|
|
3. Trigger: Daily, 10:00 AM, recur every 1 day
|
||
|
|
4. Action: Start a program
|
||
|
|
- Program: `powershell.exe`
|
||
|
|
- Arguments: `-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\Users\antoi\ATOCore\scripts\windows\atocore-backup-pull.ps1"`
|
||
|
|
5. Finish, then edit the task:
|
||
|
|
- Settings tab: check "Run task as soon as possible after a scheduled start is missed"
|
||
|
|
- Settings tab: "If the task fails, restart every 30 minutes, up to 2 times"
|
||
|
|
- Conditions tab: uncheck "Start only if computer is on AC power" (if you want it on battery)
|
||
|
|
|
||
|
|
## Verify
|
||
|
|
|
||
|
|
After the first scheduled run:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Most recent log
|
||
|
|
Get-ChildItem C:\Users\antoi\Documents\ATOCore_Backups\_logs\ |
|
||
|
|
Sort-Object Name -Descending |
|
||
|
|
Select-Object -First 1 |
|
||
|
|
Get-Content
|
||
|
|
|
||
|
|
# Latest snapshot present?
|
||
|
|
Get-ChildItem C:\Users\antoi\Documents\ATOCore_Backups\snapshots\ |
|
||
|
|
Sort-Object Name -Descending |
|
||
|
|
Select-Object -First 3
|
||
|
|
```
|
||
|
|
|
||
|
|
## Unregister (if needed)
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
Unregister-ScheduledTask -TaskName 'AtoCore Backup Pull' -Confirm:$false
|
||
|
|
```
|
||
|
|
|
||
|
|
## How it behaves
|
||
|
|
|
||
|
|
- **Computer on, Dalidou reachable**: pulls latest snapshots silently in ~15s
|
||
|
|
- **Computer on, Dalidou unreachable** (remote work, network down): fail-open,
|
||
|
|
exits without error, logs "Dalidou unreachable"
|
||
|
|
- **Computer off at scheduled time**: Task Scheduler runs it as soon as the
|
||
|
|
computer wakes up
|
||
|
|
- **Many days off**: one run catches up; scp only transfers files not already
|
||
|
|
present (snapshots are date-stamped directories, idempotent overwrites)
|
||
|
|
|
||
|
|
## What gets backed up
|
||
|
|
|
||
|
|
The snapshots tree contains:
|
||
|
|
- `YYYYMMDDTHHMMSSZ/config/` — project registry, AtoCore config
|
||
|
|
- `YYYYMMDDTHHMMSSZ/db/` — SQLite snapshot of all memory, state, interactions
|
||
|
|
- `YYYYMMDDTHHMMSSZ/backup-metadata.json` — SHA, timestamp, source info
|
||
|
|
|
||
|
|
Chroma vectors are **not** in the snapshot by default
|
||
|
|
(`ATOCORE_BACKUP_CHROMA=false` on Dalidou). They can be rebuilt from the
|
||
|
|
source documents if lost. To include them, set `ATOCORE_BACKUP_CHROMA=true`
|
||
|
|
in the Dalidou cron environment.
|
||
|
|
|
||
|
|
## Three-tier backup summary
|
||
|
|
|
||
|
|
After this setup:
|
||
|
|
|
||
|
|
| Tier | Location | Cadence | Purpose |
|
||
|
|
|---|---|---|---|
|
||
|
|
| Live | Dalidou `/srv/storage/atocore/backups/snapshots/` | Nightly 03:00 UTC | Fast restore |
|
||
|
|
| Off-host | T420 `papa@192.168.86.39:/home/papa/atocore-backups/` | Nightly after Dalidou | Dalidou dies |
|
||
|
|
| User machine | `C:\Users\antoi\Documents\ATOCore_Backups\` | Daily 10:00 local | Full home-network failure |
|
||
|
|
|
||
|
|
Three independent copies. Any two can be lost simultaneously without data loss.
|