Ядро значения по умолчанию набора в GRUB

У Вас, по-видимому, есть Личинка, установленная на жестком диске, но Вашем наборе BIOS для начальной загрузки от SSD. Или скажите Вашему BIOS загружаться от жесткого диска или Личинки установки на SSD.

Моя рекомендация состоит в том, чтобы изменить настройки BIOS; тем путем каждая операционная система живет полностью независимо на своем собственном диске. В частности, Вы все еще сможете загрузить Windows, если жесткий диск перестанет работать. Но если Вы хотите установить Личинку на SSD, используйте liveCD, чтобы загрузиться в Вашу установку Linux и работать sudo grub-install /dev/sda или sudo grub-install /dev/sdb, выберите какой бы ни из sda или sdb SSD (выполните команду df видеть на том, какие диски каждая операционная система расположены).

56
23.04.2015, 00:36
7 ответов

JKT123 будет работать для большинства распределений. Однако для Arch Linux она не работала, по крайней мере, не с пакетами, которые у меня есть.

Индексы, которые вы можете установить с помощью GRUB-Set - по умолчанию только соответствуют записям главного меню. Варианты ядра однако в подменю. Итак, либо вы перемещаете запись ядра из подменю в главное меню, либо помещаете запись в верхнюю часть списка подменю и выберите подменю.

Мое меню GRUB

  • Arch Linux
  • Дополнительные параметры для Arch Linux
    • Ядро 1
    • KERNEL 2
  • Windows

, чтобы иметь возможность загрузить ядро ​​2, вы должны либо поменять его с помощью ядра 1, либо вы помещаете его вне подменю на одном уровне, что и в Arch Linux или Windows. А затем установите номер по умолчанию на один из основных индексов меню. Например, в меню выше «0» сапоги «арки Linux» и «1» сапоги ядра 1.

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

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

, то вам нужно применить ваши изменения. В моем случае с Grub-Mkconfig . Но это может варьироваться от системы в системе.

2
27.01.2020, 19:33

Как упоминалось в комментариях, можно настроить загрузку ядра по умолчанию с помощью команды grub-set-default X, где X - номер ядра, в которое нужно загрузиться. В некоторых дистрибутивах вы также можете установить этот номер, отредактировав файл /etc/default/grub и установив GRUB_DEFAULT=X, а затем запустив updateate-grub.

Номер представляет собой индекс к массиву настроек ядра/ядра, показанному в меню GRUB во время загрузки, при этом 0 - это первая (самая верхняя) запись. Обычно правильный номер можно найти, найдя строки menuentry в /boot/grub/grub.cfg, например:

grep menuentry /boot/grub/grub.cfg

Вы увидите каждое ядро в списке с именем, которое отображается в загрузочном меню GRUB. Первое - 0, второе - 1 и так далее.

22
27.01.2020, 19:33

Простое выполнение 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

8
27.01.2020, 19:33

Я думаю, что большинство дистрибутивов на этом этапе переместили дополнительные ядра в подменю расширенных параметров, как выяснил TomTom, в случае с его Arch.

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

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

Подводя итог:

1 ) Найдите $ menuentry_id _option для подменю:

$ 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) Закомментировать ваш текущий grub по умолчанию в / 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) Обновите grub, чтобы внести изменения. Для Debian это делается так:

$ sudo update-grub

Готово. Теперь, когда вы загружаетесь, в расширенном меню должна отображаться звездочка, и вы должны загрузиться в выбранное ядро. Вы можете подтвердить это с помощью 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

Изменить это на самое последнее ядро ​​так же просто, как закомментировать новую строку и раскомментировать # GRUB_DEFAULT = 0 , а затем повторно запустить update-grub .

52
27.01.2020, 19:33

Совсем недавно, в CentOS-6.6 grub.conf выглядел так, что его можно было вручную отредактировать, чтобы изменить выбор по умолчанию:

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

Растяжка Debian:

Вместо того, чтобы возиться с конфигурационными файлами, создайте папку в /noot(, назовите ее как хотите ), оставьте нужное ядро ​​вместе с соответствующими конфигурационными и системными файлами в /bootи переместите остальные в эту новую папку.

Выполнить update-grub.

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

0
27.01.2020, 19:33

Решение, не беспокоясь об порядковом номере или идентификаторах

Вот что у меня сработало на Archlinux VPS:

В дополнение к следующим настройкам в/etc/default/grub:

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Я использовал следующую опцию, чтобы установить основное ядро ​​Linux по умолчанию:

sudo grub-set-default 'Advanced options for Arch Linux>Arch Linux, with Linux linux'
sudo grub-mkconfig -o /boot/grub/grub.cfg

Вышеупомянутое работает, потому что на страницеman 8 grub-set-defaultговорится об опции MENU_ENTRY:

.

MENU_ENTRY is a number, a menu item title or a menu item identifier.

Если вы совершите ошибку, просто воспользовавшись, например, Arch Linux, with Linux linux, она все равно будет работать, но вы получите предупреждение при запуске команды grub-mkconfig.

0
13.09.2021, 06:26

Теги

Похожие вопросы