Automated Backups for Linux Servers: Scheduling, Verification, and Restore Drills

Last updated: ⏱ Reading time: ~17 minutes

AI-assisted guide Curated by Norbert Sowinski

Share this guide:

Diagram-style illustration of an automated Linux server backup system showing application files, configuration, database-consistent exports, backup scheduling, encrypted local and off-site repositories, retention, integrity verification, monitoring, restore testing, RPO and RTO measurement, and disaster recovery

A backup job that prints “success” every night can still leave you without a usable recovery path.

The wrong directories may be included. The database copy may be inconsistent. The remote repository may have stopped receiving new snapshots weeks ago. Encryption credentials may be unavailable during an emergency, or nobody may know the exact sequence required to reconstruct the server.

Reliable backups therefore require four separate capabilities:

create recovery data
        ↓
store it outside the production failure domain
        ↓
verify that it remains usable
        ↓
prove restoration through drills

The restore is the real product

Backup software produces archives, snapshots, or repository objects. The business requirement is different: recover the required service and data within an acceptable amount of time and with an acceptable amount of data loss.

1. Start with recovery, not the backup command

Before choosing a tool, write down what failure you expect to recover from.

Accidental file deletion

one application file deleted
        ↓
restore only that file

Database corruption

database damaged
        ↓
restore previous consistent database state

Server loss

VM / physical host lost
        ↓
provision replacement
        ↓
restore configuration
        ↓
restore application data
        ↓
restore database
        ↓
start service

Account compromise or ransomware

production host compromised
        ↓
attacker may delete local data
and reachable backups
        ↓
recover from protected copy
outside production control

Define the recovery unit

Ask whether you need to recover:

Different recovery units may need different backup mechanisms.

2. Decide exactly what must be backed up

Start with an inventory.

Application data

Examples:

/srv/app/uploads
/srv/app/data
/var/lib/my-application

Include data that cannot be recreated from source control or external systems.

Database data

Treat database recovery separately from ordinary files.

Examples include:

Server configuration

Useful configuration may include:

/etc/nginx
/etc/caddy
/etc/systemd/system
/etc/ssh
/etc/backup
application deployment configuration

Infrastructure-as-code reduces how much configuration must be recovered manually, but production-specific configuration still needs an identified recovery source.

Secrets

Secrets require special handling.

Decide whether recovery depends on:

Do not casually copy secrets into an unencrypted general-purpose archive.

Application code

Source code normally belongs in source control rather than being treated as the only backup of a production server.

Production recovery should ideally redeploy a known application artifact:

container image
package artifact
release bundle

rather than relying on whatever happens to remain in a working directory.

What usually does not need backup?

Common examples:

Excluding rebuildable data reduces backup duration and storage.

3. Build an off-host and off-site backup architecture

Linux backup architecture and data flow (diagram)

Linux server backup architecture showing application files, configuration and database-consistent exports flowing through an automated backup job into an encrypted repository, then to off-host and off-site storage, with retention, verification, monitoring, restricted backup credentials and a separate restore environment

Keeping a backup on the same disk as production protects against very few serious failures.

production disk
    ├── application data
    └── backup.tar.gz

If that disk fails, both copies disappear.

Minimum useful separation

production server
        ↓
encrypted backup repository
        ↓
different storage system

Better separation

production server
        ↓
primary backup repository
        ↓
off-site / independent copy

The secondary copy should not depend on the same physical host, filesystem, or administrative failure domain as production.

Think beyond “three copies” as a slogan

What matters is that one event cannot easily destroy every recovery point.

Consider:

Use encrypted repositories

Backups often contain the most complete copy of your production data.

Encryption should protect the repository if the underlying storage is exposed.

Tools such as restic are useful for small Linux environments because they support encrypted snapshot-oriented repositories and can store backups on local, remote, or object-storage destinations.

Do not lose the backup decryption secret

An encrypted repository without its recovery credential is effectively unrecoverable.

Store the recovery credential through a separate, documented emergency process.

4. Back up databases consistently

One of the most dangerous shortcuts is copying a live database directory as though it were an ordinary folder.

