I documented the following procdure when migrating an 11-yr-old CentOS-3 server system into a KVM virtual machine early last year after its CPU cooling fan finally wore out.
Migrate CentOS-3 physical machine to KVM virtual machine ======================================================== *** CentOS-3 physical machine (source system) *** [root@dragon root]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda2 966M 271M 646M 30% / /dev/hda7 150G 72G 71G 51% /home none 375M 0 375M 0% /dev/shm /dev/hda5 479M 8.2M 446M 2% /tmp /dev/hda3 3.8G 1.6G 2.1G 43% /usr /dev/hda6 74G 32G 38G 46% /var Stop services: # for s in mailman postfix postgrey amavisd clamd cyrus-imapd httpd saslauthd mysqld; do service $s stop done # svc -d /etc/dnscache /etc/dnscache/log Start services: # for s in mysqld saslauthd httpd cyrus-imapd clamd amavisd postgrey postfix mailman; do service $s start done # svc -u /etc/dnscache/log /etc/dnscache *** CentOS 6.5 KVM host *** Network Settings: /etc/sysconfig/network-scripts/ifcfg-br0: --------------- DEVICE=br0 TYPE=Bridge ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=dhcp #IPADDR=202.109.113.88 #PREFIX=24 #GATEWAY=202.109.113.254 --------------- /etc/sysconfig/network-scripts/ifcfg-p4p2: --------------- DEVICE=p4p2 HWADDR=A4:1F:72:81:B6:BE TYPE=Ethernet UUID=4386f3c9-3399-4e74-80b8-74e99f8a5b0a ONBOOT=yes NM_CONTROLLED=no #BOOTPROTO=dhcp BRIDGE=br0 --------------- # service network restart # yum update # yum install rsync vim # yum install kvm libvirt python-virtinst qemu-kvm # reboot virt-manager should be installed in your local computer. It connects to the KVM VNC through ssh. Create LVM logical volumes for the CentOS-3 VM: # pvcreate /dev/sdb1 # vgcreate vg1 /dev/sdb1 # lvcreate -L120G -ncentos3 vg1 Create VM: # virt-install -n centos3 -r 1024 --vcpus=1 --disk path=/dev/vg1/centos3 -c /var/lib/libvirt/images/systemrescuecd-x86-3.8.1.iso --vnc --noautoconsole --os-type linux --accelerate --hvm *** KVM Virtual Machine (target system) *** Boot the VM from systemrescuecd and use it to migrate the entire filesystem from the original CentOS-3 physical machine. # fdisk /dev/sda (sda1 2G linux swap, sda2 120G ext3) # mke2fs -O has_journal,filetype,sparse_super,^ext_attr,^resize_inode,^dir_index \ -I 128 -j -L "/" /dev/sda2 # mount /dev/sda2 /mnt/custom # for p in usr home var; do rsync -e ssh -avx root@dragon.linux-vs.org:/$p/ /mnt/custom/$p/ --exclude "/lost+found/" --delete-excluded --delete done # rsync -e ssh -avx root@dragon.linux-vs.org:/ /mnt/custom/ --exclude-from excludes --delete excludes: /tmp/* /var/* /usr/* /home/* * Right before taking the physical machine offline, rsync filesystem once more after stopping its running services. You can also rsync directly from its hard drive after taking it offline. Install the boot loader and make some adjustments so that the VM can boot from its virtual hard drive: /mnt/custom/boot/grub/devices.map: /dev/hda -> /dev/sda # grub-install --root-directory=/mnt/custom /dev/sda /mnt/custom/boot/grub/grub.conf: modify root device names if necessary /etc/fstab: remove redundant mount points [Reference] 1. http://www.howtoforge.com/virtualization-with-kvm-on-a-centos-6.0-server 2. http://linux.dell.com/files/whitepapers/KVM_Virtualization_in_RHEL_6_made_easy.pdf 3. http://www.braindeadprojects.com/blog/category/virtualization/