Не удается получить меню Grub по таймауту (или уйти)

Я использую Ubuntu 12.04.

Я не могу на всю жизнь заставить меню grub (с опциями) уйти.

Я хотел бы, чтобы он автоматически загружался при первом варианте. Я отредактировал / etc / default / grub так, чтобы он выглядел следующим образом:

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

После этого я запустил sudo update-grub . Затем я понял, что у меня есть grub 2, поэтому я запустил sudo update-grub2 (оба создают впечатление, что они успешно создают файл grub.cfg .

I перезагрузите мой компьютер и он возвращается в меню grub и просто сидит там, пока я не сделаю выбор. Это не желательно, если питание отключается ...: -)

Я также пытался переустановить grub с помощью [1111 ] sudo grub-install / dev / sda - также неудачно

18
задан 07.02.2020, 10:52

7 ответов

Как указывают другие ответы, вы можете стать жертвой ситуации с ошибкой записи . Редактирование /boot/grub/grub.cfg вручную должно быть исключено, поскольку оно генерируется автоматически. Еще одно предложение, которое можно увидеть вокруг, - это отредактировать /etc/grub.d/00_header, но тогда оно может потребовать вмешательства пользователя в обновления.

Самое простое решение - определить недокументированную переменную GRUB_RECORDFAIL_TIMEOUT в /etc/default/grub. Например:

GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT

Редактировать

См. этот ответ для более подробной информации.

23
ответ дан 07.02.2020, 10:52

измените GRUB_TIMEOUT=10 на ноль

Это мой файл конфигурации:

GRUB_DEFAULT="Ubuntu, with Linux 3.2.0-30-generic-pae"
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

Сначала напишите имя ОС, для которой вы хотите загрузить напрямую. Мой Ubuntu. Таким образом, вы напишите это как в GRUB_DEFAULT="Ubuntu, with Linux x.x.x-xx-generic-pae"

, затем я использовал 1 секунду в GRUB_TIMEOUT=, чтобы дать мне 1 секунду перед выбором ОС по умолчанию (если мне нужно загрузиться с другой ОС, например Xubuntu)

что касается GRUB_CMDLINE_LINUX_DEFAULT="", если вы удалите quite splash, он покажет вам тексты вместо логотипа Ubuntu во время процесса загрузки (мне нравится это так: P)


Там другое решение:

Существует программа под названием boot-repair , которая помогает в настройке с графическим интерфейсом.

enter image description here

enter image description here

, как вы можете видеть из изображения. есть поле под названием Unhide boot menu. Просто снимите флажок и нажмите аппи. Вы можете получить к нему доступ, нажав на стрелку дополнительных параметров.

установить загрузочный ремонт

sudo add-apt-repository ppa:yannubuntu/boot-repair

sudo apt-get update

sudo apt-get install -y boot-repair

и затем запустить boot-reapir либо из терминала, либо из тире.


3-е решение:

Вы можете использовать простое в использовании приложение с графическим интерфейсом, называемое grub-customizer, чтобы сделать вашу жизнь немного проще. Как следует из названия, вы можете сделать гораздо больше, чем просто изменить порядок пунктов меню Grub.

Вы можете установить его:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

enter image description here

, как вы можете видеть из меню, есть опция show menu. Снимите флажок и посмотрите, работает ли он

2
ответ дан 07.02.2020, 10:53

Я мог бы решить эту проблему, добавив следующую строку в /etc/default/grub

GRUB_DISABLE_OS_PROBER=true

... и затем запустив sudo update-grub.