Why raw copies can fail

While the copy runs, the database may be modifying:

Files copied at different moments can represent incompatible points in time.

Use database-supported mechanisms

Depending on the database, use:

PostgreSQL logical backup example

pg_dump \
  --format=custom \
  --file=/var/lib/backup-staging/app.dump \
  app_database

The backup tool can then archive the generated dump.

Database roles and metadata

Database contents may not be the only required state.

Depending on the system, recovery may also require:

Test the exact restoration command

Do not assume that because:

pg_dump succeeded

then:

pg_restore will succeed
into a clean replacement system

Version compatibility, required extensions, ownership, and permissions can all affect restoration.

5. Automate backups with systemd timers

Cron is still usable, but systemd timers fit naturally on modern systemd-based Linux servers and provide service status, logging, timer inspection, and persistent scheduling behavior.

Example backup script

#!/usr/bin/env bash

set -Eeuo pipefail

STAGING="/var/lib/backup-staging"

cleanup() {
  rm -rf "$STAGING"
}

trap cleanup EXIT

install -d -m 0700 "$STAGING"

pg_dump \
  --format=custom \
  --file="$STAGING/app.dump" \
  app_database

restic backup \
  /etc/nginx \
  /etc/systemd/system \
  /srv/app/uploads \
  "$STAGING/app.dump"

restic forget \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 12 \
  --prune

Adjust directories, database commands, retention, repository details, and exclusions to your environment.

Protect the script

sudo chown root:root /usr/local/sbin/server-backup
sudo chmod 750 /usr/local/sbin/server-backup

Keep repository credentials separate

For example:

/etc/backup/restic-password

with restricted permissions:

sudo chown root:root /etc/backup/restic-password
sudo chmod 600 /etc/backup/restic-password

systemd service

# /etc/systemd/system/server-backup.service

[Unit]
Description=Production server backup
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot

Environment=RESTIC_REPOSITORY=s3:https://backup.example.com/server01
Environment=RESTIC_PASSWORD_FILE=/etc/backup/restic-password

ExecStart=/usr/local/sbin/server-backup

Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7

systemd timer

# /etc/systemd/system/server-backup.timer

[Unit]
Description=Run production server backup daily

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
RandomizedDelaySec=10m

[Install]
WantedBy=timers.target

Enable the timer

sudo systemctl daemon-reload

sudo systemctl enable --now \
  server-backup.timer

Inspect scheduling

systemctl list-timers \
  server-backup.timer

Run the job manually before trusting the timer

sudo systemctl start \
  server-backup.service

sudo systemctl status \
  server-backup.service

Inspect logs

journalctl \
  -u server-backup.service \
  --since "today"

Schedule according to RPO

A nightly timer may be appropriate for configuration but insufficient for a busy transactional database.

Different data can have different schedules:

configuration:
daily

database:
hourly

critical transaction log:
continuous / much more frequent

6. Keep several useful recovery points

One current backup is not enough.

Some failures are discovered late:

Monday:
file silently corrupted

Tuesday:
backup succeeds

Wednesday:
backup succeeds

Thursday:
corruption discovered

If only Wednesday's backup exists, the backup faithfully preserves corrupted data.

Use multiple recovery points

A simple retention policy might keep:

7 daily snapshots
4 weekly snapshots
12 monthly snapshots

The correct policy depends on:

Retention is different from backup frequency

You might create:

24 backups per day

but retain:

hourly for 48 hours
daily for 30 days
monthly for one year

Frequent short-term recovery points and sparse long-term recovery points serve different purposes.

Monitor pruning

Retention operations can fail too.

If pruning never runs, storage may grow until the repository or object storage budget is exhausted.

7. Verify more than exit status

Backup verification pipeline (diagram)

Linux backup verification pipeline showing scheduled backup execution, exit status validation, snapshot age check, expected file and database artifact checks, repository consistency verification, sample data restoration, application-level validation, monitoring notification, and escalation when any verification layer fails

Backup verification should have several layers.

Layer 1: command success

The backup command should exit unsuccessfully when an important operation fails.

