Ustaw domyślne jądro w GRUB

49

Jak mogę wybrać, które jądro GRUB2 ma ładować się domyślnie? Niedawno zainstalowałem jądro Linuksa w czasie rzeczywistym, a teraz domyślnie się ładuje. Domyślnie chciałbym załadować zwykły.

Do tej pory udało mi się tylko wybrać domyślny system operacyjny. Z jakiegoś powodu /boot/grub.cfgjuż zakładam, że chcę załadować jądro rt i umieścić je w ogólnej pozycji menu Linux (w moim przypadku Arch Linux).

TomTom
źródło
2
grub2-set-default <tytuł lub numer>?
taliezin
1
Ale skąd mam znać numer? Liczby w grub.cfgodpowiadają tylko systemom operacyjnym, a nie jądrom.
TomTom
W niektórych przypadkach działa to: askubuntu.com/questions/216398/ ... Nazwy menu można znaleźć, przeglądając ten plik: /boot/grub/grub.cfg
TekOps

Odpowiedzi:

41

Myślę, że większość dystrybucji przeniosła dodatkowe jądra do podmenu opcji zaawansowanych w tym momencie, jak stwierdził TomTom w przypadku jego Arch.

Nie chciałem zmieniać struktury menu najwyższego poziomu, aby wybrać poprzednie jądro jako domyślne. Znalazłem odpowiedź tutaj:

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

Podsumowując:

1) Znajdź $menuentry_idopcję _ dla podmenu:

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

2) Znajdź pozycję $menuentry_id_optionmenu dla jądra, którego chcesz użyć:

$ 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) Skomentuj swoje obecne domyślne grub /etc/default/grubi zastąp je podmenu $menuentry_id_optionz kroku pierwszego, a wybrane jądro $menuentry_id_optionz kroku drugiego oddzielone >.

W moim przypadku zmodyfikowany GRUB_DEFAULTjest:

#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) Zaktualizuj grub, aby wprowadzić zmiany. W przypadku Debiana odbywa się to w następujący sposób:

$ sudo update-grub

Gotowy. Teraz podczas uruchamiania zaawansowane menu powinno mieć gwiazdkę i należy uruchomić się w wybranym jądrze. Możesz to potwierdzić za pomocą uname.

$ 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

Zmiana tego na najnowsze jądro jest tak prosta, jak skomentowanie nowej linii i odkomentowanie #GRUB_DEFAULT=0, a następnie ponowne uruchomienie update-grub.

William LK
źródło
31

Po 2 godzinach zmagań znalazłem łatwiejszy sposób na osiągnięcie tego. Po prostu RTFM. ;)

Dodaj dwie linie do / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Wykonaj sudo update-grub, uruchom ponownie, wejdź do menu grub i wybierz dowolne potrzebne menu lub podmenu. Wybór zostanie zapisany i następnym razem komputer uruchomi się automatycznie.

Jimmy Falcon
źródło
2
Wspaniale! Tak prosty!
Egor Skriptunoff
Och, o wiele prostsze. Dziękuję Ci.
user207863
21

Jak wspomniano w komentarzach, możesz ustawić domyślne jądro, aby uruchamiało się za pomocą grub-set-default Xpolecenia, gdzie X jest numerem jądra, z którego chcesz się uruchomić. W niektórych dystrybucjach możesz również ustawić ten numer, edytując /etc/default/grubplik i ustawienie GRUB_DEFAULT=X, a następnie uruchamiając update-grub.

Liczba jest indeksem tablicy ustawień jądra / jądra wyświetlanych w menu GRUB podczas rozruchu, przy czym 0 jest pierwszym (najwyższym) wpisem. Zwykle możesz znaleźć odpowiednią liczbę, szukając menuentrylinii w następujący /boot/grub/grub.cfgsposób:

grep menuentry /boot/grub/grub.cfg

Zobaczysz każde jądro na liście o nazwie wyświetlanej w menu rozruchowym GRUB-a. Pierwszy to 0, drugi to 1 i tak dalej.

