Backup Strategy Overview
Homelab v3 implements a five-tier backup strategy designed to protect against different failure scenarios — from accidental deletions to complete site loss.Multi-Tier Backup Architecture
| Tier | What | Tool | Destination | Recovery Speed |
|---|---|---|---|---|
| Tier 0 | VM/LXC snapshots | Proxmox Backup Server (PBS) | pbs-prod-01 VM → ZFS mirror share on NAS | Minutes |
| Tier 1 | Docker appdata + stacks | Hardened rsync script + Healthchecks | NAS /backups share (ZFS mirror pool) | Minutes |
| Tier 1 | Plex database | Dedicated backup script | NAS /backups/plex/db | Minutes |
| Tier 2 | NAS share snapshots | Unraid ZFS snapshots | Local ZFS snapshots on NAS | Seconds |
| Tier 3 | Off-box cold copy | Synology ABB (pull-based) | Synology NAS (SkyHawks) — nightly | Hours |
| Tier 4 | Cloud backup | Backblaze B2 | Immich photos, critical backups offsite | Days |
Tier 0: Proxmox Backup Server
PBS Configuration
PBS runs as a VM (pbs-prod-01) on pve-prod-02 (Optiplex) and backs up all VMs and LXCs on both Proxmox nodes.
Access PBS Web Interface
Navigate to
https://192.168.30.12:8007Login with root credentials or Proxmox-linked account.Configure Datastore
Datastore → Add Datastore
- Name:
backup-storage - Backing Path:
/mnt/backups(NFS mount from NAS ZFS mirror pool) - GC Schedule:
dailyat 02:00 - Prune Schedule: Keep last 7 daily, 4 weekly, 3 monthly
Add Proxmox Nodes as Backup Sources
From each Proxmox node UI:Datacenter → Storage → Add → Proxmox Backup Server
- ID:
pbs-prod-01 - Server:
192.168.30.12 - Username:
root@pam - Datastore:
backup-storage - Fingerprint: (copy from PBS dashboard)
Restoring from PBS
Browse Available Backups
In Proxmox UI:Datacenter → Storage → pbs-prod-01 → ContentFind the VM/LXC backup you need to restore.
Restore VM or LXC
Right-click the backup → Restore
- VM ID: (new ID or overwrite existing)
- Storage: Select target storage
- Start after restore: ✓ (optional)
Tier 1: Application Data Backups
Docker Appdata Backup
Runs ondocker-prod-01 via hardened rsync script with safety checks.
Location: /opt/scripts/backup-appdata.sh
Key Safety Features:
- Mountpoint validation (fails if NFS unmounted)
- Exclusive lockfile (prevents overlapping runs)
- Healthchecks.io heartbeat monitoring
- Pre-flight disk space check
Manual Backup Execution
SSH to Script will:
docker-prod-01:- Verify
/datais mounted - Acquire lockfile
- Rsync
/opt/appdata→ NAS/backups/docker/appdata - Rsync
/opt/stacks→ NAS/backups/docker/stacks - Ping Healthchecks.io on success
Restoring Docker Appdata
Tier 1: Plex Database Backup
Dedicated backup script runs onnas-prod-01 (Unraid) since Plex runs natively there.
Location: /boot/config/plugins/user.scripts/scripts/backup-plex-db/script
Schedule: Daily at 03:00 via Unraid User Scripts plugin
Manual Plex Backup
From Unraid terminal or SSH:Script performs:
- Stop Plex container gracefully
- Rsync
/mnt/user/appdata/plex/Library/Application Support/Plex Media Server/Plug-in Support/Databases/→/mnt/user/backups/plex/db/ - Restart Plex container
- Uses EXIT trap to ensure Plex restarts even on failure
Restoring Plex Database
Tier 2: ZFS Snapshots
Unraid automatically snapshots ZFS mirror pool (backups and photos shares).
Purpose: Instant recovery from accidental deletion or corruption within the last 7 days.
Viewing Snapshots
From Unraid terminal:Restoring from ZFS Snapshot
Tier 3: Off-Site Cold Copy (Synology)
Synology Active Backup for Business (ABB) runs on separate Synology NAS and pulls backups nightly. Pull-based: NAS credentials on Synology are read-only. If Synology is compromised, attacker cannot modify or delete primary backups.Verifying Synology Backups
Check Backup Status
Verify:
- Last successful backup timestamp (should be within 24 hours)
- Data transferred size
- No errors in activity log
Tier 4: Cloud Backup (Backblaze B2)
Status: Future implementation Target Data:- Immich photo library (
/data/photos) - Critical backup metadata
- Plex database backups
rclone with encryption
Schedule: Weekly, overnight during low-bandwidth periods
Backup Monitoring
All automated backups report to Healthchecks.io for heartbeat monitoring. Healthchecks Dashboard:https://healthchecks.io
Monitored Jobs:
docker-appdata-backup— Daily 04:00plex-db-backup— Daily 03:00pbs-backup-pve-prod-01— Daily 01:00pbs-backup-pve-prod-02— Daily 01:30
Setting Up New Backup Monitoring
Create Healthcheck
Healthchecks.io dashboard → Add Check
- Name:
service-name-backup - Period:
1 day(or appropriate interval) - Grace:
1 hour
Disaster Recovery Scenarios
Scenario 1: Accidental File Deletion
Recovery Time: Seconds to minutes Steps:- Check ZFS snapshots first (Tier 2) — fastest recovery
- If older than snapshot retention, restore from rsync backup (Tier 1)
Scenario 2: Docker VM Corruption
Recovery Time: 30-60 minutes Steps:- Restore VM from PBS (Tier 0)
- Restore appdata from rsync backup (Tier 1)
- Restart containers
Scenario 3: NAS Failure
Recovery Time: 4-8 hours Steps:- Replace failed hardware
- Rebuild Unraid array
- Restore from Synology ABB (Tier 3)
- Rebuild VM/LXC from PBS (Tier 0 backups survive on separate VM)
Scenario 4: Complete Site Loss (Fire/Flood)
Recovery Time: Days to weeks Steps:- Restore photos and critical data from Backblaze B2 (Tier 4)
- Rebuild infrastructure from IaC repository
- Media library must be re-downloaded (acceptable loss)
- Plex database restored from B2 retains watch history and metadata