Setze den Standardkernel in GRUB


49

Wie kann ich auswählen, welcher Kernel GRUB2 standardmäßig geladen werden soll? Ich habe kürzlich einen Linux-Echtzeit-Kernel installiert und jetzt wird er standardmäßig geladen. Ich möchte standardmäßig die reguläre Version laden.

Bisher konnte ich nur das Standard-Betriebssystem auswählen. Aus irgendeinem Grund wird /boot/grub.cfgbereits davon ausgegangen, dass ich den RT-Kernel laden und in den allgemeinen Linux-Menüeintrag einfügen möchte (in meinem Fall Arch Linux).


2
grub2-set-default <Titel oder Nummer>?
Taliezin

1
Aber woher kenne ich die Nummer? Die Zahlen in grub.cfgentsprechen nur den Betriebssystemen und nicht den Kerneln.
TomTom

In einigen Fällen funktioniert dies wie folgt : askubuntu.com/questions/216398/… Die Menünamen finden Sie in der folgenden Datei: /boot/grub/grub.cfg
TekOps

Antworten:


41

Ich denke, die meisten Distributionen haben zu diesem Zeitpunkt zusätzliche Kernel in das Untermenü für erweiterte Optionen verschoben, wie TomTom bei seinem Arch herausgefunden hat.

Ich wollte meine Menüstruktur auf oberster Ebene nicht ändern, um einen vorherigen Kernel als Standard auszuwählen. Ich habe die Antwort hier gefunden:

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

Zusammenfassen:

1) Finden Sie die $menuentry_id_Option für das Untermenü:

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2) Suchen Sie $menuentry_id_optionnach dem Menüeintrag für den Kernel, den Sie verwenden möchten:

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3) Kommentieren Sie Ihr aktuelles Standard-Grub-In aus /etc/default/grubund ersetzen Sie es durch das Untermenü $menuentry_id_optionaus Schritt eins und das ausgewählte Kernel $menuentry_id_optionaus Schritt zwei, getrennt durch >.

In meinem Fall ist der modifizierte GRUB_DEFAULT:

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4) Aktualisiere grub, um die Änderungen vorzunehmen. Für Debian ist das so:

$ sudo update-grub

Getan. Wenn Sie jetzt booten, sollte das erweiterte Menü einen Stern haben und Sie sollten den ausgewählten Kernel booten. Sie können dies mit uname bestätigen.

$ uname -a
Linux NAME 4.18.0-0.bpo.1-amd64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

Das Ändern auf den neuesten Kernel ist so einfach wie das #GRUB_DEFAULT=0Auskommentieren der neuen Zeile und das Entfernen des Kommentars und das erneute Ausführen update-grub.


31

Nachdem ich 2 Stunden gekämpft habe, habe ich einen viel einfacheren Weg gefunden, dies zu erreichen. Ich habe gerade RTFM. ;)

Fügen Sie zwei Zeilen zu / etc / default / grub hinzu

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Führen Sie den sudo update-grubNeustart durch, wechseln Sie in Ihr Grub-Menü und wählen Sie das gewünschte Menü oder Untermenü aus. Die Auswahl wird gespeichert und beim nächsten Start Ihres Computers automatisch gestartet.


2
Wunderbar! So einfach!
Egor Skriptunoff

Oh, so viel einfacher. Danke.
User207863

21

Wie in den Kommentaren erwähnt, können Sie den Standard-Kernel zum Booten mit dem grub-set-default XBefehl festlegen , wobei X die Nummer des Kernels ist, in den Sie booten möchten. In einigen Distributionen können Sie diese Nummer auch festlegen, indem Sie die /etc/default/grubDatei und die Einstellung bearbeiten GRUB_DEFAULT=Xund dann ausführen update-grub.

Die Zahl ist der Index für ein Array von Kernel- / Kernel-Einstellungen, die während des Startvorgangs im GRUB-Menü angezeigt werden, wobei 0 der erste (oberste) Eintrag ist. Normalerweise finden Sie die richtige Nummer, indem Sie nach menuentryZeilen in der folgenden Reihenfolge suchen /boot/grub/grub.cfg:

grep menuentry /boot/grub/grub.cfg

Sie sehen jeden Kernel mit dem Namen, der im GRUB-Startmenü angezeigt wird. Der erste ist 0, der zweite ist 1 und so weiter.


1
In Fedora 21 ist es /boot/grub2/grub.cfg.
etwas, etwas

