← Blog

Backups

There's something really strange going on with storage on my Mac mini. There's apparently 148 GB of space in the "Other" category being used. I suspect that this is Time Machine's snapshots and such when my backup drive is not connected, but this category is so opaque that it's hard to tell really.

I followed some tips online about how to clear Time Machine's local snapshots, but that only seemed to free up a few gigs of space. I started to evaluate how well Time Machine was acutally performing otherwise. It was apparently using about 900 GBs of space on my external drive, but only had backups going back to October 2019. This drive should have multiple years worth of backups on it. Needless to say, I'm thoroughly annoyed with Time Machine.

"A giant leap backward..." hmmm? That line seems to have aged a little... too well?

It had so much promise when it shipped with Mac OS X Leopard back in 2007... making backups easy for everyone, or to make backing up and restoring files so easy and pleasing that everyone would do it and never lose files again. But thirteen years on, I'm not so sure this system itself has aged all that well, despite it's cheeky marketing.

I started thinking about what I could do to move away from Time Machine. And I almost reached for my wallet to get a lic for CarbonCopyCloner, but they're charging $40 for that these days and while I'm all for supporting indie devs, it seems like a little much.

I got hacky instead. Many of you are probably aware of the rsync command. It smartly duplicates directories between different directories, different file systems, and you can even have it duplicate to remote hosts. rsync is great becuase it will only back up files that have changed (comparing source size/modification date to destination size/modification date). This is super cool and it's baked right into your Mac. You can find a quick guide on how this generall works in DigitalOcean's documentation.

Instead of buying CCC, I wrote a pretty simple zsh script to copy all of the directories I wanted to have a duplicate of on to an external drive.

#!/usr/bin/env zsh

rsync -a /Users/<your username>/Documents /Volumes/<ExtBackupDrive>
rsync -a /Users/<your username>/Downloads /Volumes/<ExtBackupDrive>
rsync -a /Users/<your username>/Pictures /Volumes/<ExtBackupDrive>
rsync -a /Users/<your username>/Sites /Volumes/<ExtBackupDrive>

That's it.

Do a quick chmod +x to your shell script, then run in the Terminal app. You could also set this up on a cronjob and have it run every hour.

To be clear, this script doesn't have all of the functionality of Time Machine. There's no concept of versioning. It's simply a mirror of your files. But I rarely used any of the versioning features, so I don't feel that they'll be missed and in the end, the compromise won't be so much of a compromise.