Por que o GRUB 2 está inicializando tão lentamente?

Por que o GRUB 2 está inicializando tão lentamente?

Eu tenho uma pequena distribuição Linux incorporada personalizada (criada com OpenEmbedded), que inicializa com GRUB 1.99. O objetivo é que ele inicie rapidamente.

Atualmente diz:

GRUB loading.

por aproximadamente 2+ segundos (isso provavelmente é inevitável). Então:

Welcome to GRUB!

embaixo dele por uma fração de segundo quando terminar de carregar.

(Não há menu ou tempo limite de menu.) A tela é limpa e então:

Booting 'Disk'

por aproximadamente 8 segundos.Este atraso parece que deveria ser evitável.Gostaria muito de saber como fazer para não atrasar aqui.

Em seguida, continua para:

Decompressing Linux... Parsing ELF... done.
Booting the kernel.

E então muito texto de rolagem rápida enquanto o kernel é inicializado.

O arquivo de imagem do kernel tem 1,8 MB e o arquivo de imagem do disco tem 16 MB.

O grub.cfgarquivo se parece com:

set default="0"
set timeout=0

menuentry "Disk" {
    set root=(hd0,1)
    linux /boot/Disk.kernel parport=0x378,7,3 ramdisk_size=16384 root=/dev/ram rw
    initrd /boot/Disk.ext2
}

Em outro disco de inicialização que tenho (em um cartão Compact Flash), tenho exatamente o mesmo kernel e um arquivo de imagem de disco diferente, com 20 MB. O arquivo de configuração também é idêntico, exceto ramdisk_size=20480.Este tem um atraso extremamente longo de 69 segundos no mesmo ponto.Por que é muito mais longo? Felizmente, não preciso usar esse disco de inicialização com frequência. Mas seria bom consertar isso também, já que provavelmente o atraso é causado pela mesma coisa.

Como faço para corrigir esse atraso?O que isso está fazendo? Como alguém depura um bootloader? Vale a pena procurar um bootloader mais leve como o SYSLINUX? A exclusão de alguns dos módulos não utilizados do GRUB 2 melhorará isso? (Como descobrir quais módulos não são utilizados?)

Resumo

Todos os itens a seguir têm exatamente o mesmo kernel Linux 3.2:
Disco flash Ano computador X: imagem de 16 MB, GRUB 1.99,atraso de inicialização é de aproximadamente 8s; a velocidade de leitura do disco A é 20 MB/s.
Disco flash Bno computador X: imagem de 20 MB, GRUB 1.99,atraso de inicialização é de 69s; a velocidade de leitura do disco B é de 20 MB/s.

Disco flash Cno computador Y: imagem de 16 MB, GRUB 0.97,atraso de inicialização é .. extremamente rápido; a velocidade de leitura do disco C é de 16 MB/s.
Observe que o computador Y é semelhante ao computador X, mas um pouco mais lento.
(O monitor nem é rápido o suficiente para mostrar qualquer tela do GRUB. Do ponto em que a tela do BIOS desaparece até a tela de carregamento do kernel Linux aparecer pela primeira vez, ele mostra 4,76s de tela em branco - mas o kernel do Linux já está carregando há pelo menos 1,5s nesse momento, então é mais como 3,2s no máximo para o GRUB fazer seu trabalho. Isso inclui o carregamento do próprio GRUB e o BIOS decidindo de qual unidade inicializar, etc.)
Infelizmente, o GRUB 0.97 como essa instância não é capaz. ser construído repetidamente assim, então não parece uma opção viável (embora fosse bom).

Como faço para tornar o GRUB 2 rápido?

Responder1

EDIT: Afinal, parece que o GRUB2 é o problema neste caso. Mantenho minha resposta original abaixo apenas para referência e como explicação para problemas semelhantes que as pessoas possam ter.


O atraso de inicialização ao qual você está se referindo é o tempo necessário para que o kernel e a imagem initramfs sejam carregados na RAM. A culpa não está no bootloader, mas no tamanho do seu kernel/initramfs e na taxa de transferência de armazenamento (cartão CF).

Você pode testar facilmente a velocidade do seu armazenamento usando dd(se estiver instalado em seu sistema embarcado) ou cat. Basta substituir /dev/sda1abaixo pelo nome do dispositivo de bloco que representa a partição de inicialização naquele sistema (geralmente você pode verificar isso usando o mountcomando).

  • usando dd:dd if=/dev/sda1 of=/dev/null
  • usando cat+ time: time cat /dev/sda1 > /dev/null

(No segundo caso, você precisaria calcular a taxa manualmente.)

Se a sua partição raiz for muito grande para esperar a conclusão dos comandos, basta pressionar Ctrl+ Cdepois de algum tempo (mas não menos que cerca de um minuto, para tornar o teste confiável).

Responder2

Não encontrei a causa da inicialização lenta com o GRUB 2.

Acabei usando o EXTLINUX, que é compacto e rápido, e mais adequado se você não precisa de todos os recursos sofisticados do GRUB 2.

http://www.syslinux.org/wiki/index.php/EXTLINUX

informação relacionada