I helped to write virt-v2v[1], and one difficulty is changing the kernel config / Windows registry config / drivers / etc so the guest can be booted on another hypervisor (Amazon is Xen-based, VMware and KVM are completely different and need different drivers). You have to delve into the filesystem using libguestfs, and make some pretty complex changes.
As you say, the other difficulty is copying gigabytes of data across clouds. My colleague at Red Hat wrote snap[2] which can turn Linux guests into digests (basically a base distro name and list of packages and list of config changes), so this can be reduced massively. We're currently extending this work to support Windows and more Linux guest types.
As you say, the other difficulty is copying gigabytes of data across clouds. My colleague at Red Hat wrote snap[2] which can turn Linux guests into digests (basically a base distro name and list of packages and list of config changes), so this can be reduced massively. We're currently extending this work to support Windows and more Linux guest types.
[1] http://libguestfs.org/virt-v2v
[2] http://mo.morsi.org/blog/node/347