A Backup Is Not a Backup Until It Restores
We found our own backup cron running daily while its output directories were empty. The schedule looked perfect. The directories told the truth.
Verify backups by listing output files and restoring the newest one to a scratch location. A cron line that looks correct proves nothing; the restore is the only test that counts.
Backup jobs are set up once and trusted forever. The cron line is correct, the script exists, the schedule fires. Inside the script, a path changed or a credential expired, and the job started producing nothing. Nothing alerts, because the job did not fail: it succeeded at producing empty output.
In This Guide
The failure mode nobody watches
The restore test, step by step
If it stays untested
Get the skill
4 Tips to Get Started
Check the backup destination by content: file count, newest file date, size trend.
Restore to a scratch location, never over production. Count rows or files after restore.
A config step inside the backup script can silently fail while the cron reports success.
Run the restore test monthly. Backup rot is silent until the outage.
Ready to Stop Worrying About Infra?
Knowledge is the first step. Get a free 1-hour diagnostic and see where your infrastructure leaks time, money, and focus.
Related Guides
Is My S3 Bucket Public? How to Check in One Command
One command tells you if your S3 bucket is public, and one curl proves it. The policy check shows intent, the anonymous request shows reality.
The Most Common AWS Misconfiguration (It Is One Line of Config)
Public buckets and Principal * policies cause most disclosed AWS incidents. Each is one line of config with account-wide blast radius. Here is the pattern.
Terraform State File Leak: Every Secret in Plaintext
terraform.tfstate stores database passwords, IAM keys and TLS private keys in plaintext. sensitive=true hides nothing. Here is how leaks happen and the check.
Docker Socket Mounted in a Container: Root on the Host, No Exploit Needed
A container with /var/run/docker.sock mounted controls the host daemon and can mount your entire filesystem. No kernel exploit required. Here is the mechanism and the check.
Ron Cohen — DevOps engineer & founder, roqy.io
Content reviewed by the roqy.io team. Our guides are based on publicly available data.
Disclaimer: This content is for informational and educational purposes only. It does not constitute professional advice or a guarantee of specific results. Infrastructure needs vary by team, stack, and stage. Consult a qualified engineer for advice tailored to your situation.
Frequently Asked Questions
How do I verify my backups actually work?
Two checks. First, list the backup destination: file count, newest file timestamp, size trend. An empty directory behind a healthy-looking cron is a common P0. Second, restore the newest backup to a scratch location and count what comes back. If the restore fails or the counts are wrong, the backup does not exist in any meaningful sense.
Why did our backup cron run but write nothing?
A step inside the script failed silently: a config change, a moved path, a permission. The cron exits and the schedule looks perfect. This is why the audit verifies backups by listing output files, never by reading the schedule. On our own stack, the backup directories were empty for weeks while the cron reported success daily.
How often should a restore test run?
Monthly for critical systems, and after every backup configuration change. The test is cheap: restore to scratch, count, delete. The cost of skipping it is discovering the answer during the outage, when the backup is the only thing that matters.
Get the DevOps Ecosystem Behind You
One accountable engineer. Full platform behind him. Month-to-month, no lock-in.