Keeping music in sync across machines
At home, I've recently been using a Mac. At work, I use a Linux box. While these two have translators that speak the same languages, for my uses, these two might as well be from other planets. I want to listen to music at work, but from what's available on my Mac. So I had to figure out a way to synchronize the data, and I'd rather not pay for Dropbox.
Part of my problem is that I didn't want to open up extraneous ports to allow things like Samba or NFS to work, and I didn't want those additional daemons running anyway. If it couldn't work over SSH, I wasn't particularly interested.
I started by looking at an rsync solution, but having worked with rsync and my music before, I knew that was almost a non-starter. Part of the problem is that the amount of data-transfer was potentially large, and transferring that over a slow cable connection upload cap can be painful, not to mention how handling "missing" files works.
I thought about using git for a while, but unfortunately, the size of the index would quickly grow out of control with ~60GB of binary files that are already stored in a compressed state.
I'd used unison in the past, on slower machines, and I knew that the comparison times between a pair of unison repositories could take a long time. Luckily, this time it only took unison about 10 minutes to compare a full repository to an empty one, and I got started with the data transfer.
Sadly, uploading data at 100KB/s still takes quite a while when you're talking about the aforementioned ~60GB. The transfer took almost 4 days of uninterrupted transfer time. This was more than I'd hoped for, but I was unsure beforehand what kind of speed I could expect from my home cable connection.
Luckily, now I can add and even remove files and folders, and unison will properly track the changes, and apply them across the other hosts that are being synchronized. That means that I can buy a song on my computer at work, and unison on the Mac will pick it up. I can remove a song if I find a duplicate, and that removal will be synchronized as well.
It's a win-win situation for me.