Wie richte ich den richtigen GRUB 2-Standardmenüeintrag richtig ein?


27

Ich führe GRUB 2.00 auf einem Gentoo Linux-System aus.

Ich kompiliere meine eigenen Kernel manuell und installiere sie dann /bootmit make install. Ich habe im /bootMoment die folgenden Kerne :

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

Laufende grub2-mkconfigErgebnisse in der folgenden Ausgabe:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

Wenn ich jetzt die resultierende /boot/grub2/grub.cfgDatei lese, stelle ich fest, dass die folgenden Einträge erstellt wurden:

  • Ein Hauptstandardeintrag, der beginnt vmlinuz-3.7.4-gentoo-third
  • Ein Untermenü mit allen anderen Einträgen (einschließlich der Einträge für die Wiederherstellung) in derselben Reihenfolge wie der grub2-mkconfigBefehl

Das Problem ist, dass ich beim Booten standardmäßig die fünfte Version meines Kernels ( vmlinuz-3.7.4-gentoo-5) laden möchte , nicht die dritte ( vmlinuz-3.7.4-gentoo-third). Ich bevorzuge es auch, nicht auf das Untermenü zuzugreifen, um den richtigen Kernel zum Laden auszuwählen.

Wie kann ich dieses Verhalten ändern? Wie kann ich GRUB mitteilen, dass ich die fünfte Version meines Kernels standardmäßig ausführen möchte und nicht die ältere dritte Version? Wie kann ich die Standardeingabezeile ändern, um sie an den gewünschten Kernel anzupassen und nicht an einen scheinbar zufälligen Kernel, der von GRUB ausgewählt wurde?

Ich habe auch versucht, die folgenden Zeilen einzufügen /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Dies behebt das Problem nicht so, wie ich es mir wünsche. Aber zumindest scheint sich GRUB an den neuesten Kernel zu erinnern, von dem ich gebootet habe, und wählt ihn automatisch aus dem Untermenü aus. Ich möchte nur nicht auf das Untermenü zugreifen.


Mir ist aufgefallen, dass Sie -o /boot/grub2/grub.cfgals Ausgabedatei angegeben haben . Existiert das Verzeichnis /boot/grub/noch?
ott--

Antworten:


12

Um einen Menüeintrag im Untermenü "Erweiterte Optionen" auszuwählen, setzen Sie GRUB_DEFAULT = "1> 3". Sie können jetzt grub2-mkconfig ausführen, um die grub-Konfigurationsdatei zu generieren. Beim nächsten Neustart sollte vmlinuz-3.7.4-gentoo-5 booten.

Hinweis : Der Standardeintrag im Menü "Grub" wird dadurch nicht geändert, dh der Standardeintrag zeigt weiterhin denselben Eintrag an, den Sie gerade haben. Das Image, das standardmäßig gebootet wird, ist jedoch das 4. Image unter den "Erweiterten Optionen". Um vmlinuz-3.7.4-gentoo-5 als Standardeintrag im Grub-Menü festzulegen, sollte die Reihenfolge der Bilder so sein, dass vmlinuz-3.7.4-gentoo-5 das erste Bild ist, wenn Sie grub2-mkconfig ausführen .


2
Beachten Sie, dass die Anführungszeichen wichtig sind. Dh GRUB_DEFAULT = 1> 3 funktioniert nicht.
CTUFFLI

7

Wenn Sie ein Untermenü in Ihrer grub.cfg haben, sollten Sie zwei Ziffern verwenden:

grub-reboot '1>3'

Das erste ist der Menüindex und das zweite ist der Untermenüindex.

So booten Sie beispielsweise den letzten Eintrag aus der Konfiguration:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

du solltest benutzen:

grub-reboot '1>5'

und neu starten.


Seltsam. Untermenü Index beginnen mit 0, während Hauptmenü von 1
VarunAgw

5

Sie können auch verwenden GRUB_DEFAULT=saved. In diesem Fall würden Sie verwenden

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

oder wenn es nur für den nächsten boot ist:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

2

Versuchen

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

Dadurch werden alle nicht verwendeten Kernel in ein Sicherungsverzeichnis verschoben:

grub2-mkconfig -o /boot/grub/grub.cfg

Dies erhöht nur die Auswahl r5 Ihrem Menü . So, lesen Sie diese Nachdem ich diese Verbindung und dann reame alle die Kerne im Backup - Verzeichnis etwas anderes als vmlinuz wenn Sie halten sie darauf bestehen ,


2

Mit centos7 (oder RHEL7) und grub2:

grub verwendet standardmäßig den 'saved_entry'-Eintrag von grubenv zum Booten, sniplet von /boot/grub2/grub.cfg:

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

Um zu überprüfen, was der "Saved_entry" ist, ist jetzt mein Build:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

um es zB in mein Debugbuild zu ändern:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'

1

Was ich getan habe, um das gewünschte Ergebnis zu erzielen, war:

  • Stellen Sie das GRUB_DEFAULT=savedwie in der grub-set-defaultHilfe beschrieben ein

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

  • Stellen Sie den Standardwert ein

    grub-set-default "1>2"

    Es erstellt eine neue Datei in / boot / grub namens grubenv mit den erforderlichen Informationen.

  • Danach erstelle ich die Konfigurationsdatei neu

    grub-mkconfig > /boot/grub/grub.cfg

Und ich habe gesehen, dass die Konfiguration geändert wurde, um den gespeicherten Zustand zu verwenden:

if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="${saved_entry}" fi


0

Sie können die Standardauswahl durch einen numerischen Wert festlegen. Wenn Sie festlegen

`GRUB_DEFAULT=3` 

in /etc/default/grub
Sie setzen den Standard auf den gentoo-5 Eintrag.
GRUB_DEFAULTIst der Offset Null, wählt 3 den vierten Eintrag wie gewünscht aus.


2
Ich weiß nicht warum, aber es scheint nicht zu funktionieren. Ich setze GRUB_DEFAULT=3wie du sagtest, dann wieder laufen grub2-mkconfig. Aber beim Booten ist der Standardeintrag immer noch vmlinuz-3.7.4-gentoo-third.
Francesco Turco

1
Versuchen Sie es auskommentieren GRUB_SAVEDEFAULT=trueEs sollte keine Rolle spielen, aber es wird nicht mit numerischen Zeichen benötigt.
bsd

2
Ich habe diese Option nicht in meiner /etc/default/grubDatei.
Francesco Turco

0

Ich vermute, dass grub2-mkconfigdie Kernel in umgekehrter Reihenfolge sortiert werden, vorausgesetzt, dass sie hauptsächlich monoton ansteigende Versionsnummern enthalten. Suchen Sie sich also die Tags aus, die dieser Konvention entsprechen.


0

mv diese neuen / nicht verwendeten Versionsdateien in / boot in ein Sicherungsverzeichnis wie zum Beispiel / boot / back initrd.img-3.13.0-xx-generic
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx-generic

Starten Sie das System im Rettungsmodus neu, und wählen Sie dann im Rettungsdialog grub aus. Dann ist alles in Ordnung.

Ich denke, es ist die am besten geeignete Methode. Ich benutze Ubuntu 14.04.


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.