Back to posts
Post

3-2-1 Backup Rule: Why Having a Backup Is Not Enough

Having backups without the 3-2-1 rule means you are not safe. Learn how to implement 3-2-1 backup strategy practically across Linux and Windows environments.

Backup3-2-1 backup ruleDisaster RecoveryResticVeeamRansomware ProtectionData Protection

You have backups running every night. The green checkmarks are showing up in your dashboard. But here is the hard truth: having a backup does not mean you are safe. If all your backups sit on the same storage array as your production data, a single hardware failure or ransomware hit wipes everything out together. That is exactly why the 3-2-1 backup rule matters — it is the minimum standard I enforce in every environment I manage.

The rule is simple: keep 3 copies of your data, on 2 different media types, with 1 copy stored offsite. In this post I will walk through how I actually implement this across Linux and Windows Server environments, what tools I use, and where most admins get it wrong.

What the 3-2-1 Backup Rule Actually Means

Let me break down the 3-2-1 backup strategy piece by piece because people tend to misunderstand it.

  • 3 copies of your data: This means your original production data plus two backups. Not three backup copies — three total copies including the source.
  • 2 different media types: Do not put both backups on the same NAS. Use different storage — local disk plus tape, or local disk plus cloud object storage, or SAN plus a cheap JBOD. The point is reducing single-point-of-failure risk.
  • 1 copy offsite: One backup must live somewhere else physically or in the cloud. If your building burns down or someone encrypts your entire network, you still have a recovery path.

A lot of admins stop at "I have a backup" and never check whether that backup is actually restorable. I have seen environments where backups ran successfully for two years but the restore job was never tested once. When ransomware hit, they discovered the backups were corrupted the whole time.

Setting Up the First Two Copies on Different Media

In my Linux environments, I usually start with restic or borgbackup for the local copy and then sync the repository to a second storage target. Here is a basic pattern I use with restic:

# Initialize local repo on a separate disk
restic init --repo /mnt/backup/local/restic

# Run backup from production data
restic backup /var/www /etc /home --repo /mnt/backup/local/restic

# Copy to secondary storage (different media type)
restic copy --repo /mnt/backup/local/restic \
  --repo2 /mnt/tape/restic

The /mnt/backup mount point is a separate disk array, not a folder on the same drive as production. And /mnt/tape points to an LTO tape library or a secondary disk shelf. Two different media types — that is the second pillar of the rule.

For Windows Server, I lean on Veeam Backup & Replication. It handles the 3-copy requirement well because you can set up a primary backup target, a secondary copy job to a different repository, and a backup-to-tape or cloud job all within the same console. The key is making sure your primary repository and secondary repository are not on the same physical SAN LUN.

Getting That Critical Offsite Copy

This is where most setups fail. The offsite copy does not need to be fancy, but it needs to exist and it needs to be tested.

In my environment I push the restic repo to S3-compatible object storage after the local backup completes:

# Sync restic repo to offsite S3-compatible storage
restic copy --repo /mnt/backup/local/restic \
  --repo2 s3:s3.eu-central-1.amazonaws.com/my-backup-bucket/restic

For Windows environments with Veeam, I configure a Backup Copy Job targeting an S3-compatible repository or Azure Blob storage. Veeam's capacity tier makes this straightforward — you set a local performance tier and an S3 capacity tier, and Veeam handles the tiering automatically based on policies.

Warning: If your offsite backup sits on a system that is reachable from your production network with the same credentials, ransomware will find it and encrypt it too. Your offsite copy must be isolated. Use separate credentials, separate access keys, and ideally air-gapped or immutable storage.

Testing Restores — The Step Everyone Skips

As I mentioned before in my disaster recovery planning post (https://furkanikkan.com/urun/yedeklerinizi-bozan-felaket-kurtarma-plani-hatalari-43), an untested backup is a wish, not a backup. I run restore drills quarterly at minimum.

Here is my restore testing checklist:

  1. Pick a random file from last week's backup and restore it to a test server
  2. Do a full VM restore from the offsite copy into an isolated VLAN
  3. Verify the restored system boots and services start cleanly
  4. Document how long the restore took — this becomes your RTO baseline
  5. Check backup integrity with restic check --read-data or Veeam's health checks
# Verify restic repo integrity (reads all data packs)
restic check --read-data --repo /mnt/backup/local/restic

# Test restore a single file to /tmp
restic restore latest --target /tmp/restore-test \
  --include /etc/nginx/nginx.conf --repo /mnt/backup/local/restic

If the restore test fails, you fix it immediately. Do not wait for a real disaster to discover your backups are broken.

Common 3-2-1 Mistakes I See in Production

Here are the patterns I run into again and again when auditing backup environments:

  • All backups on the same SAN: Two backup repos sitting on the same physical storage is not 2 different media types. It is 1 media type with extra steps.
  • Offsite copy uses domain credentials: If the offsite backup mounts via SMB with the same domain admin account used in production, ransomware will traverse and encrypt it. Use dedicated service accounts with least privilege — I covered this approach in my sudo least-privilege post (https://furkanikkan.com/urun/root-yetkisi-vermeden-linux-sistem-yonetimi-sudo-ile-en-az-yetki-46).
  • No immutability: If your backup storage allows deletion or modification, an attacker with access will wipe it. Use S3 Object Lock, Veeam immutable repositories, or restic with append-only access.
  • Backup monitoring is an afterthought: If your backup job silently fails for three weeks and nobody notices, your 3-2-1 setup is meaningless. I pipe backup status into our monitoring stack so failures trigger alerts within minutes, not days.

My Practical 3-2-1 Setup Summary

Here is what a solid 3-2-1 implementation looks like in my environments:

  • Copy 1: Production data on the live server
  • Copy 2: Nightly backup to a local disk array (different physical hardware)
  • Copy 3: Synced to S3-compatible cloud storage with Object Lock enabled
  • Restore test: Quarterly drill with documented recovery times
  • Monitoring: Backup job failures alert through Prometheus + Alertmanager or Veeam One, depending on the environment

Tip: Automate everything. If a human has to manually trigger the offsite copy, it will eventually stop happening. Cron jobs, Veeam schedules, or systemd timers — whatever fits your stack, make it automatic and make it alert on failure.

The 3-2-1 backup rule is not theoretical. It is the difference between telling your boss "we lost everything" and telling your boss "we are restoring now, expect downtime of two hours." Implement it, test it, and stop trusting green checkmarks alone.


Cover image: Lenharth Systems · CC0 (Openverse / kamu malı) · https://stocksnap.io/photo/computer-hard-2J3PLNMO9M