Як правильно налаштувати правильний запис меню GRUB 2 за замовчуванням?


27

Я працюю GRUB 2.00 в системі Gentoo Linux.

Я компілювати свої власні ядра вручну, а потім встановити їх в /bootс make install. На /bootданий момент у мене є такі ядра :

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

Запуск grub2-mkconfigрезультатів у наступному виході:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

Якщо я зараз прочитав отриманий /boot/grub2/grub.cfgфайл, помічаю, що створено такі записи:

  • Основний запис за замовчуванням, який починається vmlinuz-3.7.4-gentoo-third
  • Підменю з усіма іншими записами (включаючи відновлення) у тому ж порядку, що і grub2-mkconfigкоманда

Проблема полягає в тому, що під час завантаження я хотів би завантажити за замовчуванням п'яту версію мого ядра ( vmlinuz-3.7.4-gentoo-5), а не третю ( vmlinuz-3.7.4-gentoo-third). Я також вважаю за краще не отримувати доступ до підменю для вибору потрібного ядра для завантаження.

Як я можу змінити таку поведінку? Як я можу сказати GRUB, що я хочу запустити п'яту редакцію свого ядра за замовчуванням, а не стару третю версію? Як правило, як я можу змінити рядок вводу за замовчуванням, щоб він відповідав ядру, яке я хочу, а не на перший погляд, випадково вибраному GRUB?

Я також спробував помістити наступні рядки /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Це не вирішує проблему так, як я хочу. Але принаймні GRUB, схоже, пам’ятає останнє ядро, з якого я завантажився, і автоматично вибирає його з підменю. Просто мені не подобається отримувати доступ до підменю.


Я помітив, що ви вказали -o /boot/grub2/grub.cfgяк вихідний файл. Чи /boot/grub/існує каталог ще?
ott--

Відповіді:


12

Для вибору пункту меню підменю "Додаткові параметри" встановіть GRUB_DEFAULT = "1> 3". Тепер ви можете запустити grub2-mkconfig для створення файлу конфігурації grub. При наступній перезавантаження vmlinuz-3.7.4-gentoo-5 повинен завантажитися.

Примітка . Це не змінить запис за замовчуванням у меню grub, тобто запис за замовчуванням все одно буде вказувати той самий запис, який ви маєте зараз. Але зображення, яке буде завантажено за замовчуванням, буде четвертим зображенням у розділі "Додаткові параметри". Щоб зробити vmlinuz-3.7.4-gentoo-5 як запис за замовчуванням у меню grub, впорядкування зображень повинно бути таким, щоб vmlinuz-3.7.4-gentoo-5 був першим зображенням при запуску grub2-mkconfig .


2
Зауважте, що лапки є важливими. Тобто GRUB_DEFAULT = 1> 3 не працюватиме.
ctuffli

7

Якщо у вашому grub.cfg є підменю, слід використати дві цифри, як це:

grub-reboot '1>3'

Першим є індекс меню, а другий є індекс підміню.

Наприклад, для завантаження останнього запису з подібної конфігурації:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

ви повинні використовувати:

grub-reboot '1>5'

і перезавантажити.


Дивно. Індекс підменю починається з 0, а головне меню з 1
VarunAgw

5

ви можете також використовувати GRUB_DEFAULT=saved. У цьому випадку ви використовуєте

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

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

або якщо це лише для наступного завантаження:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

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

2

Спробуйте

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

Це переміщує всі ваші невикористані ядра в каталог резервних копій:

grub2-mkconfig -o /boot/grub/grub.cfg

Це лише додає вибір r5вашому меню. Після цього, прочитати цю посилання , а потім reame всіх ядер в архівній директорії що - то інше , ніж vmlinuz , якщо ви наполягаєте на збереження їх


2

З centos7 (або RHEL7) та grub2:

grub використовує запис "save_entry" з grubenv як типовий для завантаження, sniplet з /boot/grub2/grub.cfg:

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

щоб перевірити, що таке "зберігся_посібник", тепер мій збір:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

щоб змінити його, наприклад, до моєї налагодження:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'

1

Що я зробив для досягнення бажаного результату:

  • встановіть GRUB_DEFAULT=savedяк зазначено у grub-set-defaultдовідці

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

  • Встановіть значення за замовчуванням

    grub-set-default "1>2"

    Він створює новий файл у / boot / grub під назвою grubenv з необхідною інформацією.

  • Після цього я відтворюю конфігураційний файл

    grub-mkconfig > /boot/grub/grub.cfg

І я бачив, що конфігурацію було змінено для використання збереженого стану:

if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="${saved_entry}" fi


0

Ви можете встановити вибір за замовчуванням за числовим значенням. Якщо ви встановите

`GRUB_DEFAULT=3` 

у /etc/default/grub
Ви встановите за замовчуванням запис gentoo-5.
GRUB_DEFAULTнульове зміщення, тому 3 вибере четвертий запис за вашим бажанням.


2
Я не знаю чому, але, здається, це не працює. Я встановив, GRUB_DEFAULT=3як ви сказали, потім повторно запустіть grub2-mkconfig. Але під час завантаження запис за замовчуванням все ж є vmlinuz-3.7.4-gentoo-third.
Франческо Турко

1
Спробуйте коментувати GRUB_SAVEDEFAULT=trueЦе не має значення, але це не потрібно для числових.
bsd

2
У мене в /etc/default/grubфайлі немає такої опції .
Франческо Турко

0

Я підозрюю, що grub2-mkconfigсортує ядра у зворотному порядку, припускаючи, що вони насамперед містять монотонно зростаючі номери версій. Тож починайте вибирати теги, щоб відповідати цій умові.


0

mv ці нові / не використовувані файли версій у / завантажуються до каталогу резервних копій, наприклад / boot / back initrd.img-3.13.0-xx-generic
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx-generic

перезавантажте систему в режим порятунку, потім виберіть grub у діалоговому вікні порятунку, тоді все буде добре.

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


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