My backup strategy 2026 Dark _ □ ✕
  • Posts
  • About
  • Debug
Post

My backup strategy 2026

Published
2026-08-11 11:45 UTC (precision: second)
Source feed
Michael Harley [exclude this blog]
Link
https://michaelharley.net/posts/2026/08/11/my-backup-strategy-2026/
Canonical
https://michaelharley.net/posts/2026/08/11/my-backup-strategy-2026
Length
8395 runes
Extracted text
Permalink I saw Chris's post, The Grand Blog Reunification (opens in a new tab), where he explains that his cloud sync was silently failing and he wiped his computer without realizing he didn't have a backup. Oops. Not wanting to repeat that type of issue, I decided to revisit my own backup strategy. Back in 2022, I wrote about how I used my NAS and rsync to back up my computer. This is how I'm backing up my computer in 2026. My goal is the classic 3-2-1 backup strategy. 3 – Keep 3 copies of any important file: 1 primary and 2 backups. 2 – Keep the files on 2 different media types to protect against different types of hazards. 1 – Store 1 copy offsite (e.g., outside your home or business facility). — CISA, Data Backup Options (opens in a new tab) Without further ado, here is how I check the boxes on that goal. The tool # I use borg (opens in a new tab), with borgmatic (opens in a new tab). Borg does the actual work: deduplicated, compressed, encrypted, versioned backups. Borgmatic is a YAML wrapper on top of it. I configure it once and then I get to stop thinking about it, which is exactly what I want out of a backup tool. That versioning bit is why I left rsync behind. My 2022 setup mirrored my home directory to the NAS, and a mirror isn't a backup. If I deleted a file or corrupted it, the next rsync run would happily copy that damage right over the good copy. Borg keeps history. A mistake is recoverable instead of replicated. I run two borgmatic configs, one per destination. Copy 1: the laptop # The primary is my 2015 MacBook Pro running Debian 13. Copy 1, check. Copy 2: the NAS # My Synology DS220+ with two drives in RAID 1. Same box from the 2022 post, still chugging along. It's a different medium from the laptop's internal SSD, which covers the 2 in 3-2-1. repositories: - path: ssh://borg@192.168.1.22/./backups/laptop ssh_command: ssh -i /home/obsolete29/.ssh/id_ed25519 -o IdentitiesOnly=yes -p 2222 It backs up hourly. I've got 40 archives sitting there right now, going back to March. Copy 3: BorgBase, offsite # BorgBase (opens in a new tab) is hosted borg storage. This is the 1 in 3-2-1, the copy that survives the house. repositories: - path: ssh://<repo-id>@<repo-id>.repo.borgbase.com/./repo Every 6 hours, 22 archives. Both repos are encrypted, so BorgBase is storing ciphertext. They can't read my files. Nice. 👌🏻 What this costs # Three copies of everything sounds expensive. It isn't, and that's down to deduplication. NAS Offsite Original size 1.01 TB 507.30 GB Compressed 922.71 GB 465.32 GB Deduplicated 26.74 GB 25.74 GB That's a terabyte of archive history living in 27 GB of actual disk. Borg stores each unique chunk once, so 40 snapshots of a home directory that barely changes cost hardly more than one of them. This is the whole reason hourly backups are practical instead of ridiculous. Scheduling # Both configs run off systemd user timers rather than cron. Cron has no idea a run was missed: if the laptop is asleep at the top of the hour, that backup just never happens and nothing tells me about it. OnCalendar=hourly RandomizedDelaySec=5m Persistent=true OnCalendar=*-*-* 00/6:00:00 RandomizedDelaySec=15m Persistent=true The rest of it is in the service files: [Service] Type=oneshot Nice=19 IOSchedulingClass=idle ExecStartPre=/bin/bash -c 'for i in $(seq 1 30); do getent hosts 192.168.1.22 && exit 0; sleep 2; done; exit 1' Persistent=true means a timer I missed while the lid was closed fires on the next boot instead of just getting skipped. Nice=19 and IOSchedulingClass=idle mean a running backup never makes the machine feel sluggish. I don't notice them. And that ExecStartPre polls for up to 60 seconds waiting for the destination host to resolve before the backup starts, so a run that fires before the network is up waits instead of failing. Retention # NAS Offsite hourly 24 6 daily 7 7 weekly 4 4 monthly 6 6 A full day of hourly snapshots locally, six hours of them offsite, then the same daily, weekly and monthly tail on both. Borgmatic runs its own integrity checks too: a repository check every two weeks and a full archive check monthly. What I don't back up # By default, I back up my whole home directory, and I have a manual exclude list. I'd rather accidentally back up too much than accidentally back up too little. I exclude build artifacts and caches (node_modules, __pycache__, .cache, .venv), toolchains that'll just reinstall themselves (.cargo, .rustup, .nvm), browser profiles that sync through their own accounts, and Downloads. I do have to be careful about my working/junk directory, though. When I was restoring some old posts from a backup, I extracted 407 GB into the root of my home folder so that I could pick out the bits of the backup that I needed. It didn't occur to me that borg would back the whole thing up. It wasn't a problem for my local NAS backup, but my BorgBase plan only gets 250 GB of storage so... oops! Note to self: Use Downloads as your scratch directory, you dummy. How I know it's working # This is the part that answers Chris's problem. His backups failed silently. Mine can't, I hope. Every borgmatic run pings an Uptime Kuma (opens in a new tab) push monitor, one per repository, on success and on failure both. Kuma is self-hosted too, running in a container on my homelab. commands: - after: action when: [create] run: - curl -fsS --retry 3 "http://<kuma-host>/api/push/<token>?status=up&msg=OK&ping=" - after: error when: [create, prune, compact, check] run: - curl -fsS --retry 3 "http://<kuma-host>/api/push/<token>?status=down&msg=FAIL&ping=" Kuma expects a ping on a schedule. If one doesn't show up, it emails me. So a failed backup alerts me, and so does a backup that never ran at all. The silence is the alarm, which is exactly the failure mode that got Chris. Restoring # A backup I've never restored from is a hypothesis, not a backup. So here are the commands. To list what's in a repository: borgmatic --config ~/.config/borgmatic/nas.yaml list To pull a single file out of the most recent archive: borgmatic --config ~/.config/borgmatic/nas.yaml extract \ --archive latest \ --path home/obsolete29/.config/borgmatic/nas.yaml \ --destination /tmp/restore-test A few things I always forget: paths inside the archive have no leading slash, --archive latest saves me looking up an archive name, and without --destination it extracts into the current directory, which is almost never where I want it. To browse instead of extract, I can mount an archive as a filesystem and copy files out normally: borgmatic --config ~/.config/borgmatic/nas.yaml mount \ --archive latest --mount-point /mnt/borg I ran that extract while writing this post and diffed the result against the live file. Identical. The passphrase # Both repositories are encrypted with the same passphrase, which borgmatic reads at runtime: encryption_passcommand: "cat /home/obsolete29/.config/borg/passphrase" This is the single point of failure in the whole thing. Lose that passphrase and both backups turn into an inert lump, no matter how many copies I have or how healthy they are. It lives in three places: the plaintext file above that borgmatic reads, my pass store, and a Recovery group in my KeePass database that syncs to my phone and my tablet. That last one is the one that counts. A passphrase that only exists on machines inside the house dies in the same fire as the hardware it was supposed to protect me from. And yes, that's a passphrase sitting in a plain text file. It's chmod 600, which protects it from other users on a running machine. While writing this post I went to double check that and discovered the laptop has no full disk encryption at all, so those permissions do exactly nothing against somebody who walks off with it. Not really a passphrase problem, to be fair to me: anyone holding that disk already has my whole home directory in the clear. But it's going on the list. This is why you write the post. Checking the boxes # Requirement How 3 copies Laptop, NAS, BorgBase 2 media types Three: internal SSD, NAS RAID 1, cloud storage 1 offsite BorgBase I'm not a backup specialist and I'm sure there are holes in this I haven't spotted yet. What does your backup strategy look like? Michael Harley Author Also on Mastodon (opens in a new tab) Bluesky (opens in a new tab)
Stored topics

