I've been a fan of the Dropbox application for years and use it to synchronize nearly my entire file system between multiple computers, but my confidence it it is beginning to wane.
This afternoon, I installed a new operating system on my primary machine (going from Ubuntu 12.04 to 12.10) and my first step was to install the Dropbox client and begin syncing my files. In the past, before performing a clean install, I've copied my entire hard drive to a backup beforehand, about a 5 hour process.
This time, I felt confident that Dropbox had copies of most of my files (except some special/sensitive ones I don't trust to Dropbox) so I proceeded with the clean install and expected to smoothly download all the files from Dropbox onto the new machine.
My setup is a little more advanced than maybe the average user. I use symlinks to synchronize folders outside the /home/username/Dropbox folder since, let's face it, nobody wants all their files inside the main Dropbox folder. In this way, nearly my entire file file system is symlinked to the Dropbox folder so that there is a cloud backup. Doing this on multiple computers means that files you add to your Videos folder on your Ubuntu machine automatically show up in your Movies folder on your Mac because of the way I've set up symlinks.
Its actually not too difficult to setup the first time (NOTE: As you may have guessed from the title, this approach gives benefits, but at the cost of some pains later).
ln -s ~/Desktop Desktop
So you're creating a symbolic link inside your Dropbox folder and Dropbox will follow the symbolic link and synchronize the files it finds inside your system Desktop folder. Try it out. With multiple computers, to create the Videos <-> Movies mapping I described above,
# On Ubuntu
ln -s ~/Videos Videos
# On Mac
ln -s ~/Movies Videos
Now, all your video media will be in a folder called Videos on Dropbox AND it will be in your local Videos folder on your Ubuntu machine and in your local Movies folder on your Mac. Making a change in any of those places updates the file everywhere. Pretty nice huh?
Setting up a new machine
Ok, so I've got my fresh new machine, with a clean install of Ubuntu 12.10, I install the Dropbox client and then create the symlinks from the Dropbox folder to my Desktop, Documents, Music, Pictures, Videos, etc. The problem is that Dropbox reads an empty Desktop folder on my local machine and a Desktop filled with files its cloud servers and gets confused. You would think it would either copy the files from their servers to my desktop (ideal) or obliterate all files I have in my "Cloud" Desktop folder. What really happens is that some folders live and some are deleted, seemingly at random. This sounds realy horrible, but is only midly horrible - from the Dropbox web interface you can restore deleted files and folders. Not too bad right?
Well, it turns out that subfolders can also be randomly deleted so in order to ensure I haven't lost anything from my desktop, I use the web interface to explore ALL subfolders via the web interface with "Show Deleted Files" turned on to see if anything was deleted that shouldn't have been. Scale this exploration up to an entire file system and I now have to check every folder on my entire operating system to ensure nothing was randomly deleted. To make matters worse, it is hard to tell what files you deleted previously that you actually meant to delete and what files were just recently killed when you created the symbolic link. This problem happens even if you pause syncing on your local machine so there is no escape.
Dropbox provides no web interface sorting or searching features that would help in this scenario and there is no listing of the most recently deleted files through which I could look to check that all is ok. There's no choice, but to be paranoid and check every subfolder. This took a while and I'm sure I probably missed something.
This got me reading a bit more about Dropbox and its limitations.Dropbox's focus is really on ease of use for the average user who pretty much sets up their machine once and keeps it that way forever. As a developer, I have different needs, my filesystem is organized in a particular way I want to preserve. I upgrade distros a lot too so setup on a machine without any files needs to be simple and not cause all the problems I experienced. My cloud storage provider needs to be more focused on durable storage (at the application level, I'm sure Dropbox's system level durable storage design is fine). Nothing should EVER be deleted unless I EXPLICITLY delete it via the web interface or my local system. In the situation I faced in which Dropbox observed a blank folder on my local machine and a folder with files in the cloud, randomly keeping and deleting different subfolders is precisely what I do not want. Dropbox shoud either copy everything to my machine, delete everything but make it easy for me to restore everything with one click, or trigger a conflict that must be manually resolved.
A different approach would be to periodically enter sync mode in which I explicitly approve deletion operations that occurred. I'm using Dropbox as much for its cloud backup functionality as I am for its synchronization abilities, so I'm fine with it being a bit difficult to delete things.
More General Problems
The idea that a web service can delete files on my local machine is inherently unsettling but I accept that risk for the benefits that synchronized file systems provide. This only works as long as I have confidence that my cloud provider is not going to screw things up. I've always been a BIG Fan of Dropbox so these issues have seriously challenged the confidence I have in Dropbox itself. My new approach to Dropbox is one of paranoia, because it seems like folders can disappear at random.
A much better approach for mapping files between folder on different machines is also needed. A GUI approach to allow average users to do the same would be great.
Ideally, I'd love for performing a fresh install to be as easy as booting a new Amazon EC2 instance with installer scripts and setup procedures that recreate my machine state.
Currently there is no service which allows local machines to completely be treated as virtual resources since its a hard problem to solve which has a number of facets.
I'd also really like to see a cloud storage and synchronization provider that completely encrypts data stored on their servers and required both a passphrase and two factor authentication device to unlock it. This is important because providers who encrupt such data CANNOT yeild to judicial orders to divulge private information and therefore respect the rights of users. As it stands, Dropbox's terms of service make it clear that they are able to see user's files, although I've accepted this for years since it is is basically par for the course with web companies these days.
I do understand that the problems with symlinks and any-folder synchronization are core problems in the Dropbox design so they are not trivial fixes at all. In the early days of Dropbox, the decision was made to treat symlinks as files rather than supporting them as symlinks. This was mainly due to Windows compatability issues. What a surprise, Windows is the cause of more misery in the computing world.
Although symlinks on Dropbox provide the magic of intantaneous synchronization between any folders on a group of computers, they are a dangerous beast. There are numerous other pitfalls.
Maybe if you're the sort who keeps the same OS for years this will never affect you, but if you're like me and switching/upgrading Linux distros every 4-8 months or more frequently, filesystem durability between OSs is important. I should not have to check every folder to be sure nothing bad has happened. Next time I update my distro, I'll be sure to copy to an external disk, then to the new machine, and then turn on Dropbox syncing. What I envision as my ideal synchronization and backup service goes beyond what Dropbox currently offers or is likely to offer in the near future. While I'm sticking with Dropbox for now, I'll keep an eye out for cloud storage and synchronization providers that are better suited for my needs.
It could also make an interesting side project...