How To: Properly Backup a VirtualBox Machine (.VDI)

First of all, these are the instructions for a VirtualBox installation on a Linux host. It may or may not be the same directory structure/commands for Windows or Mac OS X hosts.

Most people don’t realize that making a backup of a VirtualBox Machine (.vdi) is more complex than just copy/paste. If you do that, you’ll soon realize (when it’s too late) that it doesn’t work! This is the proper way to backup your VirtualBox Machine:

VBoxManage clonevdi source destination

VBoxManage clonevdi ~/.VirtualBox/VDI/WindowsXP.vdi ~/WindowsXP_Backup.vdi

NOTE: Although I’m not specifically sure, sometime after Version 2 of this software, the clonedvi command has been replaced with clonehd (see page 108 of the VirtualBox Manual), however, clonedvi will still work as they kept the backwards compatibility.

Then, wait for it to complete. It may take a while depending on the size of your .vdi file (or how much space you allocated towards your virtual machine).
What this actually does is create a new UUID (Universal Unique Identifier) for the cloned VM. This way, you won’t end up with a message similar to this:

A hard disk with UUID {4d749826-6a3f-43ff-90af-42618783bd3a} or with the
same properties (’/home/martin/.VirtualBox/VDI/test.vdi’) is already


DKMS = win


DKMS (by Dell) is included in Ubuntu 8.10, allowing kernel drivers to be automatically rebuilt when new kernels are released. This makes it possible for kernel package updates to be made available immediately without waiting for rebuilds of driver packages, and without third-party driver packages becoming out of date when installing these kernel updates.

My servers, desktop, and laptop all use dkms and I just realized how nice it is. It isn't installed by default on 9.04 desktop edition, but that's easy to resolve. apt-get install dkms


Time Synchronisation with NTP

I just implemented ntpd on one of my virtualbox lamp servers. The time was drifting about an hour a day under heavy load. gg old server. posting this here for future reference.

This page describes methods for keeping your computer's time accurate. This is useful for servers, but is not necessary (or desirable) for desktop machines.

NTP is a TCP/IP protocol for synchronising time over a network. Basically a client requests the current time from a server, and uses it to set its own clock.

Behind this simple description, there is a lot of complexity - there are tiers of NTP servers, with the tier one NTP servers connected to atomic clocks (often via GPS), and tier two and three servers spreading the load of actually handling requests across the internet. Also the client software is a lot more complex than you might think - it has to factor out communication delays, and adjust the time in a way that does not upset all the other processes that run on the server. But luckily all that complexity is hidden from you!

Ubuntu has two ways of automatically setting your time: ntpdate and ntpd.


Ubuntu comes with ntpdate as standard, and will run it once at boot time to set up your time according to Ubuntu's NTP server. However, a server's clock is likely to drift considerably between reboots, so it makes sense to correct the time ocassionally. The easiest way to do this is to get cron to run it every day. With your favourite editor, create a file /etc/cron.daily/ntpdate containing:

ntpdate ntp.ubuntu.com


ntpdate is a bit of a blunt instrument - it can only adjust the time once a day, in one big correction. The ntp daemon ntpd is far more subtle. It calculates the drift of your system clock and continuously adjusts it, so there are no large corrections that could lead to inconsistent logs for instance. The cost is a little processing power and memory, but for a modern server this is negligible.

To set up ntpd:

sudo apt-get install ntp-simple

Changing Time Servers

In both cases above, your system will use Ubuntu's NTP server at ntp.ubuntu.com by default. This is OK, but you might want to use several servers to increase accuracy and resilience, and you may want to use time servers that are geographically closer to you. to do this for ntpdate, change the contents of /etc/cron.daily/ntpdate to:

ntpdate ntp.ubuntu.com pool.ntp.org

And for ntpd edit /etc/ntp.conf to include additional server lines:

I use :

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

via: http://www.pool.ntp.org/zone/us

You may notice pool.ntp.org in the examples above. This is a really good idea which uses round-robin DNS to return an NTP server from a pool, spreading the load between several different servers. Even better, they have pools for different regions - for instance, if you are in New Zealand, so you could use nz.pool.ntp.org instead of pool.ntp.org . Look at http://www.pool.ntp.org/ for more details.

You can also Google for NTP servers in your region, and add these to your configuration. To test that a server works, just type sudo ntpdate ntp.server.name and see what happens.


Install Ruby Rails on Ubuntu 9.04 Jaunty Jackalope

I just found this guys blog post about installing nginx to deploy rails sites. it worked well for me.