jkt123
źródło
1
W Fedorze 21 jest to /boot/grub2/grub.cfg.
coś Coś
3
To mi nie działa. Najnowsze jądro w mojej instalacji to 4.4.0-64-generic (menuentry 0), ale chcę, aby 4.4.0-59-generic (menuentry 9) było domyślnym jądrem rozruchowym. Pobiegłem, grub-set-default 9a następnie grub-updateuruchomiłem ponownie. Zezwalam grubowi na rozruch z domyślnym jądrem i nadal uruchamia się z wersją 4.4.0-64-generic . Próbowałem także edytować, /etc/default/grubustawić GRUB_DEFAULT=9i uruchomić grub-update. Po ponownym uruchomieniu nic się nie zmienia, system nadal uruchamia się z wersją 4.4.0-64-generic . Może coś mi umknęło, czy ktoś może mi pomóc?
Dronacharya
To też nie działało dla mnie. Usunąłem
Luis
8

Po prostu robi grep 'menuentry' /boot/grub/grub.cfglistę dodatkowych wpisów, które nie są związane z faktyczną wersją jądra lub systemu operacyjnego. Na przykład zawiera listę

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

Chciałbym zaproponować niewielkie ulepszenie metody wyszukiwania tego pliku: użyj 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' {

Dzięki poniższemu poleceniu i jego wynikowi możesz zobaczyć awkkod odpowiadający rzeczywistej wersji systemu operacyjnego i podać liczbę, której możesz użyć w /etc/default/grubpliku.

Oprócz /etc/default/grubręcznej edycji pliku, sugeruję użycie sed. W poniższym poleceniu zastąp X odpowiednią liczbą otrzymaną z powyższego polecenia awk:

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

Sergiy Kolodyazhnyy
źródło
2
To nie jest odpowiedź. Brzmi jak komentarz. Odpowiedź powinna brzmieć: „Oto jak ustawić domyślny wpis w GRUB-ie”, a nie „pozwól mi zrobić uzupełnienie do innej odpowiedzi”. Możesz łatwo zmienić to na poprawną odpowiedź, ale mądrzej byłoby zostawić komentarz na temat odpowiedzi jkt123 na temat używania awk zamiast grep.
Aleksandr Dubinsky
2

Wydaje mi się, że jkt123 będzie działać dla większości dystrybucji. Jednak dla Arch Linux nie działało, przynajmniej nie z pakietami, które mam dostępne.

Wskaźniki, które można ustawić, grub-set-defaultodpowiadają tylko pozycjom menu głównego. Opcje jądra znajdują się jednak w podmenu. Więc albo przenieś wpis jądra z podmenu do menu głównego, albo umieścisz go na liście podmenu i wybierzesz podmenu.

Moje menu Grub

  • Arch Linux
  • Zaawansowane opcje dla Arch Linux
    • Jądro 1
    • Jądro 2
  • Windows

Aby móc uruchomić Kernel 2, musisz go zamienić na Kernel 1 lub umieścić go poza podmenu na tym samym poziomie, co Arch Linux lub Windows. A następnie ustaw domyślną liczbę na jeden z indeksów menu głównego. Na przykład w menu powyżej „0” uruchamia „Arch Linux” i „1” uruchamia jądro 1.

Aby zmienić hierarchię i zamianę, otwórz /boot/grub/grub.cfgi przenieś pozycję, którą chcesz przenieść. Wpis może wyglądać tak

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

Następnie musisz zastosować zmiany. W moim przypadku z grub-mkconfig. Ale może się to różnić w zależności od systemu.

TomTom
źródło
0

Tak niedawno, jak wyglądał grub.conf CentOS-6.6, można go ręcznie edytować, aby zmienić domyślny wybór:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
Mikrofon
źródło
0

Debian Stretch:

Zamiast bawić się plikami konfiguracyjnymi, utwórz folder w /noot(nazwij go tak, jak chcesz), pozostaw jądro, które chcesz, wraz z pasującymi plikami konfiguracyjnymi i systemowymi, /booti przenieś resztę do tego nowego folderu.

Uruchom update-grub.

Dokładnie sprawdź /bootfolder, w którym znajduje się wersja jądra oraz odpowiednie pliki konfiguracyjne i systemowe (na wypadek, gdybyś skopiował coś, czego nie powinieneś mieć) i zrestartuj komputer.

Pinkie Perie
źródło