Backups and Disaster Recovery
A backup is only comforting after you've proved you can restore it. That's the main thing I believe about backups. A backup is just a copy. Disaster recovery is everything it takes to actually get a service back after something bad happens: the copies, plus documentation, credentials, people, somewhere to restore to, and keeping everyone informed.
Start with RPO and RTO
RPO: how much data can you lose?
The Recovery Point Objective is measured in time. An RPO of four hours means it's acceptable to restore data that's up to four hours old.
RTO: how long can it be down?
The Recovery Time Objective is how long you have to get it back once you decide to recover. That includes hardware, copying data, restoring, configuring, testing, and talking to customers, not just the restore itself.
Set these per service, not once for the whole company. A billing database, a brochure website, a huge archive, and a customer VPS all need different things.
| Service | Example RPO | Example RTO | What that means |
|---|---|---|---|
| Static marketing site | 24 hours | 8 hours | A daily backup and a simple redeploy is probably plenty. |
| Shared hosting server | 24 hours or better | A few hours | Rebuilding the server, restoring accounts, DNS, mail, and testing all need to be practiced. |
| Transactional database | Minutes | 1 hour | You need log shipping, replication, or database-aware backups. |
| Big storage service | Depends on the data | Maybe days | Restore bandwidth and spare capacity end up driving everything. |
Layers of backups
I like to keep quick everyday restores separate from real disaster recovery:
Production workload
|
+---- Local snapshot or short-retention copy
| Quick fixes for "oops, I deleted that"
|
+---- Primary backup repository
| History and routine restores
|
+---- Secondary or off-site copy
Losing the building, ransomware, or the repo dying
3-2-1-1-0
- 3 copies: production plus at least two more.
- 2 different systems or media: so one technology or one admin mistake can't take out every copy.
- 1 off-site: for when the whole building has a bad day.
- 1 offline, immutable, or well isolated: something production credentials can't delete.
- 0 errors you haven't checked: monitor the jobs and test restores.
The numbers matter less than the independence. A production server and a backup VM on the same storage array are two copies, but one failure.
Back up more than the data
- Customer files, databases, mailboxes, and VM disks
- DNS zones and IP assignments
- Hypervisor, switch, firewall, and load balancer configs
- App secrets and encryption keys (stored securely)
- License info and vendor logins
- Monitoring rules, alert routing, and dashboards
- Runbooks, diagrams, and inventory
- Billing, support, and customer contact info
It's easy to have perfect backups of every VM and no copy of the firewall config that makes any of them reachable.
Retention is a recovery feature
Keep backups long enough to match how long it takes to notice problems. Seven days of retention won't help with quiet corruption found after two weeks, a deleted mailbox someone notices a month later, or financial data needed at the end of the year.
An example schedule
| How often | Keep | For |
|---|---|---|
| Hourly | 24–48 | Recent mistakes |
| Daily | 7–30 | Everyday restores |
| Weekly | 4–12 | Problems found weeks later |
| Monthly | 12+ | Longer history and business needs |
| Yearly | Depends on policy | Legal, financial, archive |
More retention isn't automatically better, though. It costs storage, it's more data to protect for privacy, and you end up keeping old compromised or regulated data around. Decide when things expire on purpose.
Pruning vs. actually getting space back
Deduplicating systems often split "forget this backup" from "free the space." Watch both. The prune job can succeed while the disk stays full until garbage collection runs.
Keep backups safe from production
Ransomware and admin mistakes usually use legitimate credentials. If your backup server trusts the same directory, root passwords, and management network as production, it can get wiped in the same incident.
Identity
Separate backup credentials, limited service accounts, MFA, and a defined emergency access process.
Network
Lock down management access, separate data from control traffic, and only allow the connections that are needed.
Retention locks
Object lock, immutable snapshots, write-once policies, offline copies, whatever your platform supports.
Separation of powers
Normal production automation shouldn't be able to delete old backups without hitting another barrier first.
Encryption changes the plan
Encryption protects what's in your backups, but lose the key and a perfectly healthy backup is just random noise. Keep keys, recovery codes, passwords, and docs in at least two secure places, and test a recovery from a clean machine using only those stored materials.
Restore testing
A green checkmark on a backup job only proves something got written somewhere. A restore test proves you can actually use it.
Test at different levels
- A file. Restore one customer file somewhere else and compare it.
- An application. Restore the files and database together, then test logins, scheduled jobs, and integrations.
- A whole VM. Boot it on an isolated network, check the services, and time it.
- A whole host. Install a replacement and restore enough config to run workloads again.
- A whole site. Pretend the main facility and your usual admin tools are gone.
Write down what happened
| Field | Example |
|---|---|
| Which backup | VM 105, nightly from 2026-07-10 |
| Restored to | Isolated test cluster, VLAN 390 |
| Start and finish | 01:10 to 02:03 |
| Checked | Boot, database integrity, web login, scheduled tasks |
| Problems | An external API credential wasn't in the app backup |
| Fix | Add secret-store recovery to the runbook and the quarterly test |
That "problems" row is the whole point. Every restore test I'd count as a success finds at least one thing like that.
Write the runbook before the disaster
A recovery runbook should work for someone who didn't build the system. And it should cover the decisions, not just the commands.
What goes in it
- When it counts as a disaster, and who gets to decide
- Which services come back first
- Credentials, keys, and vendor contacts you'll need
- Where the replacement compute, storage, network, and IPs come from
- Exactly where to restore from, and how far back you can go
- DNS, BGP, NAT, firewall, or proxy changes
- How to check each app actually works
- Message templates for customers and staff
- How to go back to the primary once it's fixed
- Getting backups and monitoring running again afterward
Restore in dependency order
1. Admin access and a way to communicate
2. Core network, DNS, identity, and monitoring
3. Backup catalog, keys, and repository access
4. Shared databases and storage
5. Customer-facing compute and apps
6. Internal nice-to-haves
Restoring an app before its DNS, database, secrets, or storage is just wasted time. Write the order down.
Scenarios to think through
A customer account got deleted
Restore to a temporary account or directory first. Check domains, databases, mail, permissions, and ownership before you touch anything live.
A hypervisor's boot disk died
Reinstall, reconnect storage and networks, restore the platform config, then bring back the guests. Notice how much of that was actually written down.
The backup server got compromised
Don't trust that repository until you know how far the damage goes. Use the isolated or secondary copy, and rotate credentials before reconnecting anything.
Database corruption
Figure out when it started. Last night's backup might have the same corruption in it. Try older restore points and transaction logs.
The facility is down
Wait it out, fail over, or rebuild elsewhere? Think about routing, whether your IPs can move, DNS TTLs, licensing, and communication.
Someone (maybe you) made a mistake
Save the current state, stop any automation, find the last known-good config, and restore the smallest amount that fixes it.
A quarterly gut check
- Which backups failed, and did anyone do anything about it?
- Which systems have never had a test restore?
- Are backup credentials actually separate from production?
- Can the biggest workload meet its RTO at the restore speed you've actually measured?
- Can you get to the encryption keys and recovery docs if the primary site is down?
- Did any new systems get added without a backup policy?
- Is retention longer than you legally or practically need?
- Does the off-site copy secretly share a provider, account, or network with production?
