Как правильно настроить правильный пункт меню 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/все еще существует?
ot--

Ответы:


12

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

Примечание . Это не изменит запись по умолчанию в меню grub, т. Е. Запись по умолчанию будет по-прежнему обозначать ту же запись, что и сейчас. Но изображение, которое будет загружено по умолчанию, будет 4-ым изображением в разделе «Дополнительные параметры». Чтобы сделать 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'

и перезагрузите компьютер.


Weird. Индекс подменю начинается с 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 по умолчанию, снипплет из /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

Переместите эти новые / неиспользуемые файлы версий в / boot в каталог резервного копирования, например / 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-хх-родовое

перезагрузите систему в режиме восстановления, затем выберите grub в диалоге восстановления, тогда все будет хорошо.

это наиболее подходящий метод, я думаю. Я использую Ubuntu 14.04.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.