Borgmatic vs Kopia: Backup Tools Compared
Two Philosophies of Deduplicating Backup
Both Borgmatic and Kopia produce encrypted, deduplicated backups. Both can send data to local disks, remote servers, or cloud storage. But they approach the problem differently.
Borgmatic wraps BorgBackup — a mature, battle-tested backup engine written in Python/C. BorgBackup has been deduplicating backups reliably since 2015. Borgmatic adds YAML configuration, scheduling integration, and lifecycle management on top.
Kopia is a ground-up implementation in Go, designed as a modern alternative to BorgBackup and Restic. It includes both a CLI and a web UI, supports content-defined chunking, and natively targets cloud storage backends.
Feature Comparison
| Feature | Borgmatic (BorgBackup) | Kopia |
|---|---|---|
| Deduplication | Fixed-size chunking | Content-defined chunking |
| Compression | LZ4, ZSTD, LZMA | ZSTD, S2, PGZip, none |
| Encryption | AES-256-CTR + HMAC-SHA256 | AES-256-GCM or ChaCha20-Poly1305 |
| Storage backends | Local, SSH/SFTP, Borg server | Local, SFTP, S3, B2, GCS, Azure, Rclone |
| Web UI | No | Yes (built-in) |
| CLI | Yes (borgmatic wraps borg CLI) | Yes |
| Config format | YAML | JSON (CLI) or GUI |
| Scheduling | Cron/systemd (external) | Built-in scheduler |
| Pre/post hooks | Yes (YAML config) | Yes |
| Retention policies | Yes (keep-daily, keep-weekly, etc.) | Yes (similar granularity) |
| Repository format | Borg proprietary | Kopia proprietary |
| Verify/check | borg check (thorough) | kopia snapshot verify |
| Mount snapshots | FUSE mount (borg mount) | FUSE mount or virtual filesystem |
| Multi-platform | Linux, macOS (no native Windows) | Linux, macOS, Windows |
| Language | Python/C (Borg) + Python (Borgmatic) | Go |
| Maturity | 10+ years (Borg), 5+ years (Borgmatic) | 4+ years |
Deduplication Strategy
BorgBackup uses fixed-size chunking with a rolling hash to identify duplicate blocks. This is effective and well-tested but can miss deduplication opportunities when data shifts within files (e.g., inserting a line at the beginning of a large file shifts all subsequent chunks).
Kopia uses content-defined chunking (CDC), where chunk boundaries are determined by the data itself rather than fixed offsets. This handles data shifts better — inserting a line at the top of a file only creates new chunks around the insertion point, not for the entire file.
In practice, both achieve high deduplication ratios for typical backup workloads (config files, databases, documents). CDC gives Kopia a theoretical edge for workloads with lots of in-place modifications, but the difference is rarely dramatic for home server backups.
Performance
| Benchmark (500GB dataset) | Borgmatic | Kopia |
|---|---|---|
| Initial full backup | ~45 min | ~40 min |
| Incremental (1% changed) | ~3 min | ~2.5 min |
| Restore (single file) | ~5 sec | ~5 sec |
| Restore (full) | ~40 min | ~35 min |
| RAM during backup | 100-200MB | 150-300MB |
| CPU usage | Moderate (compression) | Moderate (compression) |
Approximate values — actual performance depends on storage backend speed, compression settings, and hardware. Both tools are I/O-bound rather than CPU-bound for most workloads.
Kopia is slightly faster due to Go’s parallelism advantages and content-defined chunking efficiency. Borgmatic (BorgBackup) is slightly more memory-efficient. Neither difference is large enough to drive a decision.
Storage Backend Support
This is where Kopia has a clear advantage.
Borgmatic/BorgBackup supports: local disk, SSH/SFTP (via borg serve or raw SSH), and Borg-specific server protocol. To push backups to S3, B2, or other cloud storage, you need an intermediary — either Rclone as a FUSE mount or a VPS running borg serve that itself backs up to cloud storage.
Kopia natively supports: local disk, SFTP, Amazon S3, Backblaze B2, Google Cloud Storage, Azure Blob, Wasabi, MinIO, and any S3-compatible storage. No intermediary, no FUSE mounts, no extra server. kopia repository create s3 --bucket=backups and you’re done.
| Backend | Borgmatic | Kopia |
|---|---|---|
| Local disk | Native | Native |
| SSH/SFTP | Native | Native |
| Amazon S3 | Via Rclone/FUSE | Native |
| Backblaze B2 | Via Rclone/FUSE | Native |
| Google Cloud Storage | Via Rclone/FUSE | Native |
| Azure Blob | Via Rclone/FUSE | Native |
| MinIO/S3-compatible | Via Rclone/FUSE | Native |
If you back up to a remote server via SSH, both work equally well. If you back up directly to cloud object storage, Kopia is significantly simpler.
Configuration and Usability
Borgmatic is configured via YAML. A typical config:
repositories:
- path: ssh://backup@server/./backups
label: remote
source_directories:
- /home
- /etc
- /var/lib/docker/volumes
exclude_patterns:
- '*.cache'
- '*/node_modules'
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
hooks:
before_backup:
- pg_dump mydb > /tmp/mydb.sql
after_backup:
- curl -fsS https://hc-ping.com/your-uuid
Clean, readable, well-documented. But it’s CLI-only — no web interface for browsing snapshots or managing config.
Kopia offers both CLI and web UI. The web UI lets you browse snapshots, configure policies, view repository statistics, and restore files through the browser. For users who prefer GUI tools, this is a significant advantage. The CLI is equally capable for scripting and automation.
Use Cases
Choose Borgmatic If…
- You back up to a remote server via SSH (Borg’s SSH protocol is fast and efficient)
- You want YAML configuration that lives in version control
- You’re already familiar with BorgBackup
- You prefer mature, battle-tested software over newer alternatives
- You run Linux or macOS exclusively (no Windows support needed)
- You want the lightest possible RAM footprint during backups
Choose Kopia If…
- You back up directly to cloud storage (S3, B2, GCS, Azure)
- You want a web UI for managing backups and browsing snapshots
- You need cross-platform support (Linux, macOS, and Windows)
- You want a built-in scheduler without configuring cron/systemd separately
- You prefer a modern, actively developed tool with rapid feature growth
- You manage backups for non-technical users who want a GUI
Final Verdict
For SSH-based backups to a remote server, Borgmatic is the better choice. BorgBackup’s SSH protocol is highly optimized, Borgmatic’s YAML config is clean and version-controllable, and the ecosystem is more mature. The 10+ year track record of BorgBackup handling people’s backups reliably is worth something.
For cloud-storage backups or mixed environments, Kopia wins. Native S3/B2/GCS support without intermediary tools, cross-platform support including Windows, and a built-in web UI make Kopia more practical for diverse backup scenarios.
Both are excellent tools. You won’t regret choosing either one.
FAQ
Can I migrate from Borgmatic to Kopia (or vice versa)?
Not directly — they use incompatible repository formats. Migration means running a full backup to the new tool’s repository while keeping the old repository intact until you’re confident in the new setup. Keep both running in parallel for at least one retention cycle.
Which handles Docker volume backups better?
Both handle Docker volumes identically — they back up files and directories. The key is stopping containers before backing up database volumes (or using pre-backup hooks to dump databases). Both support pre/post hooks for this workflow.
Can I use both simultaneously?
Yes, and some people do: Borgmatic to a local NAS via SSH (fast, always available) and Kopia to B2 (off-site, cloud durability). Two backup targets satisfy the 3-2-1 rule with different tools for redundancy.
Related
Get self-hosting tips in your inbox
New guides, comparisons, and setup tutorials — delivered weekly. No spam.