(P2V = physical to virtual, taking a physical machine and converting it into a virtual machine)
What happens when you have an old server sitting in the corner — the hardware is flaky and you need to set up a virtual equivalent ASAP, but no one can remember how that old server is configured? People will sell you very expensive software to solve this problem for you.
But if you have some time and patience you can do P2V conversions by hand for free, and it’s not too hard. Here’s how.
First of all, grab a bootable Linux rescue CD. A Fedora CD in rescue mode will do just fine, but choose any Linux CD that you’re happy with.
Now you boot your machine from the CD, so that we are in a modern, Linux-based OS. From the Linux command line you will see the physical disks in the machine like
All you do is take each physical disk in turn and copy it complete over to your virtualization host. Just do:
dd if=/dev/sda | ssh root@virthost 'cat > /var/lib/libvirt/images/guest.img'
That makes a block-for-block identical copy of the hard disk, and it usually takes several minutes to an hour to copy everything across, depending how fast the old server and the network is.
Now over to your virtualization host, how do you boot this?
With very recent versions of virt-install there is a
virt-install --import option that you can use to import disk images directly.
Alternately, write a libvirt XML configuration file for the virtual machine. It’s usually best to start off with an existing XML configuration, so just pick another guest at random and do
virsh dumpxml foo. Take that output, modify it suitably, make sure it’s full virt (“hvm”), and boot using:
virsh define guest.xml
Now at this point it may not in fact boot. You might need to edit a few things inside the virtual machine disk image, typically
/etc/fstab, maybe install a new kernel, perhaps edit the network configuration.
Step forward: guestfish and virt-edit.
$ guestfish -i guest.img
$ virt-edit guest.img /etc/fstab
(Note: I am the author of virt-p2v which is currently in a big version 2.0 rewrite).