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 todas as coisas legais do GRUB 2.
Eu tenho uma pequena distribuição Linux customizada (criada com o OpenEmbedded), que inicializa com o GRUB 1.99. O objetivo é que ele seja iniciado rapidamente.
Atualmente, diz:
GRUB loading.
por ~ 2 + segundos (isso provavelmente é inevitável). Então:
Welcome to GRUB!
sob ele por uma fração de segundo quando terminar de carregar.
(Não há menu ou tempo limite de menu.) Limpa a tela, então:
Booting 'Disk'
por ~ 8 segundos. Esse atraso parece ser evitável. Eu gostaria muito de saber como não atrasar aqui.
Em seguida, continua para:
Decompressing Linux... Parsing ELF... done.
Booting the kernel.
E, em seguida, muitos textos de rolagem rápida quando o kernel é inicializado.
O arquivo de imagem do kernel tem 1,8MB e o arquivo de imagem do disco tem 16MB.
O arquivo grub.cfg
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 boot que tenho (em uma placa Compact Flash), eu tenho exatamente o mesmo kernel, e um arquivo de imagem de disco diferente, com 20MB. O arquivo de configuração também é idêntico, exceto que 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 presumivelmente o atraso é causado pela mesma coisa.
Como corrijo esse atraso? O que está acontecendo? Como se faz para depurar um gerenciador de inicialização? Vale a pena olhar para um gerenciador de inicialização mais leve como o SYSLINUX? A exclusão de alguns dos módulos GRUB 2 não utilizados melhorá-lo? (Como alguém descobre quais módulos não são usados?)
Resumo
Todos os itens a seguir possuem exatamente o mesmo kernel do Linux 3.2:
Disco flash A no computador X: imagem de 16 MB, GRUB 1.99, atraso de inicialização é ~ 8s ; velocidade de leitura do disco A é 20MB / s.
Disco flash B no computador X: 20MB imagem, GRUB 1.99, atraso de inicialização é 69s ; velocidade de leitura do disco B é de 20MB / s.
Disco flash C no computador Y: imagem de 16 MB, GRUB 0,97, atraso de inicialização é extremamente rápido ; velocidade de leitura do disco C é 16MB / s.
Observe que o computador Y é semelhante ao computador X, mas um pouco mais lento.
(O monitor não é rápido o suficiente para mostrar qualquer tela do GRUB. Do ponto da tela da BIOS desaparecendo para a tela de carregamento do kernel do Linux aparecendo pela primeira vez, ele mostra 4.76s de tela em branco - mas o kernel Linux já está carregando pelo menos 1,5s, então é mais ou menos 3,2s no máximo para o GRUB fazer isso. Isso inclui o carregamento do próprio GRUB e a decisão do BIOS de qual drive inicializar, etc.)
Infelizmente, o GRUB 0.97, como esse exemplo, não pode ser compilado de forma repetitiva, portanto, não parece ser uma opção viável (embora seja interessante).
Como faço o GRUB 2 rápido?
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 todas as coisas legais do GRUB 2.
EDIT: Parece que o GRUB2 é o problema neste caso, afinal. Estou mantendo minha resposta original abaixo apenas como 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, é no tamanho do seu kernel / initramfs e taxa de armazenamento (cartão CF).
Você pode testar facilmente a velocidade do seu armazenamento usando dd
(se você o instalou no sistema incorporado) ou cat
. Apenas substitua /dev/sda1
abaixo pelo nome do dispositivo de bloco que representa a partição de inicialização nesse sistema (geralmente é possível verificar isso usando o comando mount
).
dd
: dd if=/dev/sda1 of=/dev/null
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 aguardar o término dos comandos, pressione Ctrl + C após algum tempo (mas não menos que um minuto, para tornar o teste confiável).
Tags boot grub2 boot-loader embedded