Встановіть ядро ​​за замовчуванням у GRUB


49

Як я можу вибрати, яке ядро ​​GRUB2 слід завантажувати за замовчуванням? Нещодавно я встановив ядро ​​linux в реальному часі і тепер воно завантажується за замовчуванням. Я хотів би завантажити звичайний за замовчуванням.

Поки мені вдалося лише вибрати ОС за замовчуванням .. і чомусь /boot/grub.cfgвже передбачає, що я хочу завантажити rt-ядро і помістити його в загальне меню Linux (у моєму випадку Arch Linux).


2
grub2-set-default <назва або номер>?
taliezin

1
Але як мені знати число? Цифри в номерах grub.cfgвідповідають лише ОС, а не ядрам.
TomTom

У деяких випадках це працює: askubuntu.com/questions/216398/… Імена меню можна знайти, переглянувши цей файл: /boot/grub/grub.cfg
TekOps

Відповіді:


41

Я думаю, що більшість дистрибутивів перемістили додаткові ядра в підменю розширених опцій в цей момент, як виявив TomTom, це було з його Arch.

Я не хотів змінювати структуру меню верхнього рівня, щоб вибрати попереднє ядро ​​як стандартне. Тут я знайшов відповідь:

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

Узагальнити:

1) Знайдіть $menuentry_idопцію для підменю:

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

2) Знайдіть $menuentry_id_optionдля меню запис для ядра, яке ви хочете використовувати:

$ 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) Прокоментуйте поточну групу за замовчуванням /etc/default/grubі замініть її на підменю $menuentry_id_optionз першого кроку, а вибране ядро $menuentry_id_optionз другого кроку розділене на >.

У моєму випадку модифікація GRUB_DEFAULT:

#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) Оновіть груб, щоб внести зміни. Для Debian це робиться так:

$ sudo update-grub

Зроблено. Тепер, коли ви завантажуєтесь, в розширеному меню має бути зірочка, і ви повинні завантажуватися у вибране ядро. Ви можете підтвердити це невірно.

$ 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

Змінити це на останнє ядро ​​так само просто, як коментувати новий рядок і коментувати його #GRUB_DEFAULT=0, а потім повторювати update-grub.


31

Протившись протягом двох годин, я знайшов набагато простіший спосіб досягти цього. Я просто RTFM. ;)

Додайте два рядки до / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Зробіть sudo update-grub, перезавантажте, увійдіть у своє меню grub та виберіть те меню або підменю, яке вам потрібно. Вибір буде збережено, і наступного разу ваш комп'ютер завантажиться в нього автоматично.


2
Чудово! Так просто!
Єгор Скриптунов

О, так простіше. Дякую.
користувач207863

21

Як зазначено в коментарях, ви можете встановити ядро ​​за замовчуванням для завантаження за допомогою grub-set-default Xкоманди, де X - це число ядра, яке ви хочете завантажувати. У деяких дистрибутивах ви також можете встановити це число, відредагувавши /etc/default/grubфайл та налаштування GRUB_DEFAULT=X, а потім запустивши update-grub.

Цифра - це індекс масиву ядер / налаштувань ядра, показаних у меню GRUB під час завантаження, причому 0 є першим (найвищим) показником. Зазвичай ви можете знайти потрібне число, шукаючи menuentryрядки /boot/grub/grub.cfg, наприклад:

grep menuentry /boot/grub/grub.cfg

Ви побачите кожне ядро ​​в списку з іменем, яке відображається в меню завантаження GRUB. Перший - 0, другий - 1 тощо.


1
У Fedora 21 - це /boot/grub2/grub.cfg.
щось щось

3
Це не працює для мене. Останнє ядро ​​в моїй установці - 4.4.0-64-generic (menuentry 0), але я хочу, щоб 4.4.0-59-generic (menuentry 9) було завантажувальним ядром за замовчуванням. Я біг, grub-set-default 9а потім grub-updateі перезавантажився. Я дозволяю grub завантажуватися з ядром за замовчуванням, і він як і раніше завантажується з 4.4.0-64-generic . Я також спробував редагування, /etc/default/grubвстановив GRUB_DEFAULT=9і побіг grub-update. Під час перезавантаження нічого не змінюється, система все ще завантажується з 4.4.0-64-generic . Можливо, я щось пропустив, хтось може мені допомогти?
Дроначарія

Це не працювало і для мене. Я видалив небажане ядро, як тут пояснено: askubuntu.com/a/764242/456247
Луїс

8

Просто робиться grep 'menuentry' /boot/grub/grub.cfgсписок додаткових записів, які не пов'язані з фактичною версією ядра чи ОС. Наприклад, у списках

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

Я хотів би запропонувати невелике вдосконалення методу пошуку цього файлу: використання 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' {

З наведеної нижче команди та її результату ви можете побачити awkкод, котрий відповідає дійсній версії ОС, та дасть вам номер, який ви можете використовувати у /etc/default/grubфайлі.

Крім редагування /etc/default/grubфайлу вручну, пропоную використовувати sed. У наведеному нижче команді замініть X на відповідне число, яке ви отримали з команди awk вище:

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


2
Це не відповідь. Він читається як коментар. У відповіді має бути сказано: "Це як встановити запис за замовчуванням у GRUB", а не "дозвольте мені внести доповнення до іншої відповіді". Ви можете легко відредагувати це правильною відповіддю, але це може бути розумніше просто залишити коментар до відповіді jkt123 про використання awk замість grep.
Олександр Дубінський

2

jkt123 буде працювати для більшості дистрибутивів, я думаю. Однак для Arch Linux це не спрацювало, принаймні, не з наявними у мене пакетами.

Індекси, за якими можна встановити, grub-set-defaultвідповідають лише записам у головному меню. Однак параметри ядра знаходяться у підменю. Отже, або ви переміщуєте запис ядра з підменю в головне меню, або ставите запис вгорі списку підменю та вибираєте підменю.

Моє грубне меню

  • Arch Linux
  • Додаткові параметри для Arch Linux
    • Ядро 1
    • Ядро 2
  • Windows

Щоб мати можливість завантажувати Kernel 2, потрібно або поміняти його на Kernel 1, або поставити його за межі підменю на тому ж рівні, що і Arch Linux або Windows. А потім встановіть номер за замовчуванням на один з показників головного меню. Наприклад, у меню над "0" завантажуються "Arch Linux" та "1" завантажуються Kernel 1.

Щоб змінити ієрархію та поміняти місцями, відкрийте /boot/grub/grub.cfgта перемістіть запис, який ви хочете перемістити. Запис може виглядати приблизно так

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

Тоді вам потрібно застосувати свої зміни. У моєму випадку с grub-mkconfig. Але це може відрізнятися від системи до системи.


0

Нещодавно CentOS-6.6 grub.conf виглядав так, що це можна змінити вручну, щоб змінити вибір за замовчуванням:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

0

Розтяжка Debian:

Замість того, щоб возитися з конфігураційними файлами, створіть папку в /noot(назвіть її, що вам потрібно), залиште потрібне ядро ​​разом із відповідними конфігураційними та системними файлами, /bootа решту перенесіть у цю нову папку.

Біжи update-grub.

Двічі перевірте /bootпапку, що у вашій версії ядра та відповідні конфігураційні та системні файли все ще є (у випадку, якщо ви скопіювали щось, чого у вас не повинно бути) та перезавантажте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.