Was macht GRUB, während es 9 Minuten dauert, bis der Kernel gestartet wird?

Was macht GRUB, während es 9 Minuten dauert, bis der Kernel gestartet wird?

In letzter Zeit (zumindest die letzten beiden Male, als ich den PC eingeschaltet habe) ist mir aufgefallen, dass Grub ewig zum Booten braucht. Ich habe fast 9 Minuten gemessen, zwischen dem Verschwinden der BIOS-Meldungen und dem Erscheinen des Kernel-Protokolls auf dem Bildschirm.

Die Frage ist, wie kann ich wissen, was Grub tut oder wartet? Wie kann ich überprüfen, ob Grub in Ordnung ist?

Vor ein paar Tagen habe ich den Begrüßungsbildschirm entfernt, sodass ich bei jedem Systemstart das Textprotokoll sehe. Meistens läuft es schnell und normal. Während dieser 9 Minuten empfängt der Monitor ein Signal, aber es ist nur ein schwarzer Bildschirm. NumLock reagiert nicht, das Ganze scheint eingefroren zu sein, ist es aber nicht.

Ich habe/betreibe seit mindestens 2009 ein Software-RAID1.

Der RAID wird als intakt gemeldet. Während dieser Minuten gibt es in der ersten Minute geringfügige Festplattenaktivität. Die SMART-Daten der Festplatte sind intakt. Das Herunterfahren am Vortag verlief normal.

Auf diesem Computer sind alle Ubuntu-Versionen seit 8.04 installiert. Seit Oktober ist 12.10 installiert. Auf diesem Computer gibt es nichts Neues, keine neuen Festplatten, keine Änderungen in den BIOS-Einstellungen.

Soweit ich weiß, gibt es kein Grub-Protokoll und das Kernel-Protokoll ist nicht interessant, weil dort steht, dass der Kernel in 28 Sekunden gebootet wurde [PhenomX4-Kernel: [28.825313] vboxpci: IOMMU nicht gefunden (nicht registriert)]. Die 9 Minuten liegen also vor dem Start des Kernels.

*Update: 27. März *

Ich habe das Problem gefunden, kenne aber immer noch nicht die Ursache. Das Problem war, dass /boot/grub/grub.cfg 11,6 MB groß war und Einträge wie diesen viele Male mit leichten Abweichungen wiederholte. Grub war bei der Erstellung seines Menüs an einer so großen Datei überfordert.

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
}

Sie wissen immer noch nicht, warum die Datei so groß geworden ist?

Update 28. März

Ein großer Teil der Menüeinträge wird von /etc/grub.d/30_os-prober generiert.

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

grub.cfg hat 175191 Zeilen, sodass dieses Skript 99 % der 11,6 MB in der Datei darstellt.

Antwort1

In den Repositories ist ein nettes Tool namens BootChart enthalten. Es verfügt auch über eine GRUB-Debug-Komponente. Damit können Sie Ihr Boot-Profil erstellen und hoffentlich herausfinden, was so viel Zeit in Anspruch nimmt.

Bildbeschreibung hier eingeben

Antwort2

Wenn Sie alle diese Einträge erhalten, gibt es wahrscheinlich etwas, das eine Schleife in Grub verursacht. Mir ist etwas Ähnliches passiert, als ich Raring auf einer separaten Partition installiert habe (durch fehlerhaftes Escapen wurden Einträge wie erstellt menuentry "Ubuntu"...). Wie Sie sagten, haben Sie nichts geändert, vielleicht liegt dies an einem Update in Grub?

Diese Datei wird automatisch (wenn Sie beispielsweise einen neuen Kernel installieren) von den in vorhandenen Skripten generiert /etc/grub.d. Wenn Sie sie genauer untersuchen, grub.cfgwerden Sie feststellen, dass zwischen den Einträgen Trennzeichen stehen, die angeben, welches Skript sie generiert hat. Beispiel:

### 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 ###

Versuchen Sie also herauszufinden, welches Skript diese Einträge erstellt (und aktualisieren Sie Ihre Antwort mit dem Skriptnamen). Wenn Sie dort angekommen sind, können Sie sudo grub-mkconfigdieses Skript verwenden oder ausführen, beispielsweise mit:

sh -v /etc/grub.d/file

um herauszufinden, was los ist.

Dies ist zwar keine Lösung, aber ich hoffe, dass es irgendwie helfen kann.

verwandte Informationen