Ceci est avec la version 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
Le programme d’installation de grub2 peut s’installer sur des périphériques en boucle, mais si vous montez à l’aide du mappeur de périphériques, vous serez confus et croirez que vous avez un schéma LVM, échouant mystérieusement avec une réclamation concernant une abstraction manquante.
Au lieu de cela, vous devez configurer vous-même le périphérique de bouclage pour la partition, avec un nom qui doit correspondre au modèle "/ dev / loop [0-9]", c'est-à-dire sans aucun indicateur de partition à la fin:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Notez que si vous souhaitez que grub-mkconfig / update-grub fonctionne sur ce volume, le bouclage de partition doit être connecté au bouclage de disque sous / dev et non directement au fichier image).
Puisque vous avez utilisé fdisk pour partitionner l’image, vous disposez d’une table de partition de type msdos (aka label) et démarrez à l’aide d’un BIOS. En plus de placer le stage1 / boot.img dans le MBR, le stage1.5 / core.img sera placé dans une zone d'intégration dans un espace non partitionné (!) Juste après, et il doit y avoir un espace pour cela.
L'astuce consiste maintenant à indiquer au programme d'installation grub2, via une carte de périphérique, comment votre configuration de bouclage sera mappée sur les lecteurs BIOS de la machine virtuelle. (Dans Grub1, cela se faisait directement dans la coque). Vous envisagez probablement de démarrer cette image en tant que premier disque. Par conséquent, le mappage approprié serait le suivant:
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
Ici, j'ai placé la carte des périphériques dans l'image du disque invité, de sorte que vous puissiez générer le fichier de configuration de démarrage grub.cfg:
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(Attention, le post-installateur du paquet grub-pc lancera une sonde qui écrasera la carte des périphériques (!). Vous devrez donc l'écrire après l' installation et exécuter vous-même grub-mkconfig / update-grub).
Maintenant, lancez le programme d'installation à partir de l' hôte , en pointant sur l'installation du client:
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
Enfin, démontez tout ce qui est configuré ici avant de lancer qemu sur votre image:
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0