Eu fiz o seguinte:
- criou um arquivo .img vazio com dd
- associou-o a / dev / loop0 com losetup
- criou uma partição nele com o fdisk
- formatou essa partição com mke2fs
- copiou um sistema GNU / Linux personalizado para essa partição
Agora eu gostaria de tornar o arquivo .img inicializável instalando o grub em seu diretório MBR e / boot. Meu objetivo é carregar o arquivo .img com o qemu. Seria melhor se o grub2 fosse usado em vez do legado do grub.
Obrigado.
Respostas:
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:
(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:
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:
(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:
Por fim, desmonte tudo configurado aqui antes de iniciar o qemu na sua imagem:
fonte
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
falha porque não existegrub-mkconfig
ou existe algum binário no disco .img e/mnt
já está montado. Seria ótimo se você o seguisse passo a passo e escrevesse todos os detalhes / comandos.losetup -P
é outra boa maneira de montar uma única partição: stackoverflow.com/a/15200862/895245/usr/sbin/grub-probe: warning: the device.map entry 'hd0,1' is invalid. Ignoring it. Please correct or delete your device.map.
Portanto, esta resposta é inútil.muito obrigado por essas explicações. Integrei sua solução em meus próprios scripts com as seguintes modificações (traduzidas para sua notação / variáveis):
isso funciona pelo menos no aperto do debian. Marque '/boot/grub/grub.cfg' para ver se está correto.
fonte
cat > /mnt/boot/grub/device.map
ser feito no ambiente chroot? Nesse caso, o caminho deve ser/boot/grub/device.map
.Suposições:
Foi assim que iniciei o qemu no menu do GRUB:
Em seguida, o shell do GRUB aparece:
Se você copiou um kernel e um disco ram para / dev / loop0p1, você pode inicializá-lo:
E aqui está o shell padrão do Linux (porque nenhum / sbin / init estava disponível neste caso)
fonte