# Grub2: Reihenfolge der Menüeinträge von /etc/grub.d/10_linux

## wuesti

Moin Moin!

Falls beim Kompilieren des Kernels das System nicht mehr startet, kopiere ich den aktuellen, funktionierenden Kernel nach /boot/kernel-ok. 

```
# ls /boot

kernel-3.10.7-gentoo  kernel-ok
```

grub2-mkconfig setzt ihn mir immer an die erste Stelle des Menüs. Ich habe schon alles Mögliche versucht: höhere Zahlenkombinationen, einen neuen Kernel erstellen, etc. Er bleibt vorne. Das wäre nicht so wild gäbe es nicht das zweite Problem: Ich kann den Originalkernel nicht starten.

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

grub.cfg wird erstellt …

Linux-Abbild gefunden: /boot/kernel-ok

Linux-Abbild gefunden: /boot/kernel-3.10.7-gentoo

  /dev/mapper/control: open failed: Kein passendes Gerät gefunden

  Failure to communicate with kernel device-mapper driver.

  Check that device-mapper is available in the kernel.

  No volume groups found

Ubuntu 11.04 (11.04) auf /dev/sda2 gefunden

erledigt

```

```
 # cat /boot/grub/grub.cfg

### BEGIN /etc/grub.d/10_linux ###

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7ca0e3be-b764-47e7-ac46-4bbc0cfef43d' {

...

   echo   'Linux ok wird geladen …'

   linux   /kernel-ok root=/dev/sda5 ro  

}

submenu 'Erweiterte Optionen für Gentoo GNU/Linux' $menuentry_id_option 'gnulinux-advanced-7ca0e3be-b764-47e7-ac46-4bbc0cfef43d' {

   menuentry 'Gentoo GNU/Linux, mit Linux ok' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-ok-advanced-7ca0e3be-b764-47e7-ac46-4bbc0cfef43d' {

...

      echo   'Linux ok wird geladen …'

      linux   /kernel-ok root=/dev/sda5 ro  

   }

   menuentry 'Gentoo GNU/Linux, mit Linux 3.10.7-gentoo' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.10.7-gentoo-advanced-7ca0e3be-b764-47e7-ac46-4bbc0cfef43d' {

...

      echo   'Linux 3.10.7-gentoo wird geladen …'

      linux   /kernel-3.10.7-gentoo root=/dev/sda5 ro  

   }

}

### END /etc/grub.d/10_linux ###
```

Setze ich in /etc/default/grub

```
GRUB_DEFAULT=0
```

 wird kernel-ok geladen. Das ist klar. 

Setze ich 

```
GRUB_DEFAULT=1
```

 wird die Menüzeile für das Submenü angewählt und der erste Kernel (kernel-ok) geladen. 

Setze ich 

```
GRUB_DEFAULT=2
```

 wird der dritte Kernel im Hauptmenü geladen und das ist Ubuntu. Der zweite Unterpunkt im Submenü ist nicht für die Ladeautomatik zu erreichen.

Ich hätte gern eine Lösung, die auch nach einem grub2-Update noch funktioniert. Entweder soll das Untermenü nicht erstellt werden oder der Originalkernel soll an die erste Stelle im Menü. Die zweite Version wäre natürlich eleganter.

Kann jemand helfen?

----------

## mv

Verzichte auf den blödsinnigen Automatismus und richte Dir eine vernünftige grub.cfg von Hand ein: Anders musst Du immer gegen irgendwelche Skripte arbeiten.

----------

## mrsteven

Oder alternativ einfach den alten Dateinamen beibehalten, laut Gentoo-Doku ist GRUB2 schon schlau genug dann einfach den mit der höchsten Versionsnummer als Default auszuwählen. Nachteil ist halt, dass du nach jeder Kernel-Installation die Config neu erzeugen musst: 

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

Besser ist es da schon, die grub.cfg selber zu schreiben und die vom install-Target des Kernel-Makefiles gesetzten Symlinks zu verwenden, dazu bin ich allerdings bisher auch noch nicht gekommen...

----------

## wuesti

 *mrsteven wrote:*   

> ...laut Gentoo-Doku ist GRUB2 schon schlau genug dann einfach den mit der höchsten Versionsnummer als Default auszuwählen....

 

Das ist es was ich noch nicht ausprobiert habe. Ich musste nur den Kernel-ok in kernel-1-ok umbenennen. So hat er eine niedrige Versionsnummer und wird ans Ende gehängt.

Vielen Dank

----------

## toralf

Wie setze ich eigentlich jetzt einen timeout über /etc/grub.d/00_header ?

ick -das hier ist wirklich eine dumme Frage von mir - Antwort steht wohl in /etc/default/grubLast edited by toralf on Thu Oct 17, 2013 4:58 pm; edited 1 time in total

----------

## franzf

Dumme Frage:

Ich hab hier die Faulmeier-Variante mit dem alten grub am laufen: kernel werden nach /boot kopiert, dort existieren drei symlinks: kernel_current, kernel_testing und kernel_failsafe. testing symlink kommt immer bei neuem minor-release, bei bug-update kommt der neue direkt nach current. failsafe wird gaaanz selten aktualisiert, damit ich auch gaaanz sicher mein System hochkrieg. grub.cfg hat für alle drei kernels nen Eintrag, zuletzt hab ich darin rumeditiert, als ich mit modesetting spielen musste  :Wink: 

Geht so ein Ansatz auch mit grub2?

----------

## wuesti

 *franzf wrote:*   

> Dumme Frage:
> 
> ...
> 
> Geht so ein Ansatz auch mit grub2?

 

Ein Menüeintrag in meiner /boot/grub/grub.cfg sieht so aus:

```
menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7ca0e3be-b764-47e7-ac46-4bbc0cfef43d' {

   load_video

   insmod gzio

   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'  41a3e6b0-c9ac-45e8-ac08-b8c1f7b9d1f7

   else

     search --no-floppy --fs-uuid --set=root 41a3e6b0-c9ac-45e8-ac08-b8c1f7b9d1f7

   fi

   echo   'Linux 3.10.7-gentoo wird geladen …'

   linux   /kernel-3.10.7-gentoo root=/dev/sda5 ro  

}

