Restore-Test Verification
Overview
A backup job reporting "success" proves that data was copied somewhere. It proves
nothing about whether that data can be turned back into a working system or a usable
file when someone actually needs it. Corruption, encryption-key problems, application-
consistency failures, and format incompatibilities routinely surface only at restore
time — never during the backup run itself. The gap between "backed up" and
"recoverable" is where most DR failures actually happen, and it is invisible from a
job-success dashboard. This skill exists to make that gap visible: tracking what
restore-test evidence actually exists per protected system, and flagging where it
doesn't.
This skill assumes backup jobs are already running (see backup-job-health for that
layer) and asks the next question: if this needed to be restored today, is there any
evidence it actually could be?
Anti-triggers
- Fetching a screenshot or boot-verification record — the screenshot,
activity, and asset endpoints are the appliance's own API surface; use
datto-bcdr-api-patterns. This skill weighs what that evidence proves and
flags where none exists.
- Answering "are backups tested?" on an insurance or audit form — the
evidence-labelling discipline for that context lives in
insurance-questionnaires (compliance-pack), which draws on this skill's
finding rather than reproducing it.
Key Concepts
"Exists" vs. "recoverable" evidence, ranked
Not all restore evidence is equally strong. From strongest to weakest:
- Actual restore performed — a real recovery event (production failover, file
recovery request, or a deliberate DR drill) where the data was genuinely restored
and validated. Strongest possible evidence; also the rarest.
- Full boot/virtualization verification — the protected system was virtualized
from its backup image and confirmed to boot and respond (some BCDR appliances,
e.g. Datto BCDR, run this automatically). Strong evidence for image-based
appliance backups — it proves the image is bootable, though it doesn't fully
validate application-level data integrity inside the guest.
- Screenshot verification — an automated screenshot of the virtualized boot
screen, confirming the OS reached a login prompt or desktop rather than a boot
error. Weaker than full boot verification but far stronger than nothing — it's
the closest-to-continuous proxy most appliance vendors offer. Treat a "successful
backup" with a failed screenshot verification as a recovery risk, not a pass —
see
backup-job-health for the point that both signals must be checked together.
- Spot-check restore drill — a manual, periodic restore of a sample file,
mailbox, or object to confirm data integrity, without a full system failover. This
is the primary evidence type available for SaaS-data snapshot backups (Datto SaaS
Protection, Spanning), which generally don't offer a "boot" concept at all — a
spot-check restore of a mailbox or SharePoint file is the equivalent verification
action.
- No test evidence at all — a backup with a clean job-success history and no
restore, boot-verification, screenshot, or spot-check record of any kind. Treat
this explicitly as untested, not merely "unverified" — it should be reported
as a finding in its own right, not omitted because nothing failed.
Never let a long streak of successful backup jobs stand in for restore evidence.
They answer different questions.
Adequate testing cadence by data-criticality tier
There is no universal "right" cadence — it should scale with how critical the
protected system is to the client's operations. In the absence of an org-documented
policy, apply these as defaults and state explicitly that they're defaults:
| Criticality tier |
Example systems |
Suggested minimum test cadence |
| Tier 1 — mission-critical |
Line-of-business database/ERP, domain controllers, production file servers |
Quarterly full or partial restore drill; continuous screenshot/boot verification where the vendor supports it |
| Tier 2 — important |
Departmental servers, secondary application servers |
Semi-annual restore drill |
| Tier 3 — standard |
Workstations, non-critical file shares |
Annual restore drill, or continuous screenshot verification alone if the vendor offers it and no drill has occurred |
| SaaS mailboxes/files (Datto SaaS Protection, Spanning) |
M365/Google Workspace/Salesforce data |
Semi-annual spot-check restore of a sample of mailboxes/files per protected tenant |
Where the org has documented its own required cadence (e.g., in a connected
documentation platform or contract), use that instead and say so.
Flagging never-tested backups
A backup that has never been restore-tested by any of the evidence types above,
regardless of job-success history or how long it's been running, is the single
highest-priority finding this skill produces. Rank never-tested Tier 1 systems above
everything else, including active job failures caught by backup-job-health — a
currently-failing job is at least a known, visible problem; a never-tested backup is
an unknown one that looks fine until the moment it matters most.
If no backup/BCDR tool is connected
State plainly that restore-test verification cannot run: "No backup or BCDR connector
is connected through the gateway, so there's no restore-test history to check."
Do not fabricate test dates or pass/fail status.
Common Workflows
Portfolio-wide untested-backup sweep
- Discover connected backup/BCDR tools via
conduit__search_tools.
- For each protected unit, pull the strongest available restore-evidence type (per
the ranking above) and its most recent date.
- Classify against the criticality-tiered cadence table: current, due, overdue, or
never-tested.
- Report never-tested Tier 1 systems first, then overdue Tier 1, then the rest in
descending criticality/staleness order.
Single-client restore-readiness check
- Resolve the client to its protected units across connected tools.
- Pull restore-evidence history for each unit.
- Report per-unit status against the applicable cadence, with a recommended next
test date.
Error Handling
- No backup/BCDR connector connected: stop and say so; do not fabricate restore
history.
- A connector doesn't expose restore/screenshot history via its API: report job
health normally (per
backup-job-health) and mark restore-test status "unable to
verify — connector does not expose restore-test history" rather than assuming
untested or omitting the system from the report.
- Criticality tier unknown for a given system: state that the default (Tier 2)
cadence was applied pending a documented criticality classification, rather than
guessing a tier silently.
Best Practices
- Recommend, don't schedule or execute, an actual restore drill — this skill flags
the gap; performing the drill is a human/scheduled action with its own change-
control considerations.
Related Skills
- Backup Job Health — confirms jobs are running at
all; this skill assumes that and asks whether the result is recoverable.
- Retention/RPO Compliance — a recoverable
backup that doesn't retain far enough back, or isn't frequent enough to meet an
RPO target, is still a compliance gap even when restore-tested successfully.
1---2name: restore-test-verification3description: Whether a backup is actually recoverable rather than merely present: the ranked hierarchy of restore evidence (actual restore performed, full boot/virtualization verification, screenshot verification, spot-check restore drill, no evidence at all), adequate test cadence per data-criticality tier, and why a never-tested backup is the highest-priority finding — outranking even an actively failing job.4---56# Restore-Test Verification78## Overview910A backup job reporting "success" proves that data was copied somewhere. It proves11nothing about whether that data can be turned back into a working system or a usable12file when someone actually needs it. Corruption, encryption-key problems, application-13consistency failures, and format incompatibilities routinely surface only at restore14time — never during the backup run itself. The gap between "backed up" and15"recoverable" is where most DR failures actually happen, and it is invisible from a16job-success dashboard. This skill exists to make that gap visible: tracking what17restore-test evidence actually exists per protected system, and flagging where it18doesn't.1920This skill assumes backup jobs are already running (see `backup-job-health` for that21layer) and asks the next question: if this needed to be restored today, is there any22evidence it actually could be?2324## Anti-triggers2526- **Fetching a screenshot or boot-verification record** — the screenshot,27 activity, and asset endpoints are the appliance's own API surface; use28 `datto-bcdr-api-patterns`. This skill weighs what that evidence proves and29 flags where none exists.30- **Answering "are backups tested?" on an insurance or audit form** — the31 evidence-labelling discipline for that context lives in32 `insurance-questionnaires` (compliance-pack), which draws on this skill's33 finding rather than reproducing it.3435## Key Concepts3637### "Exists" vs. "recoverable" evidence, ranked3839Not all restore evidence is equally strong. From strongest to weakest:40411. **Actual restore performed** — a real recovery event (production failover, file42 recovery request, or a deliberate DR drill) where the data was genuinely restored43 and validated. Strongest possible evidence; also the rarest.442. **Full boot/virtualization verification** — the protected system was virtualized45 from its backup image and confirmed to boot and respond (some BCDR appliances,46 e.g. Datto BCDR, run this automatically). Strong evidence for image-based47 appliance backups — it proves the image is bootable, though it doesn't fully48 validate application-level data integrity inside the guest.493. **Screenshot verification** — an automated screenshot of the virtualized boot50 screen, confirming the OS reached a login prompt or desktop rather than a boot51 error. Weaker than full boot verification but far stronger than nothing — it's52 the closest-to-continuous proxy most appliance vendors offer. Treat a "successful53 backup" with a *failed* screenshot verification as a recovery risk, not a pass —54 see `backup-job-health` for the point that both signals must be checked together.554. **Spot-check restore drill** — a manual, periodic restore of a sample file,56 mailbox, or object to confirm data integrity, without a full system failover. This57 is the primary evidence type available for SaaS-data snapshot backups (Datto SaaS58 Protection, Spanning), which generally don't offer a "boot" concept at all — a59 spot-check restore of a mailbox or SharePoint file is the equivalent verification60 action.615. **No test evidence at all** — a backup with a clean job-success history and no62 restore, boot-verification, screenshot, or spot-check record of any kind. Treat63 this explicitly as **untested**, not merely "unverified" — it should be reported64 as a finding in its own right, not omitted because nothing failed.6566Never let a long streak of successful backup *jobs* stand in for restore evidence.67They answer different questions.6869### Adequate testing cadence by data-criticality tier7071There is no universal "right" cadence — it should scale with how critical the72protected system is to the client's operations. In the absence of an org-documented73policy, apply these as defaults and state explicitly that they're defaults:7475| Criticality tier | Example systems | Suggested minimum test cadence |76|---|---|---|77| Tier 1 — mission-critical | Line-of-business database/ERP, domain controllers, production file servers | Quarterly full or partial restore drill; continuous screenshot/boot verification where the vendor supports it |78| Tier 2 — important | Departmental servers, secondary application servers | Semi-annual restore drill |79| Tier 3 — standard | Workstations, non-critical file shares | Annual restore drill, or continuous screenshot verification alone if the vendor offers it and no drill has occurred |80| SaaS mailboxes/files (Datto SaaS Protection, Spanning) | M365/Google Workspace/Salesforce data | Semi-annual spot-check restore of a sample of mailboxes/files per protected tenant |8182Where the org has documented its own required cadence (e.g., in a connected83documentation platform or contract), use that instead and say so.8485### Flagging never-tested backups8687A backup that has never been restore-tested by any of the evidence types above,88regardless of job-success history or how long it's been running, is the single89highest-priority finding this skill produces. Rank never-tested Tier 1 systems above90everything else, including active job failures caught by `backup-job-health` — a91currently-failing job is at least a known, visible problem; a never-tested backup is92an unknown one that looks fine until the moment it matters most.9394### If no backup/BCDR tool is connected9596State plainly that restore-test verification cannot run: "No backup or BCDR connector97is connected through the gateway, so there's no restore-test history to check."98Do not fabricate test dates or pass/fail status.99100## Common Workflows101102### Portfolio-wide untested-backup sweep1031041. Discover connected backup/BCDR tools via `conduit__search_tools`.1052. For each protected unit, pull the strongest available restore-evidence type (per106 the ranking above) and its most recent date.1073. Classify against the criticality-tiered cadence table: current, due, overdue, or108 never-tested.1094. Report never-tested Tier 1 systems first, then overdue Tier 1, then the rest in110 descending criticality/staleness order.111112### Single-client restore-readiness check1131141. Resolve the client to its protected units across connected tools.1152. Pull restore-evidence history for each unit.1163. Report per-unit status against the applicable cadence, with a recommended next117 test date.118119## Error Handling120121- **No backup/BCDR connector connected:** stop and say so; do not fabricate restore122 history.123- **A connector doesn't expose restore/screenshot history via its API:** report job124 health normally (per `backup-job-health`) and mark restore-test status "unable to125 verify — connector does not expose restore-test history" rather than assuming126 untested or omitting the system from the report.127- **Criticality tier unknown for a given system:** state that the default (Tier 2)128 cadence was applied pending a documented criticality classification, rather than129 guessing a tier silently.130131## Best Practices132133- Recommend, don't schedule or execute, an actual restore drill — this skill flags134 the gap; performing the drill is a human/scheduled action with its own change-135 control considerations.136137## Related Skills138139- [Backup Job Health](../backup-job-health/SKILL.md) — confirms jobs are running at140 all; this skill assumes that and asks whether the result is recoverable.141- [Retention/RPO Compliance](../retention-rpo-compliance/SKILL.md) — a recoverable142 backup that doesn't retain far enough back, or isn't frequent enough to meet an143 RPO target, is still a compliance gap even when restore-tested successfully.