Homelab the Right Way

Home › Posts

RAID is not a backup: the 3-2-1 rule, honestly

What actually counts as a copy under the 3-2-1 rule, why a RAID mirror or a snapshot only protects against one kind of failure, and the one-page inventory that exposes the gaps.

· 4 min read · backups3-2-1zfsproxmox

RAID is not a backup: the 3-2-1 rule, honestly
Watch: RAID is not a backup: the 3-2-1 rule, honestly on YouTube
The video for this post. Watch on YouTube

Three copies of anything you care about, on two different kinds of storage, with one of them somewhere else. Everyone has heard the 3-2-1 rule. Far fewer homelabs actually have it, because the rule is easy to say and the details are where it falls apart.

The problem is usually not that people have no backups. It is that some of the copies they are counting are not copies at all.

Things that feel like backups but aren't

RAID or a ZFS mirror. That is one copy on resilient disks. It protects you from a dead drive and from nothing else: not from rm -rf, not from a bad update, not from ransomware, not from the host catching fire. Delete a file and the mirror faithfully deletes it on both disks.

Snapshots. A ZFS or Proxmox snapshot lives on the same pool as the data. It is a wonderful undo button and a terrible backup. Lose the pool and the snapshots go with it.

A second copy on the same box. vzdump writing to a different directory on the same host is one disk failure away from losing both copies.

The NAS. A copy on the NAS is a real second copy. It is still in the same house, on the same power circuit, behind the same door.

The cloud sync folder. Sync is not backup. Delete the file at home and the cloud deletes it too, sometimes with a short grace period, sometimes not.

What actually counts

A copy counts when it survives the loss of the thing it was copied from. That one sentence settles most arguments about what is and isn't a backup.

Two kinds of storage means two things that do not fail together: local disk and a NAS, local disk and object storage, a Proxmox Backup Server datastore and a tape if you are that kind of person.

Off-site means a different building. A friend's house across town is off-site. The garage is not.

A shape that satisfies the rule for a typical Proxmox homelab looks like this:

CopyWhereProtects against
1. The live dataProxmox hosts, ZFS mirrorsA dead disk (and nothing else)
2. Nightly backupsProxmox Backup Server on a separate box, plus vzdump to the NAS for a few guestsMistakes, bad updates, a dead host
3. Off-siteEncrypted copy in object storage, or a PBS sync to a friend's boxFire, theft, flood, ransomware that reaches the NAS

Notice that row 1 is in the table. The live data is a copy, it just is not a backup. RAID earns its place by keeping you running through a disk failure, not by protecting your history.

Write the inventory first

Before touching a single backup job, write down what you are protecting. It fits on one page and it is one of the most useful documents a homelab can have.

One row per thing, four columns:

  1. What it is (Home Assistant VM, OPNsense, the photo server, the Proxmox hosts themselves, the NAS data share)
  2. How it is backed up
  3. How far back you can go
  4. How you would restore it

The last column is the one that exposes the holes. It is easy to write "nightly backup" in column two. It is much harder to write a restore path you have actually tried. Any row with "none" in column two, or a restore path you have never tested, is your to-do list.

Keep the table somewhere that survives the homelab: a note on your phone or a printed page. A recovery plan stored only on the server you are recovering is not much of a plan.

Decide what you do not back up

Backing up everything is how backup storage fills up and jobs start failing. Some things are cheaper to rebuild than to store:

  • Downloaded ISOs and container templates. Keep a list, not the files.
  • Media libraries you can re-rip or re-download, if you are honest about whether you would.
  • Scratch VMs and test containers. Tag them scratch so the exclude is obvious.
  • Caches: transcodes, thumbnails an app will regenerate, package caches.

Everything not on that list gets backed up by default. "By default" is the important phrase: a backup job that protects new guests automatically, rather than a hand-picked list, is what makes it true.

Checklist

  • Inventory written: one row per thing, with how it is backed up, how far back, and the restore path
  • Every row has a copy on a second kind of storage and one off-site
  • RAID, snapshots and sync folders are not counted as backups anywhere in the table
  • A short list of what you deliberately do not back up, and why
  • The table lives somewhere that survives the homelab

RAID keeps you running. Backups get you back. You want both, and you want to know which one you are looking at.

More articles