Shell scripts should not hide errors:

set -Eeuo pipefail

Layer 2: snapshot existence and age

Confirm that a recent recovery point actually exists.

Your monitoring system should know:

latest successful backup:
2026-08-24 02:37 UTC

expected maximum age:
26 hours

If the timer silently stops running, backup-age monitoring catches the problem.

Layer 3: expected content

Confirm that critical paths are present.

For example:

/etc/nginx/nginx.conf
/srv/app/uploads
database dump

A successful snapshot that accidentally excluded the database dump is not sufficient.

Layer 4: repository integrity

Repository-aware tools normally provide consistency verification.

For restic:

restic check

Periodically reading repository data provides stronger verification than metadata-only checks.

Depending on repository size and operational constraints, you may run complete or sampled data checks on a separate schedule.

Layer 5: restore representative data

For example:

restore latest snapshot
into temporary directory
        ↓
verify configuration file
        ↓
verify sample upload
        ↓
restore database dump
into test database
        ↓
run validation query

Layer 6: complete service restore

This is the strongest test.

Rebuild a clean environment from the documented recovery process and verify the application itself.

A backup that has never been restored is unproven

Repository integrity checks are useful, but they cannot prove that you remembered every required file, database role, encryption key, DNS dependency, environment setting, or recovery command. Restore drills test the whole recovery system.

8. Monitor backup age, failures, and storage

Backups are scheduled jobs, and scheduled jobs have a dangerous failure mode:

nothing happens

Nobody notices because there is no user request associated with the job.

Monitor last successful completion

Record a metric such as:

backup_last_success_timestamp_seconds

Then alert on excessive age.

Monitor job duration

A backup that normally takes:

12 minutes

but suddenly takes:

3 hours

may indicate:

Monitor backup size or ingestion volume

Sudden changes can reveal:

Monitor repository capacity

Do not discover that backup storage is full only when the next job fails.

Alert on freshness, not just job failure

An alert such as:

backup command failed

does not detect:

timer disabled accidentally

but:

latest successful backup
older than expected

detects both.

Monitor verification too

Track:

9. Protect backups from compromise and ransomware

Backups can become a primary target during destructive attacks.

Avoid one credential with unlimited control

Bad model:

production server credential
        ↓
read backups
write backups
delete every backup
change retention
delete storage account

If production is compromised, the attacker inherits the ability to destroy recovery data.

Separate backup-writing and administrative permissions

Where your storage design permits it, let the automated backup process write required data without giving it unrestricted authority over every historical recovery point.

Use immutability or deletion protection where appropriate

Object locking, protected snapshots, versioning, or delayed deletion can create recovery points that survive a compromised production credential.

The exact control depends on the storage provider and backup tool.

Encrypt backup data

Treat backup storage as sensitive production data.

Protect backup credentials

Restrict permissions on:

Keep emergency recovery access separate

During a severe compromise, the normal production credential store may not be trustworthy.

Document how authorized responders obtain backup recovery credentials through an independent channel.

Do not test restores onto production accidentally

Restore drills should use isolated targets so test data cannot overwrite live application data.

10. Measure RPO and RTO

Recovery Point Objective

RPO answers:

How much recent data
can we afford to lose?

If the RPO is:

1 hour

then a nightly backup cannot satisfy that objective.

Recovery Time Objective

RTO answers:

How quickly should the
service be restored?

If the RTO is:

2 hours

but restoring a 2 TB repository over the network requires eight hours, architecture and expectations are misaligned.

RPO drives backup frequency

RPO = 24 hours
→ daily backup may be sufficient

RPO = 1 hour
→ hourly or better required

RPO = minutes
→ continuous database-oriented
  protection may be required

RTO drives recovery design

A short RTO may require:

Measure actual values during drills

Do not rely on:

we think recovery
would take about an hour

Record timestamps:

10:00 incident simulation begins
10:08 replacement host ready
10:14 backup access obtained
10:31 application files restored
10:52 database restored
11:04 service starts
11:11 validation succeeds

actual recovery time:
71 minutes

11. Run real restore drills

