¿Por qué GRUB 2 arranca tan lentamente?

¿Por qué GRUB 2 arranca tan lentamente?

Tengo una pequeña distribución de Linux integrada personalizada (creada con OpenEmbedded), que arranca con GRUB 1.99. El objetivo es que arranque rápido.

Actualmente dice:

GRUB loading.

durante ~2+ segundos (esto probablemente sea inevitable). Entonces:

Welcome to GRUB!

debajo de él durante una fracción de segundo cuando haya terminado de cargarse.

(No hay menú ni tiempo de espera del menú). Se borra la pantalla y luego:

Booting 'Disk'

durante ~8 segundos.Este retraso parece que debería ser evitable.Me gustaría mucho saber cómo hacer para que no se demore aquí.

Luego continúa con:

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

Y luego mucho texto que se desplaza rápidamente a medida que arranca el kernel.

El archivo de imagen del kernel es de 1,8 MB y el archivo de imagen del disco es de 16 MB.

El grub.cfgarchivo se parece a:

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
}

En otro disco de arranque que tengo (en una tarjeta Compact Flash), tengo exactamente el mismo kernel y un archivo de imagen de disco diferente, que tiene 20 MB. El archivo de configuración también es idéntico, excepto que ramdisk_size=20480.Éste tiene un retraso extremadamente largo de 69 segundos en ese mismo punto.¿Por qué es mucho más largo? Afortunadamente, no necesito usar ese disco de arranque con frecuencia. Pero sería bueno solucionarlo también, ya que presumiblemente el retraso se debe a lo mismo.

¿Cómo soluciono este retraso?¿Qué está haciendo? ¿Cómo se puede depurar un gestor de arranque? ¿Vale la pena buscar un gestor de arranque más liviano como SYSLINUX? ¿Lo mejorará si elimina algunos de los módulos de GRUB 2 no utilizados? (¿Cómo saber qué módulos no se utilizan?)

Resumen

Todos los siguientes tienen exactamente el mismo kernel Linux 3.2:
Disco flash Aen la computadora X: imagen de 16 MB, GRUB 1.99,el retraso de arranque es ~8s; La velocidad de lectura del disco A es de 20 MB/s.
Disco flash Ben la computadora X: imagen de 20 MB, GRUB 1.99,el retraso de arranque es 69s; La velocidad de lectura del disco B es de 20 MB/s.

Disco flash Cen la computadora Y: imagen de 16 MB, GRUB 0.97,El retraso en el arranque es... extremadamente rápido.; La velocidad de lectura del disco C es de 16 MB/s.
Tenga en cuenta que la computadora Y es similar a la computadora X, pero un poco más lenta.
(El monitor ni siquiera es lo suficientemente rápido como para mostrar ninguna pantalla de GRUB. Desde el momento en que desaparece la pantalla del BIOS hasta que aparece por primera vez la pantalla de carga del kernel de Linux, muestra 4,76 s de pantalla en blanco, pero el kernel de Linux ya se ha estado cargando durante al menos 1,5 segundos para ese momento, por lo que es más bien 3,2 segundos como máximo para que GRUB haga su trabajo. Esto incluye la carga del propio GRUB y la decisión del BIOS desde qué unidad arrancar, etc.)
Desafortunadamente, GRUB 0.97 como esa instancia no puede. construirse repetidamente de esa manera, por lo que no parece una opción factible (aunque sería bueno).

¿Cómo hago que GRUB 2 sea rápido?

Respuesta1

EDITAR: Parece que GRUB2 es el problema en este caso, después de todo. Mantengo mi respuesta original a continuación solo como referencia y como explicación para problemas similares que puedan tener las personas.


El retraso de arranque al que se refiere es el tiempo necesario para que el kernel y la imagen initramfs se carguen en la RAM. La culpa no es del gestor de arranque, sino del tamaño de su kernel/initramfs y del rendimiento del almacenamiento (tarjeta CF).

Puede probar fácilmente la velocidad de su almacenamiento usando dd(si lo tiene instalado en su sistema integrado) o cat. Simplemente sustitúyalo /dev/sda1a continuación con el nombre del dispositivo de bloque que representa la partición de arranque en ese sistema (generalmente puede verificarlo usando el mountcomando).

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

(En el segundo caso, deberá calcular la tarifa manualmente).

Si su partición raíz es demasiado grande para esperar a que finalicen los comandos, simplemente presione Ctrl+ Cdespués de un tiempo (pero no menos de aproximadamente un minuto, para que la prueba sea confiable).

Respuesta2

No encontré la causa del arranque lento con GRUB 2.

Terminé usando EXTLINUX en su lugar, que es compacto y rápido, y más adecuado si no necesitas todas las cosas sofisticadas de GRUB 2.

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

información relacionada