Como se constatou, eu realmente estava faltando um módulo, mais especificamente um driver de disco, ou seja, biosdisk
:
Do OSDev Wiki:
biosdisk - This module is required for GRUB 2 to be able to boot from a LiveCD.
Eu tenho uma imagem HDD de 1Gb (criada usando bximage para Bochs), na qual desejo instalar o Grub 2.
Eu entendo que uma instalação do Grub consiste em 3 partes:
Primeiro eu uso uma imagem boot.img que dentro do meu próprio diretório Linux / boot / grub /.
Após isso, eu gero minha imagem core.img usando o seguinte comando:
sudo grub-mkimage -v --format=i386-pc -o core.img -p\(hd0,msdos1\)/boot/grub ls ext2 part_msdos
E para instalá-los na imagem de disco final, eu uso os seguintes comandos:
sudo dd if=boot.img of=/dev/loop0 bs=446 count=1
o 446 blocksize é usado para não sobrescrever Os dados da partição que residem dentro do MBR
sudo dd if=core.img of=/dev/loop0 bs=512 seek=1
e aqui, seek=1
é para não sobrescrever o MBR que acabou de ser escrito. O disco, a partir do setor 2048 até o último, é formatado com uma partição ext2 e contém um diretório boot / grub / contendo um grub.cfg (com uma única entrada de menu falsa que não carrega nada) e módulos no diretório / boot / grub / i386-pc /.
Bochs inicializa com sucesso esta instalação do grub até o grub > pronto. Como Este guia do Ubuntu aponta, este comportamento indica que o grub.cfg não foi encontrado.
Ao invocar ls
, me deparo com um problema interessante - aparentemente não tenho nenhum dispositivo conectado!
Para detalhar ainda mais a natureza do problema, observei que ao inicializar uma imagem grub-mkrescue
de uma unidade escrava, invocar ls
exibia sua própria unidade de resgate, e a unidade anterior unidade de disco principal "existente", juntamente com a partição ext2. Eu verifiquei que /boot/grub.cfg poderia de fato ser acessado.
A partir dessa observação, presumo que meu próprio core.img está faltando algum módulo ou funcionalidade fundamental. Mas qual, e como eu alteraria isso?
Eu também realizei este exercício em uma máquina física usando um pendrive, e exatamente a mesma coisa aconteceu, então posso confirmar que o problema não é com o Bochs.
Como se constatou, eu realmente estava faltando um módulo, mais especificamente um driver de disco, ou seja, biosdisk
:
Do OSDev Wiki:
biosdisk - This module is required for GRUB 2 to be able to boot from a LiveCD.
Embora o autor original tenha encontrado uma razão para o fracasso de seu caso e o tenha compartilhado com o restante da comunidade, encontrei outro problema que causa exatamente o mesmo comportamento:
ls
invocado no shell de recuperação do grub não gera dispositivos.
Se, por algum motivo, *.mod
arquivos forem removidos das informações de símbolo vital, grub-install
silenciosamente criará core.img
, mas que core.img
não poderá usar nenhum módulo compactado.
Mesmo essa opção de remoção "inofensiva" como --strip-unneeded
resulta na perda de dois símbolos importantes grub_mod_init
e grub_mod_fini
. Sem estes símbolos, os módulos do grub são carregados mas não inicializados e, portanto, são inutilizáveis.
Se você realmente quiser remover os módulos do grub, adicione a linha de comando -K grub_mod_init -K grub_mod_fini
to strip's
.
Tags grub2