3
Das funktioniert bei mir nicht. Der neueste Kernel in meiner Installation ist 4.4.0-64-generisch (Menüeintrag 0), aber ich möchte, dass 4.4.0-59-generisch (Menüeintrag 9) der Standard-Boot-Kernel ist. Ich lief grub-set-default 9und dann grub-updateund startete neu. Ich habe grub mit dem Standard-Kernel booten lassen und es bootet immer noch mit 4.4.0-64-generic . Ich habe auch versucht zu bearbeiten /etc/default/grubund zu setzen GRUB_DEFAULT=9und lief grub-update. Beim Neustart ändert sich nichts, das System startet weiterhin mit 4.4.0-64-generic . Vielleicht habe ich etwas verpasst, kann mir jemand helfen?
Dronacharya

Das hat auch bei mir nicht geklappt. Ich habe den unerwünschten Kernel wie hier erklärt gelöscht: askubuntu.com/a/764242/456247
Luis

8

Durch einfaches Ausführen werden grep 'menuentry' /boot/grub/grub.cfgzusätzliche Einträge aufgelistet, die sich nicht auf die aktuellen Kernel- oder Betriebssystemversionen beziehen. Es listet zum Beispiel auf

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option

Ich möchte eine kleine Verbesserung der Suchmethode für diese Datei vorschlagen: use awk

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

Mit dem folgenden Befehl und seiner Ausgabe können Sie sehen, ob der awkCode mit der aktuellen Betriebssystemversion übereinstimmt, und die Nummer angeben, die Sie dann in der /etc/default/grubDatei verwenden können.

Zusätzlich zum Bearbeiten der /etc/default/grubDatei von Hand empfehle ich die Verwendung von sed. Ersetzen Sie im folgenden Befehl X durch die entsprechende Nummer, die Sie mit dem obigen Befehl awk erhalten haben:

sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; sudo update-grub


2
Das ist keine Antwort. Es liest sich wie ein Kommentar. Die Antwort sollte lauten: "So stellen Sie den Standardeintrag in GRUB ein" und nicht "Ich möchte eine andere Antwort ergänzen". Sie können dies leicht in eine richtige Antwort umwandeln, aber es könnte klüger sein, nur einen Kommentar zur Antwort von jkt123 über die Verwendung von awk anstelle von grep zu hinterlassen.
Aleksandr Dubinsky

2

jkt123 wird für die meisten Distributionen funktionieren, denke ich. Für Arch Linux hat es jedoch nicht funktioniert, zumindest nicht mit den Paketen, die ich zur Verfügung habe.

Die Indizes, die Sie einstellen können, grub-set-defaultentsprechen nur den Hauptmenüeinträgen. Die Kerneloptionen befinden sich jedoch in einem Untermenü. Entweder verschieben Sie den Kernel-Eintrag aus dem Untermenü in das Hauptmenü oder Sie setzen den Eintrag oben auf die Untermenü-Liste und wählen das Untermenü aus.

Mein Grub-Menü

  • Arch Linux
  • Erweiterte Optionen für Arch Linux
    • Kernel 1
    • Kernel 2
  • Windows

Um Kernel 2 booten zu können, müssen Sie es entweder mit Kernel 1 austauschen oder es außerhalb des Untermenüs auf die gleiche Ebene wie Arch Linux oder Windows stellen. Stellen Sie dann die Standardnummer auf einen der Hauptmenüindizes ein. Zum Beispiel im Menü über "0" bootet "Arch Linux" und "1" bootet Kernel 1.

Um die Hierarchie zu ändern und zu tauschen, öffnen /boot/grub/grub.cfgund verschieben Sie den Eintrag, den Sie verschieben möchten. Ein Eintrag könnte so aussehen

menuentry 'ENTRY NAME'
   ... some code ...
}

Dann müssen Sie Ihre Änderungen übernehmen. In meinem Fall mit grub-mkconfig. Dies kann jedoch von System zu System unterschiedlich sein.


0

Noch in CentOS-6.6 sah die grub.conf so aus, dass sie manuell bearbeitet werden kann, um die Standardauswahl zu ändern:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

0

Debian-Stretch:

Anstatt mit Konfigurationsdateien herumzuspielen, erstellen Sie einen Ordner in /noot(nennen Sie ihn wie gewünscht), lassen Sie den gewünschten Kernel zusammen mit den entsprechenden Konfigurations- und Systemdateien in /bootund verschieben Sie den Rest in diesen neuen Ordner.

Rennen update-grub.

Überprüfen Sie den /bootOrdner, in dem sich noch Ihre Kernel-Version und die zugehörigen Konfigurations- und Systemdateien befinden (falls Sie etwas kopiert haben, das Sie nicht haben sollten), und starten Sie ihn neu.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.