
Ich habe eine kleine benutzerdefinierte eingebettete Linux-Distribution (erstellt mit OpenEmbedded), die mit GRUB 1.99 bootet. Das Ziel ist, dass sie schnell startet.
Aktuell heißt es dort:
GRUB loading.
für ~2+ Sekunden (das ist wahrscheinlich unvermeidlich). Dann:
Welcome to GRUB!
für den Bruchteil einer Sekunde darunter, wenn der Ladevorgang abgeschlossen ist.
(Es gibt kein Menü und auch kein Menü-Timeout.) Der Bildschirm wird gelöscht. Dann:
Booting 'Disk'
für ~8 Sekunden.Diese Verzögerung scheint vermeidbar zu sein.Ich wüsste sehr gern, wie ich dafür sorgen kann, dass es hier nicht zu Verzögerungen kommt.
Anschließend geht es weiter mit:
Decompressing Linux... Parsing ELF... done.
Booting the kernel.
Und dann jede Menge schnell scrollender Text, während der Kernel bootet.
Die Kernel-Image-Datei ist 1,8 MB groß und die Disk-Image-Datei 16 MB.
Die grub.cfg
Datei sieht folgendermaßen aus:
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
}
Auf einer anderen Bootdiskette (auf einer Compact Flash-Karte) habe ich genau denselben Kernel und eine andere Disk-Image-Datei, die 20 MB groß ist. Die Konfigurationsdatei ist ebenfalls identisch, außer dass ramdisk_size=20480 ist.Dieses hat an derselben Stelle eine extrem lange Verzögerung von 69 Sekunden.Warum dauert es so viel länger? Zum Glück brauche ich diese Bootdiskette nicht oft. Aber es wäre schön, das auch zu beheben, da die Verzögerung vermutlich durch dieselbe Sache verursacht wird.
Wie behebe ich diese Verzögerung?Was macht es? Wie debuggt man einen Bootloader? Lohnt es sich, stattdessen einen leichteren Bootloader wie SYSLINUX auszuprobieren? Wird es verbessert, wenn man einige der unbenutzten GRUB 2-Module löscht? (Wie findet man heraus, welche Module unbenutzt sind?)
Zusammenfassung
Die folgenden haben alle genau denselben Linux 3.2-Kernel:
Flash-Laufwerk Aauf Rechner X: 16MB Image, GRUB 1.99,Die Startverzögerung beträgt ~8 s; die Lesegeschwindigkeit von Datenträger A beträgt 20 MB/s.
Flash-Disk Bauf Rechner X: 20MB Image, GRUB 1.99,Die Startverzögerung beträgt 69 Sekunden.; die Lesegeschwindigkeit von Datenträger B beträgt 20 MB/s.
Flash-Disk Cauf Rechner Y: 16MB Image, GRUB 0.97,Die Startverzögerung ist ... extrem schnell; die Lesegeschwindigkeit von Datenträger C beträgt 16 MB/s.
Beachten Sie, dass Computer Y Computer X ähnelt, aber etwas langsamer ist.
(Der Monitor ist nicht einmal schnell genug, um überhaupt GRUB-Bildschirme anzuzeigen. Vom Verschwinden des BIOS-Bildschirms bis zum ersten Erscheinen des Linux-Kernel-Ladebildschirms vergehen 4,76 Sekunden leerer Bildschirm – aber der Linux-Kernel ist zu diesem Zeitpunkt bereits seit mindestens 1,5 Sekunden geladen, sodass GRUB maximal 3,2 Sekunden braucht, um seine Arbeit zu erledigen. Dies beinhaltet das Laden von GRUB selbst und die Entscheidung des BIOS, von welchem Laufwerk gebootet werden soll usw.)
Leider kann GRUB 0.97 wie diese Instanz nicht wiederholt auf diese Weise erstellt werden, daher scheint dies keine praktikable Option zu sein (obwohl es schön wäre).
Wie mache ich GRUB 2 schnell?
Antwort1
EDIT: Es scheint, dass in diesem Fall doch GRUB2 das Problem ist. Ich behalte meine ursprüngliche Antwort unten nur als Referenz und als Erklärung für ähnliche Probleme, die Leute haben könnten.
Die von Ihnen erwähnte Bootverzögerung ist die Zeit, die benötigt wird, um den Kernel und das Initramfs-Image in den RAM zu laden. Die Schuld liegt nicht beim Bootloader, sondern an der Größe Ihres Kernels/Initramfs und dem Durchsatz Ihres Speichers (CF-Karte).
Sie können die Geschwindigkeit Ihres Speichers ganz einfach testen, indem Sie entweder dd
(sofern Sie ihn auf Ihrem eingebetteten System installiert haben) oder verwenden cat
. Ersetzen Sie /dev/sda1
unten einfach den Namen des Blockgeräts, das die Startpartition auf diesem System darstellt (normalerweise können Sie das mit dem Befehl überprüfen mount
).
- mit
dd
:dd if=/dev/sda1 of=/dev/null
- mit
cat
+time
:time cat /dev/sda1 > /dev/null
(Im zweiten Fall müssen Sie den Kurs manuell berechnen.)
Wenn Ihre Root-Partition zu groß ist, um auf die Beendigung der Befehle zu warten, drücken Sie nach einiger Zeit einfach Ctrl+ C(aber nicht früher als etwa eine Minute, damit der Test zuverlässig ist).
Antwort2
Ich habe die Ursache für das langsame Booten mit GRUB 2 nicht gefunden.
Ich habe mich letztendlich für die Verwendung von EXTLINUX entschieden. Das ist kompakt und schnell und besser geeignet, wenn Sie nicht den ganzen schicken GRUB 2- Kram benötigen.