How to synchronize two instances of a virtual machine to be used in different computers?

I've been using VirtualBox on my desktop for quite a while. Having recently bought a notebook, I want to be able to take my Ubuntu virtual machine with me, and have the changes I do on the notebook propagate to the desktop, and vice-versa, when I arrive/leave home. The host operating system is Windows 7 on both computers, running VirtualBox 4.

My first thought was synchronizing the virtual disk files themselves. My tool of choice would be rsync, more specifically the Cygwin version of it, using the --inplace option to reduce writes as much as possible. But that would be infeasible: it would stop me from ever working separately on the VMs, because rsync would have no way to detect conflicts and merge them properly without knowledge of the filesystems that lie inside the containers.

The next option would be rsyncing the running machines to each other. Would that work without messing up package management? Would I need to do anything manually besides updates like new kernel or drivers? Are there any other solution that could work better?


Solution 1:

Using rsync for bidirectional operations is difficult; I'd suggest you look at unison as an alternative. It will work both ways, and tell you what it is going to do before doing so, and also detect files manipulated concurrently on both sides.

Running the sync outside the VM will have the problems you describe. Results when run inside the VM will greatly depend on what you sync.

  • Synchronizing your home directory should be no problem at all, and should synchronize most of your daily work I presume.
  • Synchronizing package manager data will only make sense if you do a full sync of almost everything, perhaps with a few well-considered exceptions. In a bidirectional sync, this will almost always lead to a conflict, though, so I'd only advise this for an rsync-style approach.
  • Synchronizing /etc as well as your home should synchronize most configuration data and still have little impact on what the package manager does. But if you install some software on one VM, you'll have to manually install it on the other as well, and probably should only sync after doing so, in case the upgrade changed some config file.