Por acaso, parece um bug no pacote do debian de grub .
A abordagem -kernel grub.img funciona se eu incluir apenas os módulos grub de que preciso em grub-mkimage .
O -bios grub.bin funciona com o novo pacote grub de experimental (2.00-7). No entanto, o grub.bin que vem com ele não é muito útil.
Ele vem com um memdisk que vem com o grub.cfg . Teria sido melhor usar esse memdisk para manter os módulos e o grub.cfg ser especificado com a opção -c de grub-mkimage . Por exemplo, uma das entradas do menu procura /boot/grub/grub.cfg e se encontra no memdisk como resultado. Além disso, o pacote debian não inclui os módulos do grem do qemu, portanto você não pode construir um grub.bin diferente (embora possa editar o arquivo binário para alterar o grub.cfg), a menos que você o faça a partir do pacote fonte. / p>
A abordagem -bios grub.bin parece a abordagem mais limpa para mim, mas usarei a abordagem -kernel ou floppy até que o pacote debian seja corrigido.
EDIT : bem, o módulo ata.mod grub para ler unidades IDE emuladas é muito mais lento do que usar biosdisk.mod em combinação com seabios (o BIOS padrão quando não está usando -bios grub.bin ). Além disso, parece que o firmware do grub não suporta discos virtio-blk nem virtio-scsi, portanto kvm -bios grub.bin não será uma opção para mim.
Caso alguém queira seguir esse caminho, estou usando agora (sintaxe zsh):
grub-mkimage -O i386-pc -c =(print -l serial 'terminal_input serial' \
'terminal_output serial' 'set prefix=(hd0)/boot/grub' '. grub.cfg') -o grub.img \
at_keyboard configfile biosdisk ext2 linux test serial halt minicmd terminal cat
E -kernel grub.img -nographic passou para o kvm. Isso é para inicializar VMs Linux sem gráficos (apenas uma interface serial, então certifique-se de que o grub da VM esteja configurado para usar serial (ou pelo menos não configurado para usar gráficos), que o console do kernel vá para ttyS0 e que você rode um getty lá). Ele pode ser facilmente adaptado para trabalhar também em consoles VGA.