Backup and recovery: how I'd back up my homelab
Created
Backup and recovery: how I’d back up my homelab
What I use today, and where it falls short
I already back up the data I could not recreate, with restic among other tools. I wanted to know which tools best cover three needs of a homelab backup setup:
| Job | Why it matters |
|---|---|
| G1: large file collections, offsite | Snapshots on the same machine don’t survive losing that machine |
| G2: whole-guest backups | Proxmox can back up a whole container or VM; a guest restored in one piece beats rebuilding it |
| G3: tested restores | A backup I have never restored is a hope, not a backup |
I reviewed the whole category and then tested the tools that fit these needs, because a comparison table can’t tell me whether a restore works.
The tools
I used the Community Scripts Backup & Recovery category as the candidate list on 2026-10-10: sixteen scripts, three of them marked as testing, plus Proxmox Backup Server, which the site lists under host management and which is the obvious tool for a Proxmox host. Category membership says what I reviewed, not that every entry does the same job. Only eight of the seventeen back up files or guests; three back up databases, and six are archivers, mirrors or sync servers that happen to be filed here.
Resource figures are the installer’s default Debian container allocation, not measured use. Project snapshots come from each repository’s public page on 2026-10-10. “Not described” means I did not find the answer in the project’s own README or features page, not that the answer is no.
Backing up files and guests
| Tool | What it does | Dedup / encryption | Offsite targets | Restore | Upkeep | Default CPU / RAM / disk | Project snapshot | My take |
|---|---|---|---|---|---|---|---|---|
| Proxmox Backup Server | The Proxmox-native backup server for containers, VMs and host files; incremental after the first run | Chunk dedup, compression, client-side authenticated encryption | Sync to a second server; S3-compatible object stores as a datastore backend (documented) | Restore a guest from the Proxmox UI or CLI; single-file restore; verification runs | Low to medium | 2 / 2048 MB / 10 GB | Version 4.0.10 in the no-subscription repo | Tested. The only tool here that restores a Proxmox guest |
| Backrest | Web UI over restic: plans, schedules, snapshot browsing | restic: block dedup, compression, AES-256 repository encryption | Every restic backend: S3-compatible, B2, Azure, GCS, SFTP, local, rclone | Browse snapshots and restore a path in the UI; the restic command line works on the same repository | Low; one Go binary | 1 / 512 MB / 8 GB | 7.5k stars, GPL-3.0, v1.14.1 (2026-07-12) | Tested. Same engine I already use, plus a UI |
| Zerobyte | Web UI over restic, can mount network shares as sources | restic dedup, compression, encryption | S3, GCS, Azure, rclone, SFTP, local | UI for schedules and monitoring; restic underneath | Low to medium; young 0.x project | 2 / 6144 MB / 10 GB | 7.0k stars, AGPL-3.0, v0.43.2 (2026-10-03) | Near miss: heavy default and extra setup for network shares |
| Duplicati | GUI backup client | Block dedup, compression, AES-256 or GPG | Many: S3-compatible, B2, SFTP, WebDAV, cloud drives | Wizard-style restore by version | Low to medium; its own local database | 1 / 1024 MB / 10 GB | 15.1k stars, v2.4 stable (2026-10-07) | Mature, but a second repository format next to restic |
| Borg-UI | Web UI for BorgBackup | Borg dedup, compression, encryption | Local, SSH and SFTP only | Browse archives and restore in the UI | Medium; needs an SSH target | 2 / 4096 MB / 10 GB | 1.7k stars, AGPL-3.0, v2.3.10 (2026-10-06) | No S3 targets without extra tooling |
| Alpine-BorgBackup-Server | A Borg server on Alpine that clients back up to; backs up nothing itself | Borg, done on the client | A target, not a sender | borg command line on the client |
Very low | 2 / 1024 MB / 20 GB | Borg 13.8k stars, 1.4.5 (2026-07-18) | A building block, not a finished tool |
| Minarca | Agent-based backup of PCs and servers to its own server | Incremental; encryption not described | Its own server | Web restore | Medium; an agent per machine | 2 / 4096 MB / 10 GB | Canonical project on GitLab is active (latest tag 7.2.0b6, a beta, 2026-10-09); its GitHub mirror is stale (last push 2025-10-01) | An agent per machine; I did not look further |
| UrBackup Server | Client/server file and image backup of PCs and servers | File-level dedup across clients; at-rest encryption not described | No built-in cloud targets | Web UI; image restore from a USB stick | Medium; an agent per client | 1 / 1024 MB / 16 GB | 936 stars, AGPL-3.0, 2.5.38 (2026-08-30) | Images machines, not Proxmox guests |
Backing up databases
| Tool | What it does | Dedup / encryption | Offsite targets | Restore | Default CPU / RAM / disk | Project snapshot | My take |
|---|---|---|---|---|---|---|---|
| Databasus | PostgreSQL only: logical dumps and physical incremental backups | Compression; AES-256-GCM | Local, S3 including R2-style stores, SFTP, rclone and more | UI restore, plus a restore verification that restores into a scratch container and checks it | 2 / 2048 MB / 8 GB | 8.8k stars, Apache-2.0, v3.60.0 (2026-09-22) | The one tool that tests restores for me, but only for PostgreSQL |
| Databasement (testing script) | Dumps for MySQL, MariaDB, PostgreSQL, SQL Server, MongoDB, SQLite and more | gzip, zstd, optional AES-256; no dedup | Local, S3-compatible, Azure, SMB, SFTP | UI restore, including scheduled restores | 2 / 2048 MB / 8 GB | 2.5k stars, MIT, v1.9.1 (2026-10-10) | Broad engine support I do not need |
| Portabase | Database backups across many engines, with agents on the database hosts | Not described | Not described | UI | 4 / 8192 MB / 15 GB | 1.8k stars, Apache-2.0, 1.31.0 (2026-09-29) | The largest default footprint of the category |
Archivers, mirrors and sync
| Tool | What it does | Default CPU / RAM / disk | Project snapshot | My take |
|---|---|---|---|---|
| Bichon | Archives mail from IMAP into a searchable store | 1 / 1024 MB / 4 GB | 2.0k stars, AGPL-3.0, 2.1.1 (2026-10-07) | Mail archiving, not backup of my systems |
| Mail-Archiver | Archives, searches and exports mail from several accounts | 1 / 2048 MB / 8 GB | 2.2k stars, GPL-3.0 (2026-09-22) | Same |
| Open-Archiver | Multi-source email archiving | 2 / 3072 MB / 8 GB | 2.4k stars, AGPL-3.0, v0.6.0 (2026-08-24) | Same |
| Gitea-Mirror | Mirrors GitHub repositories into a self-hosted Gitea | 2 / 2048 MB / 6 GB | 1.5k stars, AGPL-3.0, v3.40.3 (2026-09-26) | Needs a Gitea I do not run |
| Firefox Syncserver (testing script) | Mozilla’s Firefox Sync storage server | 2 / 3072 MB / 10 GB | 1.8k stars, MPL-2.0, 0.23.3 (2026-06-18) | Sync, not backup |
| UniFi Protect Backup (testing script) | Copies camera event clips to local or rclone storage | 1 / 1024 MB / 4 GB | 874 stars, MIT, v0.14.3 (2026-04-07) | I run no such system |
Which tools fit which job
| Job | Could do it | What I’d do |
|---|---|---|
| G1: large file collections, offsite | Backrest, Zerobyte, Duplicati (any object store); Borg-UI only to an SSH target | Add those collections to the restic job I already run. It needs no new software; a UI is optional |
| G2: whole-guest backups | Proxmox Backup Server is the only candidate. Built-in Proxmox dumps are the no-software option | Try PBS, but not on the same machine as the guests it protects (see below) |
| G3: tested restores | No tool tests a whole restore by itself; Databasus does it for PostgreSQL only; PBS verification runs check chunks, not a boot | A dated restore drill, repeated. This trial was the first two |
What I tested
I picked the top two for these needs: Proxmox Backup Server 4.0.10 (G2) and Backrest v1.14.1 driving restic (G1 and G3). On 2026-10-10 I installed each from its pinned community script into a temporary container on the Proxmox host, and backed up the same synthetic data: 1.08 GB of generated files (empty, small and medium files, compressible text, incompressible binary and an exact duplicate), identical for both tools and byte-for-byte reproducible. I never used my real files or guests, and every backup and restore stayed inside the throwaway test.
For each tool I took an initial backup, an unchanged repeat, and a restore to a fresh path, then compared the restored files to the source by file set, SHA-256 and direct bytes. PBS also got a whole-guest test: a throwaway container with the same data and no network device, backed up twice to a temporary PBS storage entry, restored to a new container ID, booted with no network and checked from inside and outside.
File backups, same data, fresh store each
| Measure | Backrest (restic) | PBS file mode |
|---|---|---|
| Initial backup | 4.29 s | 4.47 s |
| Unchanged repeat | 0.74 s | 2.13 s |
| Restore to a fresh path | 1.88 s | 5.04 s |
| Restored data matches source | yes, byte for byte | yes, byte for byte |
| Compression | restic auto |
PBS default zstd |
| Data stored after the first backup, apparent size | 269.7 MB (25% of source) | 539.3 MB (50% of source) |
| Data stored after the first backup, allocated on disk | 270.5 MB | 546.2 MB |
| Growth for the unchanged repeat, allocated | +4 KB | +27 KB |
| Empty store before any backup, allocated | 0.2 MB | 42 MB |
Sizes are decimal megabytes (1 MB = 1,000,000 bytes), measured after flushing and a six-second wait, and “data stored” means the store’s size minus an empty store of the same tool; allocated is what the disk holds, apparent is the sum of file sizes. Both tools deduplicate the unchanged repeat to almost nothing. On this fixture mix restic stored about half what PBS stored. I did not isolate why (restic’s compression and its dedup of the duplicate file are my guesses), and the data includes compressible text, so I would not read “half” as a general ratio. PBS pays a fixed 42 MB for its empty chunk store, which is 65,536 directories.
Whole-guest backup and restore (PBS only)
| Measure | PBS whole guest |
|---|---|
| Initial backup | 6.21 s |
| Unchanged repeat | 4.40 s, and the job log says it reused 100% of the data |
| Restore, boot and verify | 20.5 s |
| Restored guest verified | yes: booted isolated, files checked inside and compared byte for byte |
| Data stored after the first backup, apparent / allocated | 727.9 MB / 739.7 MB, which includes the guest’s operating system, so it is not comparable with the file table |
| Growth for the unchanged repeat, allocated | +44 KB |
Each tool took roughly two to three minutes to install unattended, with no manual steps beyond my config. That is a coarse estimate from watching the containers appear, not a timed measurement, and setting up a repository, a schedule and credentials by hand would take longer.
All numbers are single runs on one quiet test machine with synthetic data, so they show the shape of each tool, not a ranking. They say nothing about a network target, a large photo library, encryption cost or restore from an object store.
What I learned
- PBS, vzdump and temporary directories: The first whole-guest restore “failed” because my checksum list lived in a temporary directory. Proxmox’s guest backup to PBS excludes the temporary directories on purpose, so anything kept there never gets backed up. The restore was fine; my test was wrong. It cost one run.
- PBS, the enterprise repository: The community install script leaves the paid enterprise package source switched on. Without a subscription it answers 401 and
apt-get updateexits non-zero, which breaks any follow-up package install until I disable that source in the container. - PBS, the client: The server package does not include the backup client. For file backups I had to install the client package separately.
- PBS, an empty store is not empty: The first 42 MB of “storage used” is the chunk directory skeleton, so I measure the growth over an empty store, not the total.
- Backrest, setting it up through its API: In v1.14.1 adding a repository fails until an instance name is set, and the
autoInitializeoption creates the repository and then fails its own validation. I initialised the repository with the restic that Backrest manages, then added it without that option. A scripted install needs this. - Measuring size on ZFS: Reading disk use right after a write showed the repeat backup bigger than the first one, because ZFS delays allocating blocks. I now flush, wait six seconds, flush again, and record both allocated and apparent bytes.
- Proxmox storage commands touch the config file: Adding and removing a temporary storage entry rewrote the storage configuration with the same settings in a different order, left a client cache file, and created an empty credentials directory. None was a real change, but a cleanup check that compares bytes will fail on a clean run.
Seven runs were needed, because each exposed one gap in my own test harness. Every aborted run left no containers or volumes behind. The final run’s automated cleanup passed its own checks. In the earlier runs a few small leftovers (a reordered storage configuration, a client cache file and an empty credentials directory) needed manual removal, which I checked afterwards. I never touched anything outside the test.
What this means for my setup: what I’d do
These are proposals, not a done deal.
| Job | What I’d do | Why |
|---|---|---|
| G1 | Use restic, which I already run, for large collections too, with the same retention | The tool, the repository format and the restore procedure already exist; Backrest or Zerobyte would only add a UI |
| G2 | Proxmox Backup Server is the tool for this; built-in Proxmox dumps are the simpler start | PBS restored a whole guest in this trial |
| G3 | Restore drills, repeated, with a checksum comparison | No tool does this for me; the harness from this trial is a start |
Cost of the offsite part. On 2026-10-10 two object-storage providers’ public price pages listed standard storage at about $0.015 per GB-month (roughly $15 per TB-month) with free downloads on one, and about $6.95 per TB per 30 days on the other, with free downloads up to three times the amount stored and $0.01 per GB beyond. Both give 10 GB free. PBS can also use an S3-compatible bucket as its datastore, and its documentation warns that request charges can add cost; I did not measure those. Pricing changes, so I would re-read the pages before I decide.
What would change this. If I want one interface for every backup, Backrest or Zerobyte beats raw restic. If the guests multiply, the PBS machine matters more. If PostgreSQL restores become the worry, Databasus is the one tool here that tests its own restores. Adopting any of this is a separate project with its own plan.
Limits
I reviewed the pages and repositories listed above on 2026-10-10 and read each community installer at the level of “what does it write on the host”, not line by line. I tested two tools on one data set; I did not test encryption, a remote target, a large library, an object-store restore or Zerobyte, Duplicati, Borg-UI or the database tools. Fit statements for tools I did not install are reasoning from their documentation, not a demonstrated deployment. The temporary containers, storage entry and scratch space were removed after the test.