Your first backup is the "light bulb moment": running borg create to store /home and /etc into the repository, using a host-timestamp archive naming pattern, excluding files with --exclude, and reading the statistics via --stats, borg list, and borg info. You will see deduplication working for the first time.

The repository was born in episode 3. Now it is time for real action: making your first backup. This is an important moment because here you see deduplication working, learn to read the statistics, and build the habit of naming archives well. A bad archive naming choice will haunt you when you search for files in the future — so let us do it right from the start.
export BORG_REPO=/backup/borg
export BORG_PASSCOMMAND='cat /root/.borg-passphrase'
borg create --stats --list /backup/borg::"{hostname}-{now}" /home /etcLet us break down the parts:
/backup/borg::"{hostname}-{now}" — after :: is the archive name. {hostname} and {now} are Borg placeholders that are automatically replaced with the hostname and the local timestamp. The result looks like web-01-2026-08-13T10:30:00./home /etc — the source directories being backed up.--list — prints every processed file (useful the first time, not always required).--stats — shows a summary: number of files, original size, size after dedup, and compression ratio.Borg provides placeholders that can be combined:
{hostname} / {fqdn} — the hostname.{now} — the local-time timestamp; {utcnow} for UTC.{user} — the user running the backup.The "{hostname}-{now}" pattern is an industry standard: one glance tells you whose data and when. You can also add a suffix for the type of data, for example "{hostname}-{now}-db".
A full backup of /home will drag in caches, build artifacts, and temporary files — wasting space and slowing down the backup. Clean it up with exclusions:
borg create --stats \
--exclude '*.pyc' \
--exclude '*/node_modules/*' \
--exclude '*/target/*' \
--exclude-caches \
/backup/borg::"{hostname}-{now}" /home /etc--exclude accepts glob patterns; use * at the start so it matches at any depth.--exclude-caches skips directories containing a CACHEDIR.TAG file — a standard used by many tools (including git and build systems) to mark cache directories.For marker-based control, use --exclude-if-present <filename>: directories containing the marker file are skipped. This is a neat way to "opt in" on specific files, for example --exclude-if-present .no-backup.
Get into the habit of checking what will be copied before executing:
borg create --dry-run --list /backup/borg::"{hostname}-{now}-dry" /home /etc--dry-run writes nothing — it only shows the files that would be included. Note that the dummy archive name is still created, so add the -dry marker so you are not confused later.
borg list /backup/borgThe output looks like this:
web-01-2026-08-13T10:30:00 Thu, 2026-08-13 10:30:00 [abc123...]
web-01-2026-08-14T02:00:00 Fri, 2026-08-14 02:00:00 [def456...]The last two columns are the archive ID (hash) and the creation time.
borg info /backup/borg::"web-01-2026-08-13T10:30:00"borg info shows the numbers you must read:
The "Original size" vs "Deduplicated size" numbers are proof that dedup works: if the second backup barely grows the size, dedup is succeeding.
Tip
Before creating the second archive, change one small file first (or add a new file), then run borg create again and compare --stats. You will see "Deduplicated size" grow only slightly — content-defined dedup is at work.
{hostname}, two hosts sharing a repo will overwrite each other's names. Always include the host identity.--stats: without stats you are blind to whether the backup was truly efficient and successful. Always include it on manual runs.borg create --stats /backup/borg::"{hostname}-{now}" /home /etc is your first backup.--exclude, --exclude-caches, and --exclude-if-present to avoid junk.borg list shows all archives; borg info shows the dedup and compression numbers.In episode 5 we learn the side many people forget: restore & extract — restoring data with borg extract, selecting files selectively with --path, browsing archives via borg mount (FUSE), and best practices for restoring to a clean directory with verification.