CephCV · Backup StrategyBackup Strategy
Setting RPO and RTO before designing anything
What you'll learn
- Define RPO and RTO precisely
- Derive them from business impact
- Design backup to meet them
- Measure whether they are actually met
Prerequisites
None — start here.
Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18
Why this matters in production
A backup design without stated targets cannot be evaluated, so it is evaluated after the incident, against targets invented at that moment.
Definitions
RPO — Recovery Point Objective
How much data loss is acceptable.
Determined by backup frequency.
RTO — Recovery Time Objective
How long recovery may take.
Determined by restore mechanics and data volume.
| Target | Set by | Cost driver |
|---|---|---|
| RPO | backup or replication frequency | write amplification, bandwidth |
| RTO | restore path and data volume | bandwidth, parallelism, preparation |
They are independent. A daily backup restored in ten minutes has a
24-hour RPO and a 10-minute RTO.
Deriving them from impact
Ask the application owner:
if we lose the last N of changes, what happens?
if this is unavailable for N hours, what happens?
Then find where the answer changes materially.
| Workload | Typical RPO | Typical RTO |
|---|---|---|
| Financial transactions | near zero | minutes |
| A production database | minutes to an hour | an hour |
| VM root disks | a day | hours |
| A file share | a day | hours |
| Archival data | a week | days |
| A rebuild-from-source environment | not applicable | rebuild time |
The last row matters: some data has no RPO because it is reproducible.
Identifying it removes cost from the design.
Designing to meet them
# RPO drives frequency — substitute your own pool and image:
POOL=rbd-vms
IMAGE=vm-disk-01
rbd snap create "$POOL/$IMAGE@$(date +%Y%m%d-%H%M)" # hourly → 1h RPO
# RBD mirroring gives a much lower RPO
POOL=rbd-vms
IMAGE=vm-disk-01
rbd mirror image enable ${POOL}/${IMAGE} snapshot
rbd mirror snapshot schedule add --pool ${POOL} --image ${IMAGE} 15m
rbd mirror image status ${POOL}/${IMAGE}
| RPO target | Mechanism |
|---|---|
| 24 hours | nightly export |
| 1 hour | hourly snapshot plus incremental export |
| Minutes | snapshot-based mirroring on a schedule |
| Near zero | journal-based mirroring |
# RTO drives the restore path
POOL=rbd-vms
rbd import /backups/image01.raw "$POOL"/image01-restored
| RTO target | Requirement |
|---|---|
| Days | any restore path |
| Hours | sufficient bandwidth; a tested procedure |
| Under an hour | a warm copy already on the cluster or the peer |
| Minutes | a live replica, promoted rather than restored |
An RTO shorter than the time to move the data means the data must
already be where it is needed.
Measuring
# actual RPO: the age of the newest usable copy
POOL=rbd-vms
IMAGE=vm-disk-01
rbd snap ls "$POOL/$IMAGE" --format json | python3 -c '
import sys,json
s = json.load(sys.stdin)
print("snapshots:", len(s), " newest:", s[-1]["name"] if s else "none")'
# actual RTO: measured, not estimated
POOL=rbd-vms
time rbd import /backups/image01.raw "$POOL"/rto-test
rbd rm "$POOL"/rto-test
An unmeasured RTO is a guess, and it is always optimistic. Measuring it
once per year against a representative dataset is what makes it a
commitment.
Quiz
Knowledge check · 4 questions
Q1. Why is measured RTO always longer than estimated RTO?
Q2. RPO and RTO are determined by the same design decisions.
Q3. Design backup from stated targets.
A production database has a stated RTO of 15 minutes and holds 8 TiB. The proposed design is a nightly export to a backup server on a 10 Gbit link.
Q4. What kind of data has no meaningful RPO?
Passing score: 75%. Answers are checked in this browser.
Production discipline
State RPO and RTO before designing, and measure RTO by rehearsing the whole sequence rather than estimating the transfer — the transfer is frequently the smaller half. Where the RTO is shorter than the transfer time, the design must place the data in advance rather than move it.
Cross-course references
- Kubernetes: recovery objectives drive whether you restore or fail over
- Linux: an unrehearsed recovery time is an estimate, not a commitment