GRUB2: как запомнить grub последний выбор

11

В настоящее время я пробую различные дистрибутивы, поэтому, когда я загружаю свой ноутбук, у меня есть несколько ОС на выбор. Обычно все эти дистрибутивы устанавливаются grub2и располагаются в верхней части списка, поэтому они загружаются по умолчанию после завершения установки.

Но Манджаро сделал что-то другое. Он установил некоторую версию grub2, которая запомнила бы, какой дистрибутив я загружал в прошлый раз, и продолжал загружать тот (после перезапуска), пока я не выбрал другой (и затем он загрузил бы тот и так далее).

Я представлял это? Манджаро действительно так делает? Если да, то как я могу установить эту версию в grubмоей системе? Приветствия.


Это мой /etc/grub.d/40_customфайл:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

и это мой /etc/default/grubфайл:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Габриель
источник
Я следовал указаниям в этом вопросе (в основном добавил эти две строки к моему grub), но это не сработало. Главный дистрибутив загружается при перезапуске, хотя я выбрал другой ранее.
Габриэль
Я следовал указаниям в принятом ответе. Я отредактировал /etc/default/grubи изменил строку GRUB_DEFAULT=0на GRUB_DEFAULT=savedи добавил строку, GRUB_SAVEDEFAULT=trueкоторой там нет. Тогда я sudo update-grub. Перезагрузился и выбрал дистрибутив для загрузки, отличный от верхнего. Снова перезагрузился, и по умолчанию был выбран верхний (не тот, который я выбрал ранее) дистрибутив и загрузился.
Габриэль
Я обновил свой вопрос тем, что находится внутри этих двух файлов. Какое изменение я должен сделать?
Габриэль

Ответы:

11

Согласно инструкции GRUB :

'GRUB_DEFAULT'

.................

Если вы установите для этого параметра значение «сохранено», то в меню по умолчанию будет сохранено значение «GRUB_SAVEDEFAULT», «grub-set-default» или «grub-reboot».


'GRUB_SAVEDEFAULT'

Если для этого параметра установлено значение «true», то при выборе записи сохраните ее как новую запись по умолчанию для использования в будущих запусках GRUB. Это полезно только если 'GRUB_DEFAULT = сохранено'; это отдельная опция, потому что GRUB_DEFAULT = сохранено полезен без этой опции в сочетании с grub-set-default или grub-reboot. Отключено по умолчанию. Эта опция основана на блоке среды, который может быть недоступен во всех ситуациях (см. Блок среды).

Вы должны добавить:

GRUB_DEFAULT=saved

а также

GRUB_SAVEDEFAULT=true

к вашему /etc/default/grub. Кроме того, если вы используете пользовательские файлы меню, как /etc/grub.d/40_customвы должны добавить опцию

savedefault

в menuentry / menuentries в этом файле. После этого обновления GRUB:

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

или

update-grub

Если у вас установлено несколько дистрибутивов, убедитесь, что вы настраиваете и обновляете активный GRUB.

don_crissti
источник
1

У меня были проблемы с этим, используя Arch в качестве гостя VirtualBox. Вопрос оказался в моем использовании LVM.

Опять же, из руководства GRUB :

13.2 Блок среды GRUB

Часто полезно иметь возможность запомнить небольшое количество информации от одной загрузки к другой. Например, вы можете захотеть установить пункт меню по умолчанию на основе того, что было выбрано в последний раз. GRUB намеренно не реализует поддержку записи файлов, чтобы минимизировать вероятность того, что загрузчик отвечает за повреждение файловой системы, поэтому файл конфигурации GRUB не может просто создать файл обычным способом. Однако GRUB предоставляет «блок среды», который можно использовать для сохранения небольшого количества состояния.

Блок окружения - это предварительно выделенный 1024-байтовый файл, который обычно находится в / boot / grub / grubenv (хотя вы не должны этого предполагать). Во время загрузки команда load_env (см. Load_env) загружает из нее переменные среды, а команда save_env (см. Save_env) сохраняет в ней переменные среды. Из работающей системы утилиту grub-editenv можно использовать для редактирования блока среды.

В целях безопасности это хранилище доступно только при установке на обычном диске (без LVM или RAID) , с использованием файловой системы без контрольной суммы (без ZFS) и с использованием функций BIOS или EFI (без ATA, USB или IEEE1275).

grub-mkconfig использует эту возможность для реализации GRUB_SAVEDEFAULT (см. Простая настройка).

Маттеус Блан
источник