Coloca o grub no disco virtual

5

Para aprender sobre o processo de inicialização do Linux, coloquei o grub em um arquivo de imagem de disco e tentei inicializar usando o qemu. Eu atualmente não coloquei nenhuma imagem do kernel na unidade apenas grub. Eu instalei o grub usando

kpartx -av mydrive.img
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 mnt/mydrive/
cd mnt/mydrive/boot
grub-install --no-floppy --boot-directory=. -v /dev/loop0

Eu queria percorrer a seqüência de inicialização passo a passo, então eu esperava que o grub afirmasse que o kernel está faltando, então eu quero consertar isso instalando o kernel, e continuo adicionando coisas todo até X.

Agora eu recebo

error: no such device

Mas esperado

error: no configuration file

prompt de resgate do formulário, ls fornece

(hd0) (fd0)

Perguntas:  * Que dispositivo o grub está procurando? Isso é algo que se refere ao sistema host? [Parcialmente resolvido, o UUID é o mesmo que o UUID para o sistema de arquivos virtual]  * Por que o Grub não consegue encontrar o dispositivo?

Tudo funciona bem se eu instalar o grub (e nada além do grub) de um live-cd (eu escolhi o Bodhi-Linux, já que esta é uma pequena distribuição binária) dentro da VM. Será qemu dar a partição de inicialização um uuid diferente, não usado fora?

Aqui está a tabela de partições para o disco virtual:

Disk mydrive.img: 264 MB, 264241152 byte
32 huvuden, 63 sektorer/spår, 256 cylindrar, totalt 516096 sektorer
Enheter = sektorer av 1 · 512 = 512 byte
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Diskidentifierare: 0xebe6ebdb

       Enhet Start     Början        Slut     Block    Id  System
mydrive.img1            2048      516095      257024   83  Linux
    
por user877329 23.10.2014 / 15:30

2 respostas

2

Parece que o módulo para o tipo de partição (eu suponho que uma etiqueta de partição DOS / MBR) não é instalada pelo grub por padrão em core.img .

Use o seguinte para instalar o módulo necessário também:

grub-install --modules part_msdos --root-directory=. /dev/loop0

Em seguida, o grub deve ser capaz de ler a tabela de partições, o sistema de arquivos e, portanto, a instalação contida em mnt/mydrive/boot .

Como resultado, o comando grub ls deve produzir algo como:

(hd0) (hd0,msdos1) (hd0)
    
por 18.06.2015 / 10:21
-1

Por favor note, como Giles apontou, isso se aplica apenas à arquitetura x86.

Antecedentes

Se você quer aprender a ordem correta, você precisa instalar um sistema host no QEMU antes de instalar um kernel. Embora esta abordagem pareça contra intuitiva para aprender sobre o processo de inicialização, é a única maneira de trabalhar. Deixe-me explicar:

Um sistema em execução de qualquer SO tem pelo menos 3 partes:

  1. Um Kernel
  2. Um carregador
  3. O sistema operacional inicializado final.

Os computadores operam em dois modos:

  1. Modo real
  2. Modo Protegido , às vezes mencionado incorretamente como Modo Virtual.

Todos os processadores x86 operam de alguma forma desses dois modos, não importa o quão sofisticados sejam ou com que rapidez operem. Para obter mais informações, consulte a lista à direita dos artigos da WikiPedia que eu vinculei.

Como isso funciona

  1. Todos os computadores são iniciados no modo real.
  2. O
  3. Modo Real faz coisas como Verificar as Configurações da BIOS, certificar-se de que todos os seus Dispositivos estão conectados e Controla o Relógio para o Tempo.
  4. Uma vez Real Mode Conclui a verificação, o controle é passado para o carregador, também conhecido como o bootloader. O bootloader faz exatamente o que o nome indica, carregando apenas pedaços de código suficientes para transferir o controle do PC do Real Mode para o Protected Mode. Alguns Bootloaders conseguem essa transferência no início de sua "aquisição" Alguns fazem no final, mas a maioria faz isso em Estágios. Veja a inicialização .
  5. Depois que o Bootloader concluir o carregamento dos estágios, o sistema operacional poderá lidar de maneira segura e eficiente com todas as outras operações, já que o PC está agora no "Modo Protegido Permanente" até a próxima reinicialização.

Como isso se relaciona com o Grub

Se você observar os arquivos que foram copiados quando instalou o Grub corretamente, verá arquivos contendo o texto Stage. Deve haver 3. Stage1 *, Stage1_5 * e Stage2 *

  1. Estágio1 Carrega boot.img , que está incorporado no MBR / EFI. Está configurado para anexar discos e nas cargas Very end core.img
  2. O Stage1_5 usa core.img para carregar os setores 0-62, comumente chamado de BootSector. Esses setores por convenção não contêm nada e, portanto, os itens colocados neles nunca são sobrescritos ou atualizados automaticamente
  3. Quando o Stage_2 começa, os primeiros 62 setores e o caminho para o seu kernel foram determinados. O Stage_2 carrega o kernel, e seus arquivos auxiliares, mais naturalmente, o Disco de RAM Inicial na memória. O Disco RAM e o Kernel são então descompactados e usados para configurar o sistema e transferir o controle para o sistema operacional Linux escolhido.

Veja GNU Grub

Agora, a razão pela qual eu digo isso é contra-intuitiva: Você não pode começar na Etapa 3 de Como isso funciona e trabalhar na maneira como isso se relaciona com o Grub . Depois que o Estágio1.5 terminar, o Estágio_2 enviará você para um prompt de resgate, como o Kernel e o Disco RAM Inicial, se você tiver um, uma vez descompactado, não terá nenhum dispositivo para configurar, no seu caso hd0 . Além disso, o erro que o Grub está relatando está correto.

error: no such device

está correto porque não há nenhum sistema operacional em hd0 para configuração, portanto, não há nenhum sistema operacional para informar ao Grub Stage_2: "Ei, sou o sistema operacional que precisa ser carregado". Como tal, você deve trabalhar para trás, construindo ou instalando o sistema operacional, instalando um kernel e, finalmente, instalando o Bootloader. No seu caso, você precisa configurar o QEMU para carregar a imagem ISO de um LiveCD como um CD-ROM, em seguida, instalar o sistema operacional no disco virtual hd0 e, em seguida, configurar o carregador de inicialização. Para obter uma lista de LiveCDs, consulte Distribuições principais do DistroWatch . Se você se sentir mais confortável com menos inchaço, tente uma Distribuição Baseada em Fonte, como o Gentoo .

    
por 23.10.2014 / 19:09