Linux restore drill workflow (diagram)

Linux restore drill workflow showing disaster scenario selection, clean replacement host provisioning, secure retrieval of backup credentials, restoration of configuration and application files, database restore, service startup, DNS and dependency checks, critical user workflow validation, RPO and RTO measurement, documentation of gaps, and backup process improvements

A restore drill should simulate recovery without touching production.

Step 1: choose the scenario

For example:

production server completely lost

or:

database accidentally deleted

Step 2: record the start time

This allows actual RTO to be measured.

Step 3: provision a clean target

Avoid restoring onto a server that already contains configuration copied from production.

A clean environment tests whether the backup and documentation are truly sufficient.

Step 4: obtain recovery credentials

Follow the same emergency access procedure you expect to use during a real incident.

Step 5: restore configuration and application data

For restic, conceptually:

restic restore latest \
  --target /restore

Review restored paths before moving data into final locations.

Step 6: restore the database

For a PostgreSQL custom-format backup:

createdb restored_app

pg_restore \
  --dbname=restored_app \
  /restore/var/lib/backup-staging/app.dump

Exact options depend on ownership, roles, extensions, and database design.

Step 7: start the application

Validate:

Step 8: test user-visible behavior

Do not stop at:

systemctl status app
= active

Test:

Step 9: determine the recovered point

Compare:

latest recovered transaction
vs
drill start time

This gives evidence about actual RPO.

Step 10: record actual RTO

Stop the clock when the agreed critical service validation succeeds.

Step 11: document every surprise

Examples:

missing TLS certificate
database role not backed up
wrong filesystem owner
backup password unavailable
restore download too slow
DNS procedure undocumented
one environment variable missing

These discoveries are the purpose of the drill.

Step 12: improve the recovery system

Convert each discovery into:

Schedule drills

A practical small-team starting point for important services is a periodic drill such as quarterly, plus additional tests after major changes to:

12. Copy/paste Linux backup checklist

Linux server backup checklist

Recovery requirements
- Identify critical services.
- Identify service owner.
- Define failure scenarios.
- Define recovery unit.
- Define RPO.
- Define RTO.
- Document business impact of data loss.
- Document business impact of prolonged outage.
- Review objectives with stakeholders.

Backup inventory
- List application data directories.
- List uploaded files.
- List persistent volumes.
- List databases.
- List database roles and permissions.
- List reverse proxy configuration.
- List systemd units.
- List application configuration.
- List required certificates.
- List secret recovery requirements.
- List infrastructure configuration.
- Identify data that can be recreated.
- Exclude unnecessary caches and temporary files.

Application artifacts
- Keep source code in version control.
- Keep release artifacts outside the production host.
- Retain known-good container images or packages.
- Record deployed release versions.
- Avoid treating the production filesystem as the only copy of application code.

Database backups
- Identify every production database.
- Use database-supported backup mechanisms.
- Avoid blindly copying active database directories.
- Test logical dump commands.
- Test physical backup procedures where used.
- Include required roles.
- Include required extensions.
- Include ownership information where needed.
- Verify database version compatibility.
- Test restoration into a clean database.
- Monitor database backup duration.
- Monitor database dump size.
- Protect temporary dump files.
- Remove staging files after successful archive.

SQLite
- Understand application write behavior.
- Use SQLite-supported backup mechanisms or safe snapshots.
- Avoid copying during unsafe concurrent modification.
- Test restored database integrity.
- Include related application files where required.

Files
- Include persistent application data.
- Include user uploads.
- Include important configuration.
- Preserve permissions where required.
- Preserve ownership where required.
- Preserve symbolic links correctly.
- Exclude temporary data.
- Exclude rebuildable caches.
- Exclude mounted backup repository from recursive backup.
- Review exclusions after application changes.

Backup repository
- Use a repository separate from the production disk.
- Prefer off-host storage.
- Maintain an off-site or independent recovery copy.
- Encrypt backup data.
- Protect repository credentials.
- Protect encryption credentials.
- Document repository location.
- Document repository recovery procedure.
- Monitor repository availability.
- Monitor repository storage capacity.

