Встановіть ядро ​​за замовчуванням у 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.