Homelab Backup Strategy
Most homelab backup stories start with "I lost my NAS and discovered my backups had been broken for months." The fix is straightforward: pick a clear schema for what to back up, automate it, and test restores. The 3-2-1 rule from the data-protection canon applies to homelabs as much as to enterprise — three copies, two media, one off-site. Beyond that, the operational details matter more than the specific tools.
What to back up
| Category | Examples | Priority |
|---|---|---|
| Configuration | VM definitions, docker-compose files, Ansible repos, /etc | Critical — needed to rebuild |
| Application data | Databases, app state, user uploads | Critical — irreplaceable |
| Personal data | Photos, documents, projects | Critical — irreplaceable |
| Media library | Movies, music, TV shows | Optional — re-rippable from originals |
| OS installations | VM disk images of stock OS installs | Skip — easy to recreate |
| Cache / temp data | Plex transcoder cache, container build caches | Skip — regenerable |
Distinguishing irreplaceable from regenerable is the first design decision. Backing up everything is wasteful; backing up too little leaves gaps.
The 3-2-1 rule applied to homelab
- 3 copies: live data + local backup + off-site backup.
- 2 different media: NAS + external HDD, or NAS + cloud.
- 1 off-site: cloud, a friend's house, or a USB drive you take to work.
Snapshots don't count as one of the three because they live on the same storage as the original. See snapshots vs backups.
Backup tool choices
| Tool | Best for |
|---|---|
| restic | Modern dedupe + encryption; many backends (local, SFTP, S3, B2, etc.) |
| borg | Similar to restic; mature; client-server architecture |
| rsync | Simple file mirroring; no dedupe or compression |
| rclone | Sync to cloud storage providers; not really a backup tool but useful |
| ZFS send/receive | Block-level snapshots streamed between ZFS pools |
| Proxmox Backup Server | Optimized for Proxmox VMs and containers |
| Synology Hyper Backup | Built into Synology DSM; backs up to local, cloud, or other Synologys |
Most homelabs end up with: restic or borg for general file backups, ZFS send for VMs/containers on ZFS, and rsync for media libraries.
Where to put copies
- Local backup — a separate NAS, a USB-attached HDD, or a different ZFS pool on the same server.
- Off-site copy — cloud object storage (B2, S3, Wasabi, R2), or a remote NAS at a friend's house, or a rotating USB drive taken off premises.
For cloud off-site, encrypt before upload — the cloud provider stores ciphertext only. restic and borg do this natively.
Encryption
Off-site backups should be encrypted at rest. restic, borg, and Hyper Backup encrypt by default with a passphrase or key file. The key needs to be stored somewhere recoverable but not at the same location that's being backed up — a password manager, a safe-deposit box, etc.
The fastest way to lose a backup is to lose the key. Plan for key recovery as carefully as backup recovery.
The backup schedule
A reasonable starting schedule:
- Hourly — snapshots on critical filesystems. Free; lives on same storage.
- Daily — incremental backup to local backup target.
- Weekly — incremental backup to off-site (cloud or remote).
- Monthly — backup verification (restore test).
- Quarterly — full restore test of one service.
Database backup specifics
Databases need consistent backups. Three approaches:
- Stop the database, copy the files, start it again. Simple; brief downtime.
- Use the database's built-in backup command. mysqldump, pg_dump, sqlite3 .dump. Produces a consistent SQL file.
- Filesystem snapshot of running database. Works if the database supports it (Postgres with continuous archiving, MySQL with consistent snapshots). Otherwise produces inconsistent snapshots that may not restore.
For homelabs running Home Assistant, Nextcloud, Vaultwarden, etc., use the application's built-in backup feature if available.
Container backup strategy
The container image is recreatable; the volumes are not. So:
- Back up the docker-compose.yml or equivalent so containers can be redeployed identically.
- Back up the bind-mounts and named volumes for each container.
- Stop containers before backing up volumes if the data is database-like and may be in transit.
- Don't bother snapshotting running containers — restoring from those often fails.
Bandwidth considerations
The first off-site backup of a large dataset can take days. Strategies:
- Seed off-site initially via sneakernet. Carry a USB drive containing the initial backup to the off-site location; perform incremental updates over the network thereafter.
- Limit upload bandwidth so the backup doesn't saturate your internet during the day.
- Schedule large transfers overnight.
- Compress and dedupe before transferring — restic/borg do this automatically.
Testing restores
The discipline that separates backup-that-works from backup-that-might-work:
- Monthly: restore one file from each backup; verify it opens correctly.
- Quarterly: restore a database to a test environment; run a query.
- Annually: assume primary storage is gone; rebuild a service entirely from backups. Time how long it took.
Discovering backups are corrupt during a real incident is much worse than during a drill.
Monitoring backup success
A backup that didn't run is the same as no backup. Monitor:
- Last successful backup timestamp per repository.
- Backup duration trend (sudden increases may indicate problems).
- Repository size trend.
- Restore-test success.
Healthchecks.io or similar service: your backup script pings a URL on success; the service alerts when the ping is missed.
Common mistakes
- Backup only on the same array as the data. Drive failure or fire takes both.
- No off-site copy. Local disaster (theft, fire, flood) wipes out everything.
- Off-site backup but no encryption. Cloud provider compromise exposes data.
- Backup runs but is never verified. Corrupt or missing data discovered too late.
- Key stored only in the backup itself. Lose access to the live system, lose access to the backup.
- Backing up everything indiscriminately. Wastes time, bandwidth, and storage; nothing prioritized.
Frequently Asked Questions
What should I back up in a homelab?
Three categories. Configuration: VM definitions, container configs, Ansible repos, /etc files — what you'd need to rebuild the homelab from bare metal. Application data: databases, photos, documents, anything the apps store and you care about. Media (optional): movies, music — easy to re-rip if you have the originals, expensive to back up. Skip what's easy to recreate (OS installs, downloadable apps).
What's the right backup tool for homelab?
For incremental dedupe-aware backups: restic or borg. Both handle encryption, dedupe, and remote repositories. For ZFS-based homelabs: ZFS send/receive between two pools (often paired with snapshots). For simple file copies: rsync to a NAS. Most homelabs end up using restic or borg for everything except large media libraries, which are often simpler to rsync.
Where should the off-site copy live?
Options in increasing complexity: a USB drive you take to work and rotate weekly; cloud object storage (Backblaze B2, AWS S3, Wasabi, Cloudflare R2) — restic and borg encrypt before upload; another homelab at a friend's or family's house (mutual off-site). The right choice depends on data volume, network capacity, and ongoing budget.
How often should I test restores?
At least quarterly, restore a representative file or two from the latest backup and verify it opens correctly. Annually, do a more complete restore — bring up a service from backup in a test environment. Untested backups are wishes. The first time you discover backups are broken should not be when you need them.
Should I back up Docker containers?
Back up the volumes (the data), not the containers themselves. Containers should be recreatable from their image and configuration; the docker-compose.yml or Ansible playbook plus the volume contents is what to back up. Backing up running containers (e.g., snapshotting them) often produces inconsistent results because in-flight transactions are mid-flight.
Related Guides
More From This Section
All Homelab Guides
Proxmox, pfSense vs OPNsense, Docker vs VMs, VLANs, and self-hosted apps.
Container Networking Basics
How container networking actually works — Docker bridge, host mode, macvlan, overlay networks, and the difference…
DNS for Homelab
How to run DNS for a homelab — local-only domain names, split-horizon between internal and external resolution, Pi-hole…
Run a Speed Test
Measure download, upload, ping, and jitter in your browser.