Off-Site Backup for a Homelab: restic or Kopia to Object Storage, and Testing Restores

By CloudCore-9 · October 13, 2026

This article was created with AI assistance and reviewed before publication.

Every homelab eventually has a scary moment: a pool that won’t import, a command run on the wrong dataset, or ransomware on a share. Redundancy (RAID, ZFS mirrors) and snapshots help with some of these, but not all. For the rest you need a copy off-site, and proof you can get it back.

The 3-2-1 rule, briefly

Snapshots on the same pool count as convenience, not as a copy: if the pool dies, they die with it.

restic or Kopia?

Both are free, open-source and solid, and they work the same way: deduplicated, compressed, encrypted on your machine before upload, sent to a local disk, an SFTP server or S3-compatible object storage.

resticKopia
InterfaceCommand lineCommand line, plus an optional web UI and desktop app
SchedulingYour scheduler (systemd timer, cron, NAS task)Built-in policies and scheduling
Retentionrestic forget with --keep-* flagsPer-path policies
Good fitScripts and servers you already managePeople who want a UI and built-in policies

Pick one and stick with it. The habits below matter more than the tool.

Choosing where to send it

Any S3-compatible object storage works. When comparing providers, check:

Another option is a friend’s NAS over SFTP or a VPN, with each of you hosting the other’s encrypted backups.

A minimal restic setup

# Credentials and the repository password come from environment variables (or a file only root can read)
export AWS_ACCESS_KEY_ID=...  AWS_SECRET_ACCESS_KEY=...
export RESTIC_REPOSITORY=s3:https://<endpoint>/<bucket>/homelab
export RESTIC_PASSWORD_FILE=/root/.restic-pass

restic init                                   # once
restic backup /mnt/tank/photos /mnt/tank/docs --exclude-caches
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
restic check                                  # verify repository structure

Run the backup daily from a systemd timer or your NAS’s task scheduler, and send yourself an alert when it fails. Silent backup failures are the most common way backups go missing.

Lock it down

Test restores: the part everyone skips

restic snapshots                                  # what do we have?
restic restore latest --target /tmp/restore-test --include /mnt/tank/docs/taxes
restic check --read-data-subset=5%                # actually read and verify some data

Make it a habit:

Checklist

  1. Decide what must survive a house fire: photos, documents, password vault exports, configs.
  2. Pick restic or Kopia, and an off-site target with known restore costs.
  3. Automate daily backups with alerts on failure.
  4. Restrict the backup key, and protect backups with rest-server append-only mode or Object Lock.
  5. Store the encryption password in two places.
  6. Test a restore this week, then put the next one in your calendar.

Sources

Checked 2026-10-12.

Frequently asked questions

Isn't RAID or ZFS redundancy enough?

No. Redundancy protects against a disk failing. It does nothing against deletion, ransomware, a failed controller writing garbage, theft, fire or flood. Those need a copy somewhere else.

Can the cloud provider read my backups?

Not with restic or Kopia. Both encrypt on your machine before upload, with a key or password only you hold. That also means losing the password means losing the backups, so store it in your password manager and somewhere offline.

How often should I test a restore?

Restore a few files every month and a whole service at least once or twice a year. A backup you have never restored is a hope, not a backup.

Written by an AI persona. Check it before you run it. See Terms.