Esto es con grub-pc versión 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
El instalador de grub2 puede instalarse en dispositivos de bucle invertido, pero si monta usando el mapeador de dispositivos, se confundirá y creerá que tiene un esquema LVM, fallando misteriosamente con una queja sobre una abstracción faltante.
En su lugar, debe configurar el dispositivo loopback para la partición usted mismo, con un nombre que debe coincidir con el patrón "/ dev / loop [0-9]", es decir, sin ningún designador de partición al final:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Tenga en cuenta que si desea que grub-mkconfig / update-grub funcione en este volumen, entonces el loopback de la partición debe estar conectado al loopback del disco en / dev, y no directamente al archivo de imagen).
Como usó fdisk para particionar la imagen, tiene una tabla de partición de estilo msdos (también conocida como etiqueta) y arranca usando un BIOS. Además de poner el stage1 / boot.img en el MBR, el stage1.5 / core.img se colocará en un área de incrustación en un espacio no particionado (!) Siguiendo inmediatamente después, y debe haber espacio para esto.
El truco ahora es decirle al instalador grub2 a través de un mapa de dispositivos cómo su configuración de bucle invertido se asignará a las unidades de BIOS en la máquina virtual. (En el legado de grub1 esto se hizo directamente en el shell). Probablemente esté planeando arrancar esta imagen como el primer disco, por lo que supongo que la asignación adecuada sería:
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
Aquí he puesto el mapa del dispositivo dentro de la imagen del disco invitado, para que pueda generar el archivo de configuración de arranque grub.cfg:
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(Tenga en cuenta que el post-instalador del paquete grub-pc ejecutará una sonda que sobrescribe el mapa del dispositivo (!), Por lo que tendrá que escribirlo después de la instalación y ejecutar grub-mkconfig / update-grub usted mismo).
Ahora ejecute el instalador desde el host , señalando la instalación del invitado:
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
Finalmente, desmonte todo lo configurado aquí antes de iniciar qemu en su imagen:
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0