- <item>
- <title>Migrating Xen virtual machines using LVM to KVM using disk images</title>
- <link>http://people.skolelinux.org/pere/blog/Migrating_Xen_virtual_machines_using_LVM_to_KVM_using_disk_images.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Migrating_Xen_virtual_machines_using_LVM_to_KVM_using_disk_images.html</guid>
- <pubDate>Mon, 22 Nov 2010 11:20:00 +0100</pubDate>
- <description>
-<p>Most of the computers in use by the
-<a href="http://www.skolelinux.org/">Debian Edu/Skolelinux project</a>
-are virtual machines. And they have been Xen machines running on a
-fairly old IBM eserver xseries 345 machine, and we wanted to migrate
-them to KVM on a newer Dell PowerEdge 2950 host machine. This was a
-bit harder that it could have been, because we set up the Xen virtual
-machines to get the virtual partitions from LVM, which as far as I
-know is not supported by KVM. So to migrate, we had to convert
-several LVM logical volumes to partitions on a virtual disk file.</p>
-
-<p>I found
-<a href="http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM">a
-nice recipe</a> to do this, and wrote the following script to do the
-migration. It uses qemu-img from the qemu package to make the disk
-image, parted to partition it, losetup and kpartx to present the disk
-image partions as devices, and dd to copy the data. I NFS mounted the
-new servers storage area on the old server to do the migration.</p>
-
-<pre>
-#!/bin/sh
-
-# Based on
-# http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM
-
-set -e
-set -x
-
-if [ -z "$1" ] ; then
- echo "Usage: $0 &lt;hostname&gt;"
- exit 1
-else
- host="$1"
-fi
-
-if [ ! -e /dev/vg_data/$host-disk ] ; then
- echo "error: unable to find LVM volume for $host"
- exit 1
-fi
-
-# Partitions need to be a bit bigger than the LVM LVs. not sure why.
-disksize=$( lvs --units m | grep $host-disk | awk '{sum = sum + $4} END { print int(sum * 1.05) }')
-swapsize=$( lvs --units m | grep $host-swap | awk '{sum = sum + $4} END { print int(sum * 1.05) }')
-totalsize=$(( ( $disksize + $swapsize ) ))
-
-img=$host.img
-#dd if=/dev/zero of=$img bs=1M count=$(( $disksize + $swapsize ))
-qemu-img create $img ${totalsize}MMaking room on the Debian Edu/Sqeeze DVD
-
-parted $img mklabel msdos
-parted $img mkpart primary linux-swap 0 $disksize
-parted $img mkpart primary ext2 $disksize $totalsize
-parted $img set 1 boot on
-
-modprobe dm-mod
-losetup /dev/loop0 $img
-kpartx -a /dev/loop0
-
-dd if=/dev/vg_data/$host-disk of=/dev/mapper/loop0p1 bs=1M
-fsck.ext3 -f /dev/mapper/loop0p1 || true
-mkswap /dev/mapper/loop0p2
-
-kpartx -d /dev/loop0
-losetup -d /dev/loop0
-</pre>
-
-<p>The script is perhaps so simple that it is not copyrightable, but
-if it is, it is licenced using GPL v2 or later at your discretion.</p>
-
-<p>After doing this, I booted a Debian CD in rescue mode in KVM with
-the new disk image attached, installed grub-pc and linux-image-686 and
-set up grub to boot from the disk image. After this, the KVM machines
-seem to work just fine.</p>
-</description>
- </item>
-