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/drbd
0 (/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à.
i just want to say i like it and thanks.