Every stored assignment is listed, including rows below the current cutoff (0.75), so a missing tag can be explained.

Concept Code Score Meter Margin Origin Path
economy, business and finance economy-business-and-finance 0.99 4.95 ↑derived from 20000225 economy, business and finance
products and services products-and-services 0.99 4.95 ↑derived from 20000225 economy, business and finance > products and services
computing and information technology computing-and-information-technology 0.99 4.95 direct economy, business and finance > products and services > computing and information technology
science and technology science-and-technology 0.98 3.71 ↑derived from 20000763 science and technology
technology and engineering technology-and-engineering 0.98 3.71 ↑derived from 20000763 science and technology > technology and engineering
information technology and computer science information-technology-and-computer 0.98 3.71 direct science and technology > technology and engineering > information technology and computer science
Cryptography cryptography 0.97 3.60 direct science and technology > technology and engineering > information technology and computer science > Cryptography
Information security information-security 0.96 3.28 direct science and technology > technology and engineering > information technology and computer science > Information security
software and applications software-and-applications 0.86 1.82 direct economy, business and finance > products and services > computing and information technology > software and applications
society society 0.72 0.97 ↑derived from 20001300 society
fundamental rights fundamental-rights 0.72 0.97 ↑derived from 20001300 society > fundamental rights
privacy privacy 0.72 0.97 direct society > fundamental rights > privacy
Software development software-development 0.61 0.47 direct economy, business and finance > products and services > computing and information technology > software and applications > Software development
crime, law and justice crime-law-and-justice 0.29 -0.88 ↑derived from 20000086 crime, law and justice
crime crime 0.29 -0.88 ↑derived from 20000086 crime, law and justice > crime
cyber crime cyber-crime 0.29 -0.88 direct crime, law and justice > crime > cyber crime
Open source open-source 0.29 -0.90 direct economy, business and finance > products and services > computing and information technology > software and applications > Open source
scientific research scientific-research 0.28 -0.96 ↑derived from 20000739 science and technology > scientific research
scientific exploration scientific-exploration 0.28 -0.96 ↑derived from 20000739 science and technology > scientific research > scientific exploration
space exploration space-exploration 0.28 -0.96 direct science and technology > scientific research > scientific exploration > space exploration
Self-hosting self-hosting 0.27 -1.00 direct economy, business and finance > products and services > computing and information technology > Self-hosting
media and entertainment industry media-and-entertainment-industry 0.15 -1.75 ↑derived from 20000307 economy, business and finance > products and services > media and entertainment industry
film industry film-industry 0.15 -1.75 direct economy, business and finance > products and services > media and entertainment industry > film industry
environment environment 0.14 -1.83 direct environment
natural science natural-science 0.11 -2.14 ↑derived from 20000719 science and technology > natural science
biology biology 0.11 -2.14 direct science and technology > natural science > biology
artificial intelligence artificial-intelligence 0.09 -2.25 direct science and technology > technology and engineering > information technology and computer science > artificial intelligence
lifestyle and leisure lifestyle-and-leisure 0.09 -2.37 ↑derived from local:mmorpg lifestyle and leisure
leisure leisure 0.09 -2.37 ↑derived from local:mmorpg lifestyle and leisure > leisure
game game 0.09 -2.37 ↑derived from local:mmorpg lifestyle and leisure > leisure > game
video game video-game 0.09 -2.37 ↑derived from local:mmorpg lifestyle and leisure > leisure > game > video game
MMORPG mmorpg 0.09 -2.37 direct lifestyle and leisure > leisure > game > video game > MMORPG
labour labour 0.08 -2.39 direct labour
family family 0.08 -2.49 direct society > family
sport sport 0.08 -2.50 ↑derived from 20001183 sport
competition discipline competition-discipline 0.08 -2.50 ↑derived from 20001183 sport > competition discipline
eSports esports 0.08 -2.50 direct sport > competition discipline > eSports
disaster, accident and emergency incident disaster-accident-and-emergency-incident 0.06 -2.68 direct disaster, accident and emergency incident
arts, culture, entertainment and media arts-culture-entertainment-and-media 0.06 -2.70 ↑derived from local:blogging arts, culture, entertainment and media
mass media mass-media 0.06 -2.70 ↑derived from local:blogging arts, culture, entertainment and media > mass media
social media social-media 0.06 -2.70 ↑derived from local:blogging arts, culture, entertainment and media > mass media > social media
Blogging blogging 0.06 -2.70 direct arts, culture, entertainment and media > mass media > social media > Blogging
books and publishing books-and-publishing 0.06 -2.75 direct economy, business and finance > products and services > media and entertainment industry > books and publishing
arts and entertainment arts-and-entertainment 0.05 -2.98 ↑derived from 20000013 arts, culture, entertainment and media > arts and entertainment
literature literature 0.05 -2.98 direct arts, culture, entertainment and media > arts and entertainment > literature
health health 0.04 -3.10 ↑derived from 20000458 health
disease and condition disease-and-condition 0.04 -3.10 ↑derived from 20000458 health > disease and condition
mental health and disorder mental-health-and-disorder 0.04 -3.10 direct health > disease and condition > mental health and disorder
hobby hobby 0.04 -3.13 direct lifestyle and leisure > leisure > hobby
Tabletop gaming tabletop-gaming 0.04 -3.26 direct lifestyle and leisure > leisure > game > Tabletop gaming
social sciences social-sciences 0.04 -3.26 direct science and technology > social sciences
politics and government politics-and-government 0.04 -3.30 direct politics and government
human interest human-interest 0.03 -3.38 ↑derived from 20000498 human interest
award and prize award-and-prize 0.03 -3.38 direct human interest > award and prize
animation animation 0.03 -3.47 direct arts, culture, entertainment and media > arts and entertainment > animation
exercise and fitness exercise-and-fitness 0.03 -3.48 direct lifestyle and leisure > wellness > exercise and fitness
wellness wellness 0.03 -3.48 ↑derived from 20001239 lifestyle and leisure > wellness
religion religion 0.03 -3.54 direct religion
climate change climate-change 0.03 -3.54 direct environment > climate change
history history 0.03 -3.56 direct science and technology > social sciences > history
culture culture 0.02 -3.74 direct arts, culture, entertainment and media > culture
education education 0.02 -3.75 direct education
television television 0.02 -3.78 direct arts, culture, entertainment and media > mass media > television
conflict, war and peace conflict-war-and-peace 0.02 -3.84 direct conflict, war and peace
health treatment and procedure health-treatment-and-procedure 0.02 -3.86 direct health > health treatment and procedure
travel and tourism travel-and-tourism 0.02 -3.89 direct lifestyle and leisure > leisure > travel and tourism
public health public-health 0.02 -3.98 direct health > public health
diet diet 0.02 -4.18 direct health > health treatment and procedure > diet
streaming service streaming-service 0.01 -4.23 direct economy, business and finance > products and services > media and entertainment industry > streaming service
food and drink enthusiasm food-and-drink-enthusiasm 0.01 -4.32 direct lifestyle and leisure > leisure > hobby > food and drink enthusiasm
visual arts visual-arts 0.01 -4.59 ↑derived from 20000036 arts, culture, entertainment and media > arts and entertainment > visual arts
photography photography 0.01 -4.59 direct arts, culture, entertainment and media > arts and entertainment > visual arts > photography
board game board-game 0.01 -4.63 direct lifestyle and leisure > leisure > game > board game
podcast podcast 0.01 -4.64 direct economy, business and finance > products and services > media and entertainment industry > podcast
card game card-game 0.01 -4.68 direct lifestyle and leisure > leisure > game > card game
music music 0.01 -4.74 direct arts, culture, entertainment and media > arts and entertainment > music
consumer goods consumer-goods 0.01 -4.84 ↑derived from 20001160 economy, business and finance > products and services > consumer goods
handicrafts handicrafts 0.01 -4.84 direct economy, business and finance > products and services > consumer goods > handicrafts
lifestyle lifestyle 0.01 -4.91 ↑derived from 20001257 lifestyle and leisure > lifestyle
house and home house-and-home 0.01 -4.91 ↑derived from 20001257 lifestyle and leisure > lifestyle > house and home
gardening gardening 0.01 -4.91 direct lifestyle and leisure > lifestyle > house and home > gardening
weather weather 0.01 -5.13 direct weather
weather forecast weather-forecast 0.01 -5.25 direct weather > weather forecast

← Back to posts

feedtagger 0.1.0-dev model: modernbert-base-zeroshot-v2.0/int8@all-s256 2115 posts 0 unclassified min score 0.75