```

Wenn du einmal sie die grub.conf einmal mit 

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

 erzeugst und deinen links und Bedürfnissen anpasst, brauchst du sie ja nicht mehr zu ändern.

----------

## mv

 *franzf wrote:*   

> Geht so ein Ansatz auch mit grub2?

 

Ja, die grub.cfg ist das Analogon zur grub.conf. Es hat auch im Prinzip die gleichen Möglichkeiten, nur noch mehr (z.B. Variablen, Tests usw.) Die Skripte, die sie verändern, braucht man nicht zu benutzen (und sollte es m.E. auch nicht), außer vielleicht das allererste mal um eine vernünftige Beispiel-Konfiguration zu haben.

 *wuestl wrote:*   

>    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'  41a3e6b0-c9ac-45e8-ac08-b8c1f7b9d1f7
> 
>    else
> ...

 

Da schaut man einmal nach, wie $feature_platform_search_hint auf der eigenen Platform definiert ist - normalerweise "y" - und kann den anderen Fall gleich mal wegräumen.

Hier sieht man übrigens einen der Vorteile von grub2: Wenn möglich, wird die Partition aufgrund der UUID gefunden (so dass das Ganze also meist auch dann noch geht, wenn die Festplatte wegen Rechnerumbau eine andere Nummer bekommt), und wenn es diese nicht findet, ist der Fallback nach den obigen "Hints" die erste Partition auf der Platte 0 (so dass das Ganze also meist auch dann noch geht, wenn man umpartitioniert hat). Natürlich kann man auch auf "search" verzichten, und einfach wie in Legacy Grub auf eine feste Partition zugreifen...

----------

## l3u

 *franzf wrote:*   

> Dumme Frage:
> 
> Ich hab hier die Faulmeier-Variante mit dem alten grub am laufen: kernel werden nach /boot kopiert, dort existieren drei symlinks: kernel_current, kernel_testing und kernel_failsafe. testing symlink kommt immer bei neuem minor-release, bei bug-update kommt der neue direkt nach current. failsafe wird gaaanz selten aktualisiert, damit ich auch gaaanz sicher mein System hochkrieg. grub.cfg hat für alle drei kernels nen Eintrag, zuletzt hab ich darin rumeditiert, als ich mit modesetting spielen musste ;)
> 
> Geht so ein Ansatz auch mit grub2?

 

So ungefähr sieht’s bei mir auch aus. Folgendes hab ich gemacht:

/etc/grub.d/40_custom

```
#!/bin/sh

exec tail -n +3 $0

# 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 "Gentoo" {

        root=hd0,1

        linux /boot/vmlinuz root=/dev/sda3

}
```

Wobei /boot/vmlinuz mein Symlink auf den aktuellen Kernel ist

/etc/default/grub

```
GRUB_DISTRIBUTOR="Gentoo"

GRUB_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT=1

GRUB_HIDDEN_TIMEOUT_QUIET=true

GRUB_DEFAULT="Gentoo"

GRUB_TERMINAL=console
```

Man kann nämlich nicht nur einen Menüeintrag per Listenposition referenzieren, sondern auch per Name. Läuft alles 1A, so wie bisher auch mit GRUB1. Und man muss kein grub2-mkconfig nach einem Kernelupdate aufrufen.

----------

