A source virtual machine (VM) hosted on a source server is migrated to a
destination VM on a destination server without first powering down the
source VM. After optional pre-copying of the source VM's memory to the
destination VM, the source VM is suspended and its non-memory state is
transferred to the destination VM; the destination VM is then resumed
from the transferred state. The source VM memory is either paged in to
the destination VM on demand, or is transferred asynchronously by
pre-copying and write-protecting the source VM memory, and then later
transferring only the modified pages after the destination VM is resumed.
The source and destination servers preferably share common storage, in
which the source VM's virtual disk is stored; this avoids the need to
transfer the virtual disk contents. Network connectivity is preferably
also made transparent to the user by arranging the servers on a common
subnet, with virtual network connection addresses generated from a common
name space of physical addresses.