Failure domains
- Do not keep the only backup on the source server.
- Do not keep all copies on one physical disk.
- Do not keep every recovery copy under one easily compromised credential.
- Consider account compromise.
- Consider provider outage.
- Consider ransomware.
- Consider operator error.
- Consider repository corruption.
- Design at least one copy to survive important failure scenarios.

Backup tool
- Choose a maintained backup tool.
- Understand encryption behavior.
- Understand retention behavior.
- Understand pruning behavior.
- Understand repository locking.
- Understand restore commands.
- Test repository initialization.
- Document tool version.
- Test upgrades before relying on new versions in production.

restic-style repository
- Configure repository location.
- Configure password file safely.
- Restrict password-file permissions.
- Run initial backup manually.
- List snapshots.
- Test restore.
- Configure retention.
- Configure repository checks.
- Protect backend credentials.
- Avoid exposing secrets in command history where practical.

Backup script
- Use a dedicated script.
- Use set -Eeuo pipefail.
- Fail on database dump errors.
- Fail on backup errors.
- Clean temporary files with trap.
- Use secure staging directories.
- Log meaningful start and completion events.
- Avoid logging passwords.
- Return non-zero status on failure.
- Keep script in source control.
- Protect deployed script permissions.

systemd service
- Use Type=oneshot.
- Wait for network availability when remote storage requires it.
- Define repository configuration.
- Keep sensitive values outside public unit files where appropriate.
- Use explicit ExecStart.
- Set reasonable scheduling priority.
- Inspect service exit status.
- Inspect journal logs.
- Test manual execution.

systemd timer
- Define OnCalendar.
- Enable Persistent=true when missed executions should run later.
- Consider RandomizedDelaySec.
- Enable the timer.
- Verify next execution time.
- Verify last execution time.
- Test after reboot.
- Monitor timer disappearance or disablement indirectly through backup freshness.

Schedule
- Derive frequency from RPO.
- Do not use daily backups when RPO requires hourly recovery points.
- Use different schedules for different data classes.
- Consider backup duration.
- Avoid unnecessary overlap between jobs.
- Avoid excessive production I/O during traffic peaks.
- Document expected completion window.

Retention
- Keep multiple recovery points.
- Define daily retention.
- Define weekly retention.
- Define monthly retention.
- Define long-term retention when required.
- Account for delayed discovery of corruption.
- Account for compliance requirements.
- Estimate storage usage.
- Test pruning.
- Monitor pruning failures.
- Avoid retaining everything forever without a reason.

Freshness monitoring
- Record last successful backup timestamp.
- Define maximum acceptable backup age.
- Alert when latest backup is too old.
- Do not rely only on command-failure alerts.
- Detect disabled timers.
- Detect server-side scheduling failures.
- Detect repository-delivery failures.

Backup metrics
- Track last successful completion.
- Track duration.
- Track bytes processed where practical.
- Track snapshot count.
- Track repository size.
- Track failures.
- Track verification age.
- Track restore-drill age.
- Detect unusual size changes.
- Detect unusually long jobs.

Verification
- Check process exit status.
- Verify a recent snapshot exists.
- Verify expected paths exist.
- Verify database backup artifact exists.
- Verify repository consistency.
- Schedule full or sampled data reads where practical.
- Test representative file restoration.
- Test database restoration.
- Run full recovery drills.
- Record verification results.
- Alert when verification becomes stale.

Repository checks
- Schedule repository integrity checks separately from daily backup when appropriate.
- Avoid overloading production or remote storage.
- Record last successful check.
- Investigate integrity errors immediately.
- Do not prune aggressively while repository problems remain unexplained.
- Keep another independent copy when recovery importance justifies it.

Security
- Encrypt backups.
- Restrict backup credentials.
- Restrict repository administration.
- Separate human and automated access where practical.
- Use least privilege.
- Avoid production credentials with unrestricted backup deletion rights where possible.
- Use deletion protection or immutability where appropriate.
- Protect object-storage accounts.
- Protect SSH keys.
- Protect repository password.
- Rotate backup credentials.
- Review access periodically.

