Difference between revisions of "Sysadmin/Migrate virtual machine"

From Sugar Labs
Jump to navigation Jump to search
Line 1: Line 1:
 
== How to migrate a file-based guest to LVM ==
 
== How to migrate a file-based guest to LVM ==
 +
 +
* First, create the logical volume and attach it to the running VM:
  
 
  treehouse# scp lightwave:/boot/{vmlinuz,initrd}-2.6.31-22-server /srv/vm/kernel/ubuntu/
 
  treehouse# scp lightwave:/boot/{vmlinuz,initrd}-2.6.31-22-server /srv/vm/kernel/ubuntu/
Line 5: Line 7:
 
  treehouse# virsh attach-disk lightwave /dev/treehouse/lightwave-root vdc
 
  treehouse# virsh attach-disk lightwave /dev/treehouse/lightwave-root vdc
 
  treehouse# virsh console lightwave
 
  treehouse# virsh console lightwave
 +
 +
* From within the VM, format the new volume and move things over
  
 
  lightwave# mkfs.ext4 -L lightwave-root -O flex_bg,extent,uninit_bg,sparse_super /dev/vdc
 
  lightwave# mkfs.ext4 -L lightwave-root -O flex_bg,extent,uninit_bg,sparse_super /dev/vdc
Line 13: Line 17:
 
  lightwafe# umount /mnt
 
  lightwafe# umount /mnt
 
  lightwave# ^D
 
  lightwave# ^D
 +
 +
* Then edit the VM configuration to make it boot without GRUB, using externally provided kernel and initrd:
  
 
  treehouse# virsh edit lightwave
 
  treehouse# virsh edit lightwave
Line 32: Line 38:
 
     ...
 
     ...
 
   </devices>
 
   </devices>
 +
 +
* Reboot
  
 
  #treehouse virsh destroy lightwave
 
  #treehouse virsh destroy lightwave

Revision as of 21:49, 14 August 2010

How to migrate a file-based guest to LVM

  • First, create the logical volume and attach it to the running VM:
treehouse# scp lightwave:/boot/{vmlinuz,initrd}-2.6.31-22-server /srv/vm/kernel/ubuntu/
treehouse# virsh vol-create-as treehouse lightwave 10G
treehouse# virsh attach-disk lightwave /dev/treehouse/lightwave-root vdc
treehouse# virsh console lightwave
  • From within the VM, format the new volume and move things over
lightwave# mkfs.ext4 -L lightwave-root -O flex_bg,extent,uninit_bg,sparse_super /dev/vdc
lightwave# tune2fs -c -1 -i 0 /dev/vdc
lightwave# mount /dev/vdc /mnt
lightwave# rsync -PHAXphax --numeric-ids --delete / /mnt/
lightwave# vim /mnt/etc/fstab
lightwafe# umount /mnt
lightwave# ^D
  • Then edit the VM configuration to make it boot without GRUB, using externally provided kernel and initrd:
treehouse# virsh edit lightwave
 <os>
   <type arch='x86_64' machine='pc-0.11'>hvm</type>
   <kernel>/srv/vm/kernel/ubuntu/vmlinuz-2.6.31-22-server</kernel>
   <initrd>/srv/vm/kernel/ubuntu/initrd.img-2.6.31-22-server</initrd>
   <cmdline>console=tty0 console=ttyS0,115200n8 vga=normal root=LABEL=lightwave-root ro</cmdline>
   <boot dev='hd'/>
 </os>
 ...
 <devices>
   ...
   <disk type='block' device='disk'>
     <source dev='/dev/treehouse/lightwave-root'/>
     <target dev='vda' bus='virtio'/>
   </disk>
   ...
 </devices>
  • Reboot
#treehouse virsh destroy lightwave
#treehouse virsh start lightwave --console


How to migrate an LVM-based guest to another host

(untested procedure)

First, shutdown the VM, then do:

mount /dev/treehouse/beamrider-root /mnt
ssh housetree mount /dev/housetree/beamrider-root /mnt
rsync -PHAXphax --delete --numeric-ids /mnt/ housetree:/mnt/
rsync -a /etc/libvirt/qemu/beamrider.xml housetree:/etc/libvirt/qemu/
umount /mnt
ssh housetree umount /mnt

Then log to $OTHERHOST and create the domain in virsh.

Downtime can be reduced to just a few minutes by doing a first rsync iteration from within the VM while it's still running.

Make sure you pass all the fancy switches to rsync or you'll loose information on the copy.