I recently decided to have a serious look at my backup strategy. For the past few years, I have simply been using a Time Machine hard disk that I have been trying to plug to my laptop at least daily. I have also been keeping my code in sync to GitHub as much as possible.

Given that my Time Machine hard disk is sitting on my desk, this backup solution is not very robust since in case of fire or theft (knock on wood!), I would not be protected at all. My code would surely be easily to get back from GitHub but I write way more code than I can host in my private repositories on GitHub. Thus, I decided to take a step forward and here is my current backup strategy:

  • Time Machine: I own a Western Digital 2TB hard drive which is partitioned into two 1TB parts, one of them being exclusively for Time Machine (I store mainly media on the second half). It supports Firewire 800 which makes Time Machine backups super fast with my Macbook Pro. I try to keep it plugged to the MBP as much as possible during the day but I make sure that it’s plugged at least once everyday, most of the time at night.

  • Dropbox: My main Documents folder is pretty much empty since I use Dropbox for my documents. All my work related stuff, old university coursework and notes, photos are also stored on Dropbox. Having multiple computers, I use Dropbox extensively and am very happy with it. I pay $9.99/month for 50GB and I seriously think it is a bargain given the quality of the service. I have also set up a Library folder in my root folder where I store Application Support data for various applications that I want to access from multiple computers such as 1 Password, Things, Papers and MoneyWell. Finally, I have a Code Collection folder where I store code samples I found around the Internet or small projects I have been messing around and that do not require a proper version control.

  • Amazon S3: I currently use Arq.app for uploading hourly backups of my drive to Amazon S3 storage. Arq is an excellent software and I’m extremely happy with it. It uploads in the background through an agent (Arg Agent) and is pretty fast. The backups are also encrypted which is a very neat feature. I have opted for an Amazon S3 monthly budget of $5 which gives me 53.76GB of storage and seems to meet my space requirements. Also, Amazon recently made the data transfer-in free so there is no fee for uploading the backups to S3. Data transfer-out still costs a few cents per GB but this should rarely happen giving that the data is a backup. As you understood, the total monthly cost is mainly the storage. It is recommended to backup the whole User directory but I preferred to pick the folders to backup manually. Note that I have an extensive Music folder (over 100GB) that for obvious reasons I do not backup to S3. It is however part of my Time Machine backup and I hope to be able to transfer it to the cloud soon once iTunes offers it. If it did not happen this fall, I might decide to back it up to S3 though. The folders that I backup are thus as following:

    • /Library/Application Support
    • /Applications
    • ~/Desktop
    • ~/Documents
    • ~/Dropbox
    • ~/Library (excluding Caches and Logs)
    • ~/Movies
    • ~/Pictures/iPhoto Library
  • GitHub: I have a GitHub micro plan ($7/month) which allows me to keep up to 5 private repositories. My main projects are stored on GitHub. I have added the public keys associated to my various machines to GitHub which allows me to push and pull from any of my computers. I am extremely happy with GitHub since the first day I have started using it!

  • Gitosis on Linode: I have a Linode VPS that I use to store my websites, web services and messing around. I have setup a Git “server” with Gitosis and there I store any project that requires Version Control but not important enough to be a proper private repository on GitHub. Setting up Gitosis was a bit of a pain on the ass but now that it is up and working, I am quite satisfied. Similarly, I have uploaded the public keys of my various machines to be able to push and pull.

I am now fairly confident with my backups. I am easily able to revert changes locally with Time Machine or even from the cloud with Arq (both these backups are done hourly). In case of hard disk failure or theft on my Macbook Pro, I can easily restore the whole disk from Time Machine. In case my Time Machine hard disk is also corrupted, I can now restore my main files and configuration from Amazon S3 with Arq. Every piece of code I write is also version controlled so reverting mistakes is trivial.