Ransomware resilience
- Assume production credentials can be compromised.
- Keep recovery copies outside the primary production failure domain.
- Limit deletion rights.
- Use storage versioning where appropriate.
- Use immutable recovery points where appropriate.
- Keep offline or separately controlled copies where required.
- Test recovery without trusting the compromised server.
- Document clean-room recovery.

Encryption
- Know where encryption occurs.
- Protect decryption credentials separately.
- Keep an emergency recovery copy of required decryption information.
- Test decryption during drills.
- Do not store the only decryption key solely on the protected production server.
- Review key ownership after staff changes.

Off-site copy
- Use a different location or provider where justified.
- Verify replication actually completes.
- Verify independent access.
- Monitor copy freshness.
- Test restoration from the off-site copy.
- Consider network bandwidth during full recovery.
- Estimate download duration.
- Document provider-specific recovery steps.

Local staging
- Use restricted permissions.
- Keep staging capacity monitored.
- Remove old dump files.
- Avoid leaving plaintext database dumps indefinitely.
- Ensure backup job failure does not fill the production disk with staging files.
- Clean staging through trap or equivalent cleanup.

RPO
- Define maximum acceptable data loss.
- Convert RPO into backup or replication frequency.
- Validate actual recovered point during drills.
- Compare achieved RPO with target.
- Improve schedule or architecture when target is missed.
- Use more frequent database protection when required.

RTO
- Define maximum acceptable restoration time.
- Measure provisioning time.
- Measure credential recovery time.
- Measure backup download time.
- Measure database restore time.
- Measure application startup time.
- Measure validation time.
- Compare actual RTO with target.
- Improve automation when recovery is too slow.

Restore documentation
- Document server provisioning.
- Document operating system requirements.
- Document package dependencies.
- Document backup tool installation.
- Document repository access.
- Document decryption procedure.
- Document file restoration.
- Document database restoration.
- Document permissions.
- Document secrets retrieval.
- Document service startup.
- Document reverse proxy configuration.
- Document DNS changes.
- Document validation steps.
- Keep the runbook accessible during production outages.

Partial restore drill
- Select one recent snapshot.
- Restore one configuration file.
- Restore one application file.
- Verify permissions.
- Restore one representative user upload.
- Record duration.
- Delete the temporary restore after validation.
- Investigate unexpected differences.

Database restore drill
- Provision clean database target.
- Restore database roles where required.
- Restore backup.
- Run integrity checks.
- Run application queries.
- Verify row counts or known records.
- Verify extensions.
- Verify permissions.
- Measure restore duration.
- Document issues.

Full restore drill
- Select disaster scenario.
- Record start time.
- Provision clean replacement environment.
- Obtain backup credentials through documented procedure.
- Install backup tooling.
- Restore configuration.
- Restore application files.
- Restore database.
- Restore permissions.
- Restore required secrets.
- Start system services.
- Start reverse proxy.
- Validate DNS or temporary test routing.
- Run critical user workflows.
- Record recovered data point.
- Record completion time.
- Calculate actual RPO.
- Calculate actual RTO.
- Record every unexpected manual step.
- Update recovery documentation.

Clean-room recovery
- Do not depend on files remaining on the failed server.
- Do not depend on shell history from the old server.
- Do not depend on undocumented administrator knowledge.
- Use independent credential recovery.
- Use trusted installation media or images.
- Restore from known recovery repositories.
- Rotate compromised credentials before reconnecting recovered systems when required.

Restore validation
- Confirm application starts.
- Confirm database connects.
- Confirm authentication works.
- Confirm critical reads work.
- Confirm critical writes work.
- Confirm uploads exist.
- Confirm scheduled jobs work.
- Confirm external integrations work.
- Confirm monitoring works.
- Confirm logging works.
- Confirm backups resume after recovery.

Restore drills
- Schedule drills.
- Assign an owner.
- Use isolated targets.
- Avoid modifying production.
- Test partial restores regularly.
- Test database restores regularly.
- Test complete recovery periodically.
- Repeat after major backup architecture changes.
- Repeat after major database upgrades.
- Repeat after storage-provider changes.
- Record results.

