Kernelupdate und Grub2 auf XEN-VMs

Ein XEN basier­ter vSer­ver hat den gro­ßen Vor­teil, dass eige­ne Ker­nel und Modu­le genutzt wer­den können.
Stellt der Pro­vi­der VMs jedoch nur mit Grub 1 zur Ver­fü­gung ver­hin­dert die Aus­gangs­kon­fi­gu­ra­ti­on aber unter Umstän­den das Boo­ten neue­rer Ker­nels, da "update-grub" die "menu.lst" nicht auto­ma­ti­siert anpas­sen kann.

Im Zuge der Kor­rek­tu­ren darf auch auf Grub 2 migriert wer­den. Hier­bei wer­den die Grub-Ein­trä­ge kom­plett neu gene­riert und sicher­ge­stellt, dass auch Hosts, wel­che Grub 2 nicht selbst­stän­dig laden, ent­spre­chend wei­ter­ge­lei­tet wer­den. Even­tu­el­le Feh­ler­mel­dun­gen, wel­che beim Auf­ruf von "update-grub" auf­tre­ten kön­nen igno­riert wer­den, sofern die jeweils letz­te Aus­ga­be den Erfolg des Befehls anzeigt.

Die fol­gen­den Befeh­le bezie­hen sich auf Debi­an v8.x:

apt-get -y install grub-legacy
cp -pR /boot/grub/ /boot/grub_old
rm -rf /boot/grub/*
rm -rf /boot/xen/*
update-grub
apt-get -y purge pv-grub-menu grub-common grub-legacy grub-pc grub2 grub2-common
apt-get -y install grub-xen
grub-install --target=x86_64-xen
sed -i 's/timeout\t\t5/timeout\t\t0/' /boot/grub/menu.lst
sed -i 's/# groot=(hostdisk\/\/dev\/xvda1)/# groot=(hd0,0)/' /boot/grub/menu.lst
nano /boot/grub/menu.lst

Alle Ker­nel in der Lis­te ent­fer­nen und erset­zen durch:

title Chainload Grub 2
root (hd0,0)
kernel /boot/xen/pvboot-x86_64.elf

Abschlie­ßend Grub 2 fer­tig kon­fi­gu­rie­ren lassen:

sed -i 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/' /etc/default/grub
update-grub

Nun kann die VM neu gestar­tet werden.

Optio­nal:
Wenn gewünscht, kann auch "fstab" ange­passt wer­den, sodass gemäß den Richt­li­ni­en von Debi­an v8 UUIDs als Iden­ti­fier genutzt wer­den. "xvda2" wird im fol­gen­den Bei­spiel als Swap gemountet:

sed -i 's/^\/dev\/xvd/#\/dev\/xvd/' /etc/fstab
sed -i 's/^proc/#proc/' /etc/fstab
echo "# /dev/xvda1" >> /etc/fstab
echo -e "$(blkid /dev/xvda1 -s UUID | awk '{print $2}' | sed 's/\"//g')\t/\t\t$(df -T /dev/xvda1 | grep "^/dev" | awk '{print $2}')\terrors=remount-ro\t0\t1" >> /etc/fstab
echo "# /dev/xvda2" >> /etc/fstab
echo -e "$(blkid /dev/xvda2 -s UUID | awk '{print $2}' | sed 's/\"//g')\tnone\t\tswap\tsw\t\t\t0\t0" >> /etc/fstab