¿Qué hace GRUB mientras tarda 9 minutos en iniciar el arranque del kernel?

¿Qué hace GRUB mientras tarda 9 minutos en iniciar el arranque del kernel?

Últimamente (al menos las últimas 2 veces que encendí la PC) noté que grub tarda una eternidad en arrancar. Calculé el tiempo de casi 9 minutos entre que desaparecen los mensajes del BIOS y aparece el registro del kernel en la pantalla.

La pregunta es ¿cómo puedo saber qué está haciendo o esperando grub? ¿Cómo puedo comprobar que grub está bien?

Hace unos días eliminé la pantalla de presentación para ver el registro de texto en cada arranque. La mayoría de las veces es rápido y normal. Durante esos 9 minutos el monitor recibe señal, pero es solo una pantalla negra. NumLock no responde, todo parece estar congelado, pero no lo está.

Tengo / en un software raid1 desde 2009 al menos.

La redada se reporta saludable. Durante esos minutos hay alguna actividad menor en el disco duro en el primer minuto. Los datos SMART del disco duro están en buen estado. El cierre del día anterior fue normal.

He tenido todas las versiones de Ubuntu instaladas en esta computadora desde 8.04. Tengo instalado el 12.10 desde octubre. No hay nada nuevo en esta computadora, ni discos duros nuevos, ni cambios en la configuración del BIOS.

No hay un registro de grub que yo sepa y el registro del kernel no es interesante porque dice que el kernel arrancó en 28 segundos [kernel PhenomX4: [28.825313] vboxpci: IOMMU no encontrado (no registrado)], por lo que los 9 minutos son antes de que se iniciara el kernel.

*Actualización: 27 de marzo *

Encontré el problema, pero aún no sé la causa. El problema era que /boot/grub/grub.cfg ocupaba 11,6 MB y tenía entradas como esta repetidas muchas veces con ligeras variaciones. Grub se estaba ahogando con un archivo tan grande para crear su menú.

menuentry 'Ubuntu 12.10 (12.10) (en /dev/sda1) (en /dev/sda1) (en /dev/sdb1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/vmlinuz--73e06880-5f46-4493-aaef-23fa4ad138f6' {
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  73e06880-5f46-4493-aaef-23fa4ad138f6
    else
      search --no-floppy --fs-uuid --set=root 73e06880-5f46-4493-aaef-23fa4ad138f6
    fi
    linux /vmlinuz root=/dev/sda1
    initrd /initrd.img
}

¿Aún no sabes por qué ese archivo creció tanto?

Actualización 28 de marzo

Una gran parte de las entradas del menú las genera /etc/grub.d/30_os-prober.

Line 223: ### BEGIN /etc/grub.d/30_os-prober ###
...
Line 175174: ### END /etc/grub.d/30_os-prober ###

grub.cfg tiene 175191 líneas, por lo que el script representa el 99% de los 11,6 MB del archivo.

Respuesta1

Hay una buena herramienta llamada BootChart incluida en los repositorios. También se proporciona un componente de depuración de GRUB. Esto le permitirá perfilar su arranque y, con suerte, descubrir qué está consumiendo esa gran cantidad de tiempo.

ingrese la descripción de la imagen aquí

Respuesta2

Si obtiene todas esas entradas, probablemente haya algo que esté haciendo un bucle en Grub. A mí me pasó algo similar cuando instalé Raring en una partición separada (entradas creadas con escape incorrecto como menuentry "Ubuntu"...). Como dijiste que no cambiaste nada, ¿quizás esto tenga origen en alguna actualización en Grub?

Ese archivo se genera automáticamente (cuando instala un nuevo kernel, por ejemplo) mediante los scripts presentes en /etc/grub.d. Si examinas grub.cfgverás que hay separadores entre las entradas, especificando qué script lo generó. Ejemplo:

### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Ubuntu Raring (on /dev/sda2)" --class gnu-linux --class gnu --class os {
    (...)
}

menuentry 'Steam' --class ubuntu --class gnu-linux {
        (...)
}
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Intente identificar qué script está creando esas entradas (y actualice su respuesta con el nombre del script). Cuando llegue allí, podrá usar sudo grub-mkconfigo ejecutar ese script usando, por ejemplo:

sh -v /etc/grub.d/file

para tratar de identificar lo que está pasando.

Esto no es una solución en absoluto, pero espero que pueda ayudar en algo.

información relacionada