
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.
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.cfg
werden 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-mkconfig
dieses 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.