I recently bought a new computer. One of the so-called Ultrabooks™, which is super-portable, lightweight, and pleasant to use. But it’s not a replacement for my existing 17-inch beefier laptop. I’ll be using both. Naturally, I want my files to be kept in sync between them so I don’t have to remember which file is on which, and to unify stuff like distinct IM log directories. Overall, there’s about 100 GB of files I’d want to keep in sync between the two.
Trouble is, I want to do this without storing all my files readable on a third-party server, and I don’t want to pay for 100 GB of remote storage just for syncing. Almost as an exercise, I’ve been attempting to get something in place.
The setup is that there are the two laptops, an external server with limited available disk space (say 10-15 GB), and some constraints (which overlap a little):
Local storage. Data is kept mainly on the laptops themselves, so that the amount of data I can keep in sync is just whatever the laptops themselves can hold. Both laptops can locally store all of the data I want to sync already.
Security. Any remote storage must keep the data encrypted and unreadable to anyone but one of my two laptops.
Magic. The machines can be turned on and off in a random order. I shouldn’t have to remember to turn both laptops on to get files in sync, and it should be handled automatically. Obviously, this requires a remote server.
Transfer node. This is the hard part. I shouldn’t have to keep a remote server with a hard drive big enough to hold the entire set of data, just to allow syncing. The remote server should exist as a temporary buffer, or a holding area. Imagine sending a file to an offline computer and having it held with a third-party who will deliver it as soon as possible.
There are some possibles I found, and none of them quite work, unless I’ve missed something obvious.
Dropbox. Ignoring the fact that 100 GB of Dropbox storage would cost money and that getting seamless encryption with Dropbox is a bit of a pain, it’s not necessary since there’s…
AeroFS. Allows two computers to speak locally without an intermediate server. But, both machines have to be online and connected to each other for it to work. If you want to use an external server for the cloud-y part, you need to have 100 GB available on a remote machine, which is costly, and you’d still have to tackle encryption separately.
Tahoe-LAFS. A free cloud storage system using a peer-to-peer grid, complete with encryption. Basically turns a collection of remote servers into a single encrypted storage device. It’s seriously cool — there’s striping and redundancy and lots of neat things — but it would, again, require 100 GB of remote storage available; if you try to just use both computers as storage nodes as well as client nodes, you’re still required to have both computers enabled for the syncing to work. (There are also happy-ness problems and the fact that Tahoe-LAFS is not a filesystem.)
git-annex (assistant). This looked like it was going to be the one. It claims to have the idea of a transfer node: a remote server which holds onto files until they’re distributed to client machines. It comes with encryption, a web interface for handling repositories that are linked, and automatic syncing. The deal-breaker is that it has some strange read-only symlinking behaviour; if the two laptops are hooked up with git annex, neither can modify any file they add to the folder that git annex tracks files under.
The closest approximation is probably AeroFS. If AeroFS had encryption and this idea of a transfer-only intermediate server, then either of the two laptops could be turned off and on at random, and could even be on different networks as long as both could see the middleman server. (Having direct local transfers when possible would be good, though.) Files would magically stay in sync Dropbox-style, except through a secure holding cloud for anything pending sync, giving the benefit that it doesn’t need a lot of available storage. Unless, I suppose, you only used one of the machines for 3 months and the accumulated pending data was too big.
I’m convinced this is possible, but so far I haven’t found a way.