Amorcer ses DomU avec son propre noyau (pyGrub)

Depuis sa version 4, Xen intégre dans ses outils pyGrub, un script python permettant d’émuler Grub depuis le DomU et de charger un noyau indépendant du dom0.

Présentation rapide

pyGrub permet d’émuler Grub pour les machines virtuelles Xen (domU). Pour le moment seule la version 1 de Grub est supportée (autrement nommé Grub Legacy).

Lors du démarrage de la machine virtuelle, pyGrub va interpréter le contenu du fichier /boot/grub/menu.lst du domU.et démarrer la VM selon ces informations.

On isole ainsi les différents noyaux des VM et de l’hyperviseur. Les VM ne sont plus dépendantes de l’hyperviseur pour démarrer et ont leur propre contexte de démarrage.

Monté du DomU

Si le système n’est pas démarré on doit monter d’abord la partition dans dom0.
Pour s’affranchir de l’écosystème lvm dans le domU on peut virtualiser la partition au niveau du dom0
Si la racine du domU est sur la partition xvda2

xl block-attach 0 phy:/dev/vg0/domU-disk xvda2
mount /dev/xvda2 /mnt/domU
cd /mnt/domU
mount --bind /dev dev/
mount --bind /sys sys/
mount --bind /proc proc/
mount --bind /dev/pts dev/pt
chroot /mnt/domU

Note : pour démonter

umount /dev/pts
umount /dev/
umount /sys/
umount /proc/
xl block-detach 0 xvda2

Installation Coté DomU

Coté domU, il s’agit principalement d’installer et configurer grub legacy.

Comme grub est émulé coté domU, on pourrait ne créer que le fichier /boot/grub/menu.lst.
Cette solution n’est pas retenue ici car l’idée est de limiter autant que possible les actions de maintenance, de suivi, mise à jours, ....

Comme l’indique la documentation de Grub, il est necessaire d’avoir au préalable le répertoire /boot/grub. Voici ce que cela donne avec une VM de type Debian :

mkdir /boot/grub/
apt-get install grub-legacy
update-grub default

Ainsi nous avons grub legacy d’installé avec un menu.lst généré dynamiquement. Petite remarque à chaque mise à jour du noyau, Grub actualisera de lui même ce fichier.

La seconde étape consiste à installer un kernel, n’oublions pas que nous dépendons de Xen. Par exemple toujours avec la même VM de test :

apt-cache search linux-image xen
linux-headers-2.6.26-2-xen-686 - Header files for Linux 2.6.26-2-xen-686
linux-image-2.6.26-2-xen-686 - Linux 2.6.26 image on i686, oldstyle Xen support
linux-image-2.6-xen-686 - Linux 2.6 image on i686, oldstyle Xen support
linux-image-xen-686 - Linux image on i686, oldstyle Xen support

apt-get install linux-image-xen-686 
ou 
apt-get install linux-image-amd64

Nous pouvons vérifier la présence et le contenu de /boot/grub/menu.lst

Spécificité de pyGrub

pyGrub ne reconnait que l’ancienne déclaration des partitions soit (hdx,y). Cependant update-grub génere par défaut la forme (/dev/xvdaX).
Nous devons donc mettre à jour le fichier /boot/grub/menu.lst et remplacer par exemple (/dev/xvda2) par (hd0,0)

Il est à noter que pyGrub charge la première partition définie dans le fichier de configuration du domU. Ainsi dans l’exemple précédent xvda2 est la première partition indiquée dans la variable disk.

Vérifier la bonne configuration

Pour vérifier la configuration du domU, il est possible d’exécuter pyGrub directement en ligne de commande.

/usr/lib/xen-default/bin/pygrub /dev/raid/ma_domU-disk

Si tout va bien, on obtient un résultat comme celui ci :

Si ce n’est pas le cas, il faut revoir les points précédents.

Mettre à jour la configuration Dom0

La dernière étape consiste à indiquer au dom0 de charger le kernel du domU.
Dans le fichier de configuration du domU, nous :

  • retirons les références à kernel et ramdisk
  • ajoutons bootloader = ’/usr/lib/xen-default/bin/pygrub’

Lancer la VM

Et maintenant l’instant de vérité avec :

xm create /etc/xen/ma_domU.cfg -c

Et zou !!!

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.