Ressource DRBD bootable pour KVM

A ma connaissance, sous KVM, pygrub ne fonctionne pas: une image disque doit posséder un chargeur (GRUB, LILO, etc.) pour pouvoir démarrer.  Voici donc la méthode kivabien™ pour rendre une image disque bootable via GRUB…

Dans mon cas, l’image disque est une ressource DRBD, mais la méthode s’applique à n’importe quelle type d’images (LVM,  fichier image, disque physique).

Activation de la ressource DRBD et partitionnement

 drbdadm primary drbd0

Pour faire simple, on crée une seule partition qui contient le système de fichier « / »

fdisk /dev/drbd0
    n
    p
    1
    
    
    w

Création du système de fichiers

 kpartx -a /dev/drbd0
 mkfs -t ext3 /dev/mapper/drbd0p1
 tune2fs -c0 -i0 /dev/mapper/drbd0p1
 mkdir /mnt/drbd0
 mount /dev/mapper/drbd0p1 /mnt/drbd0

Installation d’un OS minimum:

On recopie le minimum pour pouvoir démarrer, c-a-d un noyau:

cd /mnt/drbd0
mkdir proc sys
find /boot | cpio -pdvmu /mnt/drbd0/
umount /mnt/drbd0

Pour être utile, cette image devrait contenir quelques commandes ou services. Il ne tient qu’a vous de les installer ;)

Installation de GRUB:

Pour s’installer correctement, Grub s’attend à des noms de périphériques du type:

  • /dev/foo -> disque complet
  • /dev/foo1 -> première partition du disque foo
  • /dev/foo2 -> seconde partition du disque foo
  • etc.

Et ce n’est pas le cas dans notre configuration actuelle:

  • /dev/mapper/drbd0 -> disque complet
  • /dev/mapper/drbd0p1 -> première partition du disque foo

On va corrigé ça:

     losetup /dev/loop0 /dev/drbd0
     losetup /dev/loop1 /dev/mapper/drbd0p1

Si /dev/loop1 est la première partition de /dev/drbd0 (/dev/mapper/drbd0p1), /dev/loop doit correspondre au device /dev/drbd0:

     ln -s /dev/loop0 /dev/loop

C’est moche, mais c’est obligatoire, sinon l’installation sort avec une erreur 22. A présent, on peut installer l’amorce:

    grub –device-map=/dev/null
    grub> device (hd0) /dev/loop
    grub> root (hd0,0)
    grub> setup (hd0)
    setup (hd0)
    Checking if "/boot/grub/stage1" exists... yes
    Checking if "/boot/grub/stage2" exists... yes
    Checking if "/boot/grub/e2fs_stage1_5" exists... yes
    Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.  succeeded
    Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p
                       (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded  Done.
    grub>

On nettoie tout avant de partir:

   losetup -d /dev/loop0
   losetup -d /dev/loop1
   rm -f /dev/loop
   kpartx -d /dev/drbd0

Et voilà.

Liens:

One thought on “Ressource DRBD bootable pour KVM

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>