I have been using VMWare Fusion on my MBP for a while. I noticed significant performance issues after upgrading to Mavericks. That is when I decided to try out Oracle Virtualbox. More importantly some of the devops I was trying such as Vagrant and Docker did have readily available VMs for Virtualbox. I never bothered to checkout Virtualbox in the past as I owned licenses for VMWare Fusion and VMWare WorkStation. Staying with VMWare was more productive as I can move around VMs between my development environments and Office work environment.
The first step was to getting all my existing VMs running on VirtualBox. I must say that running my SLES and Ubuntu VMs were easier than I thought. All that I need to do was create a new instance and use the same vmdk image from VMWare. By default VirtualBox will use a SATA/SCSI interface for the disk image. It worked well for Unix/Linux virtual machines, but for Windows, I had to forcefully use IDE interface. Do the following for Windows (I tested with 7.x and 8.1) images.
- Once the VM is created, goto settings and Storage
- Delete the SCSI instance associated with your vmdk file
- Add an IDE interface and choose the same vmdk file.
The next configuration required is with respect to Networking. I normally use a NAT’d environment with specific CIDR for all my development VMs. I can access this private network from my host on VMware WorkStation or Fusion. It appears that only way to access services running on Virtualbox image on a private interface is through port forwarding. Even to SSH to to guest OS, you need to forward a host port to 22 on the guest. Thankfully the network configuration dialog in the VM settings provides an option to do that. There is an experimental NetWork Address Translation Service in VirtualBox. I haven’t been able to get that working on my OSX yet.
Shared folder concepts are a little convoluted on VirtualBox. Apparently they disable the ability to create symbolic links in a shared folder due to some bizarre security reasons. You need to enable them manually for each shared folders in each VMs. More importantly, you need to restart the VirtualBox application after enabling them. Given below is the syntax for enabling the creation of symbolic links on a given volume.
VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1
The SHARE_NAME at the end of the parameter should be a full path to the shared folder on your host.
One of the features I liked in VirtualBox is the headless mode. You can run a vm in the background without any UI elements. This saves some memory on your host and typically you can run any linux instances in runlevel 3. Push shift key while clicking on the
Start button or use VBoxManage command line tool to start a VM in a headless mode.
Overall I find the performance of VirtualBox better than Fusion for my workload. I’m also liking the command line tools and programmability via its rich set of APIs. Tune in for more of my VirtualBox experiments.