Jak poprawnie ustawić prawidłową domyślną pozycję menu GRUB 2?


27

Używam GRUB 2.00 w systemie Gentoo Linux.

Skompilować własne jądro ręcznie, a następnie zainstalować je w /bootz make install. W tej chwili mam następujące jądra /boot:

# 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

Uruchamianie grub2-mkconfigdaje następujące wyniki:

# 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

Jeśli teraz przeczytam wynikowy /boot/grub2/grub.cfgplik, zauważę, że zostały utworzone następujące wpisy:

  • Główny domyślny wpis, który się rozpoczyna vmlinuz-3.7.4-gentoo-third
  • Podmenu z wszystkimi pozostałymi wpisami (w tym odzyskiwania), w tej samej kolejności, co grub2-mkconfigpolecenie

Problem polega na tym, że w czasie uruchamiania chciałbym załadować domyślnie piątą wersję mojego jądra ( vmlinuz-3.7.4-gentoo-5), a nie trzecią ( vmlinuz-3.7.4-gentoo-third). Wolę też nie wchodzić do podmenu, aby wybrać odpowiednie jądro do załadowania.

Jak mogę zmienić to zachowanie? Jak mogę powiedzieć GRUB, że domyślnie chcę uruchomić piątą wersję mojego jądra, a nie starszą trzecią wersję? Ogólnie, jak mogę zmienić domyślną linię wprowadzania, aby pasowała do jądra, którego chcę, a nie na pozornie losowy wybrany przez GRUB?

Próbowałem także wstawić następujące wiersze /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

To nie rozwiązuje problemu tak, jak sobie tego życzę. Ale przynajmniej GRUB wydaje się pamiętać ostatnie jądro, z którego się uruchomiłem i automatycznie wybiera je z podmenu. Po prostu nie lubię wchodzić do podmenu.


Zauważyłem, że podałeś -o /boot/grub2/grub.cfgjako plik wyjściowy. Czy katalog /boot/grub/nadal istnieje?
ott--

Odpowiedzi:


12

Aby wybrać pozycję menu w podmenu „Opcje zaawansowane”, ustaw GRUB_DEFAULT = „1> 3”. Możesz teraz uruchomić grub2-mkconfig, aby wygenerować plik konfiguracyjny grub. Podczas następnego restartu vmlinuz-3.7.4-gentoo-5 powinien się uruchomić.

Uwaga : nie zmieni to domyślnego wpisu w menu grub, tzn. Domyślny wpis nadal będzie wskazywał ten sam wpis, który masz teraz. Ale obraz, który zostanie domyślnie uruchomiony, będzie czwartym obrazem w „Opcjach zaawansowanych”. Aby ustawić vmlinuz-3.7.4-gentoo-5 jako domyślną pozycję w menu grub, kolejność obrazów powinna być taka, aby vmlinuz-3.7.4-gentoo-5 był pierwszym obrazem po uruchomieniu grub2-mkconfig .


2
Pamiętaj, że znaki cudzysłowu są ważne. Tj. GRUB_DEFAULT = 1> 3 nie będzie działać.
ctuffli

7

Jeśli masz podmenu w swoim pliku grub.cfg, powinieneś użyć dwóch takich cyfr:

grub-reboot '1>3'

Pierwszy jest indeks menu, a drugi to indeks podmenu.

Na przykład, aby uruchomić ostatni wpis z konfiguracji w następujący sposób:

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' {

powinieneś użyć:

grub-reboot '1>5'

i uruchom ponownie.


Dziwne. indeks podmenu zaczyna się od 0, a menu główne od 1
VarunAgw

5

równie dobrze możesz użyć GRUB_DEFAULT=saved. W takim przypadku użyłbyś

$ 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.

lub jeśli dotyczy tylko następnego rozruchu:

$ 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

Próbować

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

Przenosi to wszystkie nieużywane jądra do katalogu kopii zapasowej, teraz:

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

To tylko dodaje wybór r5do twojego menu. Po ten sposób przeczytać ten link, a następnie reame wszystkie jądra w katalogu kopii zapasowych czymś innym niż vmlinuz jeśli nalegać na utrzymanie ich


2

Z centos7 (lub RHEL7) i grub2:

grub używa domyślnie opcji „save_entry” z grubenv do bootowania, sniplet z /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

sprawdzenie, co to jest „zapisane_wejście”, jest teraz moją wersją:

grub2-editenv list

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

aby to zmienić np. do mojej wersji debugowania:

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

1

To, co zrobiłem, aby osiągnąć pożądany rezultat, to:

  • ustaw GRUB_DEFAULT=savedzgodnie z opisem w grub-set-defaultpomocy

    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.

  • Ustaw wartość domyślną

    grub-set-default "1>2"

    Tworzy nowy plik w / boot / grub o nazwie grubenv z wymaganymi informacjami.

  • Następnie ponownie tworzę plik konfiguracyjny

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

Widziałem, że konfiguracja została zmieniona, aby używać stanu zapisanego:

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

Możesz ustawić domyślny wybór według wartości liczbowej. Jeśli ustawisz

`GRUB_DEFAULT=3` 

w /etc/default/grub
Ustawisz domyślnie wpis gentoo-5.
GRUB_DEFAULTjest przesunięciem zera, więc 3 wybierze czwarty wpis, jak chcesz.


2
Nie wiem dlaczego, ale wydaje się, że to nie działa. Ustawiłem GRUB_DEFAULT=3tak, jak powiedziałeś, a następnie uruchom ponownie grub2-mkconfig. Ale w czasie uruchamiania domyślny wpis jest nadal vmlinuz-3.7.4-gentoo-third.
Francesco Turco

1
Spróbuj komentować GRUB_SAVEDEFAULT=trueTo nie powinno mieć znaczenia, ale nie jest potrzebne w przypadku liczb.
bsd

2
Nie mam tej opcji w swoim /etc/default/grubpliku.
Francesco Turco

0

Podejrzewam, że grub2-mkconfigsortuje jądra w odwrotnej kolejności, zakładając, że zawierają one głównie monotonicznie rosnące numery wersji. Zacznij więc wybierać tagi, aby pasowały do ​​tej konwencji.


0

mv te nowe / nieużywane pliki wersji w katalogu / boot do katalogu kopii zapasowej, na przykład / 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

zrestartuj system w trybie ratunkowym, następnie wybierz grub w oknie dialogowym ratunkowym, wtedy wszystko będzie dobrze.

myślę, że jest to najbardziej odpowiednia metoda. Używam Ubuntu 14.04.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.