Esta é a versão 1.98 do grub-pc + 20100804-5ubuntu3 (Maverick Meerkat).
O instalador do grub2 pode ser instalado em dispositivos de loopback, mas se você montar usando o mapeador de dispositivos, ele ficará confuso e acreditará que possui um esquema LVM, falhando misteriosamente com uma reclamação sobre uma abstração ausente.
Em vez disso, você deve configurar o dispositivo de auto-retorno para a partição mesmo, com um nome que deve corresponder ao padrão "/ dev / loop [0-9]", ou seja, sem qualquer designador de partição no final:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Observe que se você deseja que o grub-mkconfig / update-grub opere neste volume, o loopback da partição deve estar conectado ao loopback do disco em / dev e não diretamente ao arquivo de imagem).
Desde que você usou o fdisk para particionar a imagem, você tem uma tabela de partições no estilo msdos (aka label) e inicializa usando um BIOS. Além de colocar o stage1 / boot.img no MBR, o stage1.5 / core.img será colocado em uma área de incorporação no espaço não particionado (!) A seguir, e deve haver espaço para isso.
O truque agora é informar ao instalador do grub2 através de um mapa de dispositivo como sua configuração de loopback será mapeada para as unidades do BIOS na máquina virtual. (No legado do grub1, isso foi feito diretamente no shell). Você provavelmente está planejando inicializar esta imagem como o primeiro disco, então acho que o mapeamento apropriado seria:
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
Aqui, coloquei o mapa do dispositivo dentro da imagem do disco convidado, para que você possa gerar o arquivo de configuração de inicialização grub.cfg:
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(Lembre-se de que o pós-instalador do pacote grub-pc executará um probe que sobrescreve o mapa do dispositivo (!); Portanto, você deverá escrevê-lo após a instalação e executar o grub-mkconfig / update-grub você mesmo).
Agora execute o instalador a partir do host , apontando para a instalação do convidado:
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
Por fim, desmonte tudo configurado aqui antes de iniciar o qemu na sua imagem:
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0