Post-drill review
- Compare actual RPO with objective.
- Compare actual RTO with objective.
- Identify missing files.
- Identify missing credentials.
- Identify missing permissions.
- Identify undocumented commands.
- Identify slow download steps.
- Identify database restore problems.
- Improve automation.
- Update backup scope.
- Update runbook.
- Assign follow-up owners.

Operations
- Review backup failures promptly.
- Do not allow repeated failures to become normal.
- Investigate sudden backup size changes.
- Investigate sudden duration changes.
- Monitor network transfer errors.
- Monitor repository locks.
- Keep backup software patched.
- Test configuration changes.

Ownership
- Assign backup owner.
- Assign restore owner.
- Define escalation contact.
- Ensure more than one person understands recovery.
- Keep emergency credentials accessible to authorized responders.
- Review access after team changes.
- Document support contacts for storage providers.

Final review
- Do you know exactly what is backed up?
- Is the database backed up consistently?
- Is there a recent recovery point?
- Is at least one copy outside the production server?
- Is at least one important recovery copy protected from production compromise?
- Are backups encrypted?
- Can decryption credentials be recovered independently?
- Are backup failures monitored?
- Is stale backup age monitored?
- Is repository integrity checked?
- Are representative files restored periodically?
- Has the database been restored successfully?
- Has the complete service been restored into a clean environment?
- Is actual RPO known?
- Is actual RTO known?
- Can someone other than the original administrator perform the recovery?

13. FAQ

How often should I back up a Linux server?

Derive the schedule from the RPO of each dataset. If losing one hour of database changes would be unacceptable, once-per-day database backups are insufficient. Configuration and low-change data may use a slower schedule.

Is a successful backup command enough?

No. Also verify backup freshness, expected content, repository integrity, representative restoration, and eventually complete service recovery.

Can I copy a running database directory?

Do not assume an ordinary filesystem copy of active database files is consistent. Use the database engine's supported logical dump, physical backup, replication, or coordinated snapshot mechanism.

What is the difference between RPO and RTO?

RPO describes how much recent data loss is acceptable. RTO describes how long recovery may take before the service should be operating again.

How often should restore drills run?

Base the cadence on service criticality and how frequently the environment changes. A small team can start with quarterly full drills for important services and run additional tests after major database, storage, backup, or infrastructure changes.

Does an off-site backup protect against ransomware?

Not automatically. If a compromised production credential can delete the off-site repository, an attacker may still destroy it. Add permission separation, versioning, immutability, delayed deletion, or independently controlled copies where the risk justifies those controls.

Key terms (quick glossary)

Backup
A recoverable copy or snapshot of data maintained separately from the active production state.
Restore
The process of retrieving backup data and returning files, databases, or services to a usable state.
Restore drill
A controlled recovery exercise that tests whether backup data, credentials, documentation, infrastructure, and operational procedures can reconstruct the required service.
RPO
Recovery Point Objective, the maximum acceptable amount of data loss expressed as time between the recovered state and the failure.
RTO
Recovery Time Objective, the target amount of time allowed to restore a service after disruption.
Retention policy
Rules determining which historical backup snapshots are retained and for how long.
Off-host backup
Backup data stored outside the server that created it so failure of the original host does not destroy both production and recovery data.
Off-site backup
A recovery copy maintained in another physical or administrative location to reduce correlated failure risk.
Repository integrity check
Validation of backup repository metadata and, depending on the check, stored data to detect corruption or inconsistency.
Backup freshness
The age of the latest successful recovery point relative to the current time and expected backup schedule.
Logical database backup
A database-generated export of logical objects and data, commonly restored through database-specific import or restore tools.
Physical database backup
A database-supported copy of physical database files and transaction information created using procedures designed to preserve consistency.
Immutable backup
A recovery point protected from modification or deletion for a defined period, reducing the risk of destructive compromise.
Recovery runbook
Documented steps for provisioning, retrieving backups, restoring data, starting services, validating recovery, and escalating problems during a disaster.

Found this useful? Share this guide: