## Why Kopia in 2026
Linux backup is one of those topics where the recommended tool changes every few years and most articles age badly. Timeshift is great for system rollback but it is local-only. Borg is fast and dedups well, but its cloud story is bolted on with rclone. Restic is the default if you want native S3 and B2, but it has no GUI and pushing an entire homelab into it from a phone feels tedious.
Kopia sits in a different slot: it ships a real GUI, deduplicates, encrypts, and connects to S3 / B2 / Azure / SFTP / WebDAV / local out of the box. The v0.23 line released in May 2026 added storage-provider registration and a tighter server-scheduling path, and v0.23.1 (June 16, 2026) shipped a race-condition fix that maintainers explicitly marked as data-loss relevant — so today is a fair time to look at what Kopia is, in a fresh 2026 install, on a Linux machine.
This article walks through a real install, a real first backup, and a real restore — both single-file and FUSE-mount — so you can decide whether it fits your stack.
## Install Kopia on Linux
Kopia’s install story is one of the cleanest in the FOSS backup world: one binary, no daemon-by-default, optional GUI on top. Pick whichever fits your distro.
“`bash
# Latest stable (v0.23.x at the time of writing):
curl -sSLf https://kopia.io/signing-key | sudo gpg –dearmor
-o /usr/share/keyrings/kopia.gpg
echo “deb [signed-by=/usr/share/keyrings/kopia.gpg]
https://kopia.io/apt/ stable main”
| sudo tee /etc/apt/sources.list.d/kopia.list
sudo apt update && sudo apt install kopia kopia-ui
“`
For Fedora / RHEL the recommended path is the [official RPM repo](https://kopia.io/docs/installation/), and on Arch the `kopia` package in the AUR tracks upstream. The `kopia-ui` binary is a separate Electron-based desktop app — install it if you want a GUI, skip it on headless servers.
Verify after install:
“`bash
$ kopia –version
Kopia 0.23.1 (built with go1.26.4 on linux/amd64)
“`
If you see that version string, you have the May 2026 v0.23 family, which includes the race-condition fix. v0.22 is still acceptable but you should upgrade the first time you see it in `apt list –upgradable`.
## Create your first repository
A Kopia *repository* is the encrypted blob store where all your snapshots live. Storage can be local, NFS, an SFTP path, or cloud. The choice is yours — pick the one that is easiest to provision first, you can always move repositories later.
For a quick local repository on an external drive:
“`bash
$ sudo mkdir -p /mnt/backup/kopia
$ sudo kopia repository create filesystem
–path=/mnt/backup/kopia
Enter password to encrypt new repository: ********
Re-enter to confirm: ********
Initialized repository in /mnt/backup/kopia.
“`
For Backblaze B2 (no egress fee when restoring to a new B2 bucket):
“`bash
$ kopia repository create b2
–bucket=my-backups
–key-id=
–key=
–prefix=kopia
“`
For S3 (AWS, MinIO, Wasabi, R2, etc.):
“`bash
$ kopia repository create s3
–bucket=my-bucket
–prefix=kopia
–access-key=<...> –secret-access-key=<...>
–endpoint=s3.us-east-1.amazonaws.com
“`
The repository password is a *separate* secret from the cloud credentials — Kopia derives every per-blob encryption key from it (AES-256-GCM by default), so losing it means losing the data even if your cloud bucket is intact. Store it in your password manager.

## The data flow inside Kopia
Before you back anything up, it helps to know what Kopia is actually doing on your behalf. Every snapshot goes through the same pipeline:

1. **Chunk** — Kopia uses a 64-byte rolling hash with a 4 MiB average block to split files. Identical data across files produces identical chunks.
2. **Encrypt** — each chunk is sealed with AES-256-GCM using a key derived from your repository password.
3. **Compress** — zstd by default; pass `–compression=`,`lz4` for speed or `s2` for slower but tighter archives.
4. **Deduplicate** — chunks are content-addressed; only chunks that don’t already exist in the repo are uploaded.
The result: a backup of `~/Projects` made twice will upload only what actually changed, and even across two laptops the chunks line up if they share any files.
## Take your first snapshot
“`bash
$ kopia snapshot create ~/Documents
Snapshotted 1,243 files, 412.7 MiB
Snapshot ID: k192a3c2b4f88e0d1c12e at 2026-08-04 09:15:04 UTC
“`
Then check the result:
“`bash
$ kopia snapshot list
2026-08-04 09:15:04 k192a3c2b4f88e0d1c12e host:thinkpad paths:~/Documents
“`
For a one-shot “snapshot everything important” set:
“`bash
$ kopia snapshot create all
~/Documents ~/Projects ~/.config /etc/nginx
“`
The `all` mode is fine for ad-hoc manual jobs. For anything scheduled, you want a *policy*.
## Set retention and compression policy
Kopia’s policy is what makes a backup a backup instead of a folder of copies. Without a retention rule, your repo will grow until the bucket is full and then start failing uploads.
“`bash
$ kopia policy set ~/.config
–keep-latest=14
–keep-daily=30
–keep-weekly=12
–keep-monthly=12
–compression=zstd
“`
The above keeps the last 14 snapshots ever, plus 30 daily, 12 weekly, 12 monthly regardless. Combined with `–compression=zstd` and `–retention-above-percentage=80` you get a self-pruning setup that gracefully drops the oldest data when the repo fills up.
For scheduled snapshots, point Kopia at `~/.config/systemd/user/kopia.service` plus a timer, or simply run it from cron.

## Three ways to restore
Kopia’s restore story is the part most people skip when picking a backup tool, and it is the part that matters when something breaks.
**1. Browse the snapshot.** Find the snapshot you want, then walk the directory tree.
“`bash
$ kopia snapshot list
$ kopia ls k192a3c2b4f88e0d1c12e:Documents/report.pdf
-rw-r–r– 412.7 KB 2026-08-04 09:14:51
“`
**2. Restore specific files to a new directory.** This is the workflow you want 99% of the time — it doesn’t touch your live data.
“`bash
$ kopia restore k192a3c2b4f88e0d1c12e
Documents/report.pdf
/tmp/recover/
Restored 1 file (412.7 KB) to /tmp/recover/Documents/report.pdf.
“`
**3. Mount as a read-only FUSE filesystem.** When you don’t know exactly which file you need, the `kopia mount` subcommand exposes the snapshot as a virtual directory. From there you can use any normal file-management tool to drag what you want out.
“`bash
$ kopia mount k192a3c2b4f88e0d1c12e /mnt/k
$ ls /mnt/k/Documents
report.pdf notes.txt …
$ fusermount -u /mnt/k
“`
None of these require the GUI, which means headless server restores are easy — and the same commands work whether the repo lives in S3, B2, or an external drive.

## The Kopia GUI (when you want it)
The Electron-based `kopia-ui` is worth installing on a laptop or workstation. It hooks into the same `kopia` server process, gives you a snapshot browser with a calendar view, and supports adding/editing policies through a form rather than a CLI. The interface is the same engine you just configured by hand — there is no separate config to keep in sync.
The official docs walk through the GUI flows at [kopia.io/docs/getting-started](https://kopia.io/docs/getting-started/). If you run Kopia on more than one machine and want a central dashboard, [Kopia Repository Server](https://kopia.io/docs/repository-server/) lets multiple hosts back into one server-side repository, with an HTTP API and a web UI.
## When Kopia is the wrong choice
Kopia is not a disk-imaging tool. If you want “clone this entire SSD so I can swap it in bare-metal”, reach for `dd`, `Clonezilla`, or `btrfs send` instead — Kopia operates on file paths you tell it about. It also lacks Borg’s bare-metal recovery story and Timeshift’s single-purpose simplicity.
For a homelab with a few Linux hosts where each one needs its own encrypted backup to S3 or B2, Kopia is one of the cleanest options in 2026 — and the v0.23 line is the first release where I’d be comfortable running it unattended.
Project home: [https://kopia.io](https://kopia.io) · Releases: [github.com/kopia/kopia/releases](https://github.com/kopia/kopia/releases)
Comments