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


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.


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.


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.


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


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.


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

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.

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.