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

18

Я использую 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 .

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

Я также попытался переустановить grub с помощью sudo grub-install / dev / sda - тоже безуспешно

Эрик
источник
Есть ли у вас случайно другой раздел, на который вы установили Ubuntu после настройки текущего раздела, в который вы теперь хотите автоматически загружаться?
fabricator4
Я не уверен, что ты имеешь в виду, я новичок в Linux. Я установил поверх предыдущей установки Ubuntu, но я не обновлялся. Чистая установка. Возможно, я что-то испортил по разделам ... возможно, есть идеи по его исправлению?
Эрик
sudo update-grubи sudo update-grub2запускает ту же команду. Так что не беспокойтесь об этой части.
saji89
Пожалуйста, вы размещаете вывод cat /boot/grub/grub.cfg через pastebin и делитесь ссылкой здесь. Это чтобы увидеть фактический grub.cfgсгенерированный.
saji89
Вот пастбина: pastebin.com/xxe2rLhg из grub.cfg. Спасибо за вашу помощь!
Эрик

Ответы:

23

Как указывают другие ответы, вы можете стать жертвой ситуации с ошибкой записи . Редактирование /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

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

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

C2H5OH
источник
1
Большое спасибо, это именно то, что я искал!
Avio
1
После внесения изменений также запустите update-grubдля создания обновленного /boot/grub/grub.cfgфайла
Кольт
Не убивайте функциональность recordfail! Вы хотите увеличить время ожидания, если произошла ошибка загрузки. Чтобы вручную очистить, все , что вам нужно , это @ sniffski отвечают: grub-editenv create. Тем не менее, может быть какая-то другая причина recordfail, чтобы установить ...
Кэмерон Таклинд
6

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

grub-editenv create

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

sniffski
источник
Спасибо вам большое за обмен. Это работало через SSH, что сделало мой день зависшим на безголовом сервере.
Geppettvs D'Constanzo
1
grub-editenv - unset recordfailработает также и не влияет на другие envs, которые могут быть установлены
Кэмерон Таклинд
2

изменить на 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, которая помогает в настройке с графическим интерфейсом.

введите описание изображения здесь

введите описание изображения здесь

как вы можете видеть из изображения. есть ящик под названием 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

введите описание изображения здесь

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

Suhaib
источник
Без изменений. : - / Я думал, что GRUB_DEFAULT должен был быть числовым # согласно списку в меню? Изменение GRUB_TIMEOUT на 0 не помогло.
Эрик
@Eric вы можете использовать 2 способа: если вы знаете место своей ОС в списке grub, вы можете использовать номер. Но для меня у меня есть 4 дистрибутива Linux и 1 Windows плюс memTest и рекавери. Поэтому мне трудно запомнить их места :) просто чтобы убедиться (я знаю, что вы, возможно, сделали это, но просто чтобы убедиться: P). Вы запускали grub-updateпосле изменения значений?
Сухайб
Я запустил grub-update после изменения значений. : - /
Эрик
Я установил и использовал предоставленное вами приложение для восстановления загрузки, оно работает при первой перезагрузке. После этого меню GRUB возвращается и остается там, пока я не нажму клавишу. Спасибо за вашу помощь, я действительно ценю это. Не уверен, куда идти отсюда ...
Эрик
@Eric, хорошо, я нашел третье решение, проверь его
Suhaib
2

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 секунду. По крайней мере, на новом 16.04
17
1

Я мог бы решить эту проблему, добавив следующую строку в /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 отвечал за время ожидания. Оказывается, есть жестко закодированный тайм-аут 10 с, /etc/grup.d/30_os-proberкоторый не установлен GRUB_TIMEOUT. Вы можете либо отключить os-prober, GRUB_DISABLE_OS_PROBER=trueлибо отредактировать, /etc/grup.d/30_os-proberлибо использовать, GRUB_OS_PROBER_SKIP_LISTчтобы пропустить некоторые разделы жесткого диска (30_os-prober используется, когда где-то находится другая ОС). Смотрите этот Q & A для деталей, Как отмечали другие, другой причиной может быть ошибка записи , в данном случае установленная GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT.

lumbric
источник
0

У меня была проблема с тем, что меню 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
Фабио Ваз
источник
До и после в вашем решении точно так же.
RawwrBag
set timeout=-1это не то же самое, что set timeout=1. Первый - «ждать вечно», а второй - «ждать одну секунду».
Джефф МакДжанкин
0

У моего 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переменная не установлена.

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файл.

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, как раньше.

KeyMaker00
источник