Объяснение: Файл /boot/grub/grub.cfg создается путем запуска update-grub с использованием файлов в /etc/grub.d и /etc/default/grub. Поэтому вам не следует редактировать grub.cfg, но может быть полезно выяснить, почему установлено время ожидания. Найдите строки, начинающиеся с set timeout=, а затем найдите следующую строку, начиная с ### END /etc/grub.d/ .... Это может дать вам подсказки, какой скрипт устанавливает время ожидания. В моем случае сценарий os-prober отвечал за время ожидания. Оказывается, что в /etc/grup.d/30_os-prober есть жестко заданное время ожидания 10 с, которое не установлено в GRUB_TIMEOUT. Вы можете либо отключить os-prober с помощью GRUB_DISABLE_OS_PROBER=true, либо отредактировать /etc/grup.d/30_os-prober, либо использовать GRUB_OS_PROBER_SKIP_LIST, чтобы пропустить некоторые разделы жесткого диска (30_os-prober используется, когда где-то находится другая ОС). Смотрите этот Q & amp; A для деталей . Как отмечали другие, другой причиной может быть ошибка записи , в данном случае набор GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT.

1
ответ дан 07.02.2020, 10:53

У моего Ubuntu всегда был тайм-аут 30 секунд, я бы установил значение или нет. Вот как я узнал, что recordfail был отсутствующим значением .

1. Проверьте фактический скрипт grub /boot/grub/grub.cfg

ИМХО, лучший способ проверить, что будет делать Grub - это открыть /boot/grub/grub.cfg. Это сценарий, автоматически генерируемый grub-mkconfig с использованием шаблонов из /etc/grub.d и настроек из /etc/default/grub.

Вокруг строки 109 вы увидите что-то вроде:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=30 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

В моем случае с помощью этого сгенерированного скрипта я смог обнаружить, что переменная recordfail не установлена. [1121 ] [Тысяча сто двадцать два] [одна тысяча сто тридцать один] 2. Если переменная recordfail не установлена, установите ее

Откройте /etc/default/grub в своем любимом текстовом редакторе (например, vim) и затем установите переменную GRUB_RECORDFAIL_TIMEOUT на заданное значение, например 5 секунд .

Ваш файл конфигурации должен выглядеть следующим образом:

GRUB_DEFAULT=0
GRUB_TIMEOUT=3
GRUB_TIMEOUT_STYLE=hidden
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_RECORDFAIL_TIMEOUT=5

3. Обновите конфигурацию для запуска с помощью update-grub

Последний шаг, обновите конфигурацию для запуска с помощью update-grub. На данный момент GRUB2 будет использовать установленное время ожидания. Эта команда восстановит файл /boot/grub.cfg.

[1 133] 4. Проверьте сгенерированный результат сценария

Снова откройте /boot/grub.cfg и проверьте результат в строке 109:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=5 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

Обратите внимание, что значение в строке 109 теперь равно 5, а не 30, как и раньше.

0
ответ дан 07.02.2020, 10:54

Использование:

grub-editenv create

Это очистит файл среды grub и в следующий раз должно загрузиться.

5
ответ дан 07.02.2020, 10:54
Опции

, GRUB_HIDDEN_TIMEOUT и GRUB_HIDDEN_TIMEOUT_QUIET устарели. Так что закомментируйте их.

Чтобы пропустить меню и показать его, только удерживая ESC, добавьте:

GRUB_TIMEOUT_STYLE='countdown'
GRUB_TIMEOUT=1

Образец /etc/default/grub

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_TIMEOUT_STYLE=countdown
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

'GRUB_TIMEOUT_STYLE' : если для этой опции задано значение «обратный отсчет» или «скрытый», то за до отображения меню GRUB будет ожидать истечения времени ожидания, установленного параметром «GRUB_TIMEOUT». Если в течение этого времени нажать ESC , отобразится меню и будет ждать ввода.

1
ответ дан 07.02.2020, 10:55

У меня была проблема с тем, что меню grub появлялось всегда после того, как я использовал AUFS (unionfs) для чтения корневой файловой системы только для чтения. Мне пришлось физически нажимать клавишу ввода на сервере после каждой загрузки. Я следовал инструкциям здесь: отключить меню grub 2 . С тех пор у меня вообще не было проблем.

Отредактируйте /boot/grub/grub.cfg и измените:

if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi

на

if [ ${recordfail} = 1 ]; then
  set timeout=1
else
  set timeout=10
fi
0
ответ дан 07.02.2020, 10:56