Xen Conversion P2V
1 Introduction
How to remedy the physical deterioration of a server (oldpc) by migrating the OS into a brand new Xen HVM domU.
2 Preparing space for oldpc on the xen server
Create a disk image (20 GB size):
dd if=/dev/zero of=/vieuxpc/vieuxpc.hda.img bs=1024k count=20000
Create a loop device corresponding to the entire disk image:
losetup /dev/loop0 /vieuxpc/vieuxpc.hda.img
Partition the image:
fdisk /dev/loop0
List the created partitions:
fdisk -ul /dev/loop0
Disk /dev/loop0: 20.9 GB, 20971520000 bytes
255 heads, 63 sectors/track, 2549 cylinders, total 40960000 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/loop0p1 63 17591174 8795556 83 Linux
/dev/loop0p2 17591175 19567169 987997+ 82 Linux swap / Solaris
Attach the partitions as loop devices:
losetup -o $((63*512)) /dev/loop1 /vieuxpc/vieuxpc.hda.img
losetup -o $((17591175*512)) /dev/loop2 /vieuxpc/vieuxpc.hda.img
Format: (note that 8795556 is the number of blocks as displayed by fdisk)
mkfs.ext3 /dev/loop1 8795556
mkswap /dev/loop2 987997
3 Copy the data from oldpc
Mount the root partition of oldpc and copy the data:
mount /dev/loop0 /target
mount /dev/sdc2 /source
cd /source
tar cf - . | ( cd /target/ && tar xf -)
Edit /source/boot/grub/menu.lst
to match your partition scheme:
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-5-486 root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.18-5-486
Unmount everything:
umount /target
umount /source
losetup -d /dev/loop{0,1,2}
4 Install the bootloader
Install GRUB on the disk using a GRUB rescue floppy:
cat /usr/lib/grub/stage[12] > floppy.img
Note: Debian users can install grub-disk, a bootable GRUB image preconfigured to boot many operating systems.
qemu -fda floppy.img -hda /vieuxpc/vieuxpc.hda.img -boot a
GNU GRUB version 0.95 (639K lower / 31744K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... no
Running "install /boot/grub/stage1 (hd0) /boot/grub/stage2 p /boot/grub/menu.lst "... succeeded
Done.
grub>
5 Test and put into production
Test everything with qemu:
qemu -hda /vieuxpc/vieuxpc.hda.img
Create the Xen-hvm configuration file (see http://wiki.gcu.info/doku.php?id=unix:xen_hvm for example):
name="vieuxpc"
kernel = "/usr/lib/xen/boot/hvmloader"
builder = "hvm"
vif=['type=ioemu, mac=00:16:3E:00:03:05, bridge=xenbr0']
disk = [ 'file:/vieuxpc/vieuxpc.hda.img,ioemu:hda,w' ]
device_model = "/usr/lib/xen/bin/qemu-dm"
dhcp="dhcp"
memory="256"
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
vnc=1
On first boot, reconfigure the network interface, since the physical interface obviously no longer exists. Instead, you have an emulated ne2000 network card.
Last updated 04 Mar 2008, 17:32 +0200.