Isto é feito com a versão 1.98 + 20100804-5ubuntu3 do grub-pc (Maverick Meerkat).
O instalador do grub2 pode ser instalado em dispositivos loopback, mas se você montar usando o mapeador de dispositivos, ele ficará confuso e acreditará que você tem um esquema LVM, falhando misteriosamente com uma reclamação sobre uma abstração ausente.
Em vez disso, você deve configurar o dispositivo de loopback para a partição, com um nome que deve corresponder ao padrão "/ dev / loop [0-9]", ou seja, sem qualquer designador de partição no end:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Note que se você quiser que o grub-mkconfig / update-grub opere neste volume, em seguida, o loopback de partição deve ser conectado ao loopback do disco em / dev e não diretamente para o arquivo de imagem).
Como você usou o fdisk para particionar a imagem, você tem uma tabela de partições no estilo msdos (também conhecida como 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 (!) Logo após, e deve haver espaço para isso.
O truque agora é dizer ao instalador do grub2 através de um mapa de dispositivos como a configuração de loopback será mapeada para as unidades BIOS na máquina virtual. (No legado grub1 isso foi feito diretamente no shell). Você provavelmente está planejando inicializar essa 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 eu coloquei o mapa de dispositivos dentro da imagem de disco do 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
(Cuidado que o pós-instalador do pacote grub-pc executará teste que sobrescreve o mapa do dispositivo (!), então você terá que 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