Вопрос: Безголовый сервер Ubuntu иногда застрял в меню GRUB


У меня установлен Ubuntu 10.10 Server на одноплатной машине в полузакрытой среде; нет клавиатуры или экрана, просто доступ к SSH.

Так что это действительно расстраивает, когда он время от времени загружается и застревает в меню GRUB, ожидая нажатия клавиши, чтобы выбрать первый вариант.

Как настроить GRUB ни при каких обстоятельствах не ждать нажатия клавиши?

Обновление № 1: нет menu.lst, так как это GRUB 2. Но у меня есть / etc / default / grub, который выглядит так:

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

Обновление № 2: Я понял это. В ботинках, которые после неудачных ботинок, GRUB отключает собственный тайм-аут. Поскольку показ меню делает загрузку неудачной, это замкнутый цикл. Это поведение можно отключить, отредактировав файл /etc/grub.d/00_header и изменив функцию make_timeout:

make_timeout ()
{
    echo "set timeout=0"
}

Теперь выйдите и перезапустите скрипт обновления конфигурации grub:

sudo update-grub2

Для меня нет никакого смысла, что это поведение будет по умолчанию для Ubuntu Server, продукта, предназначенного для компьютеров, к которым осуществляется доступ с помощью консоли.


53
2018-03-04 18:17


Источник


Какой ваш /boot/grub/menu.lst выглядит как? - Shane Madden♦
Вы можете публиковать свои результаты как ответ на свой вопрос, а не как редактирование. Таким образом, у нас есть возможность поддержать ваш ответ, если нам это понравится. - Skyhawk


Ответы:


Для Ubuntu 12.04 LTS существует конкретная опция, которая может быть установлена ​​в /etc/default/grub,

Например, если вы хотите иметь 2-секундный тайм-аут (таким образом избегая зависаний при автоматической перезагрузке), просто добавьте следующую строку в /etc/default/grub:

GRUB_RECORDFAIL_TIMEOUT=2

Не забудьте запустить update-grub после этого...


41
2018-02-24 17:54



Это фиксировало мою внутреннюю проблему, которая была такой же, как OP, но теперь я заметил, что в редкий случай, когда я подключаю свой сервер к монитору, я ничего не вижу. Монитор даже не получает соединение, но SSH все еще работает нормально. Ожидается ли это? - Dowlers


Вот инструкции для Ubuntu 10.10, которые немного отличаются от предыдущих версий. В файле /etc/grub.d/00_header прокомментируйте глупую проверку на предыдущую неудачу загрузки:

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

Затем обновите:

sudo update-grub

Имейте в виду, что если есть второй диск с подключенным Linux, grub2 найдет его и спросит вас при загрузке, который вы хотите. Удалите все дополнительные диски перед запуском «update-grub».

Смотрите также https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544


18
2018-06-15 06:42





Я столкнулся с этим крайне неприятным надзором проекта с Ubuntu Server 9.10. Ваше исправление очень помогло мне. Я просто хотел указать, что исправление, необходимое для 9.10, отличается от того, что в одном файле нет функции make_timeout ().

Для Ubuntu 9.10 перейдите к концу того же файла (00_header) и измените следующее:

если [\ $ {recordfail} = 1]; тогда
  set timeout = -1
еще
  set timeout = $ {GRUB_TIMEOUT}
фи
EOF

в

если [\ $ {recordfail} = 1]; тогда
  set timeout = $ {GRUB_TIMEOUT}
еще
  set timeout = $ {GRUB_TIMEOUT}
фи
EOF

Как и раньше, выполните:

sudo update-grub2

6
2018-03-14 13:15



Великолепное решение, интересно, как это сделать, отлично работает! Примечание. Когда вы обновляете grub, вам нужно запустить: «sudo update grub», независимо от того, какая версия grub вы используете.
Это только что спасло мой бекон - мой сервер сидел в меню grub при каждой перезагрузке в течение недели - не знал, что случилось, и все пробовал. Это и совет в вопросе сделали это. Спасибо. - Darren Greaves


Настройте GRUB для последовательного доступа (и вашего загрузчика, пока вы на нем), и сохраните открытый последовательный порт, нуль-модемный кабель и конвертер USB-RS232, удобный для этих экземпляров. Я запускаю безголовый сервер и Guruplug, и у меня не было бы другого пути.


1
2018-04-20 17:37





Я просто установил длительный тайм-аут для записи:

if [ "\${recordfail}" = 1 ]; then
  set timeout=30
else
  set timeout=${2}

Это означает, что вы получаете 30-секундный тайм-аут при загрузке, если предыдущая загрузка не удалась. (Не похоже на то, как это делает другая ОС ...)

Это может (и IMHO) даже быть настройкой прямо в / etc / default / grub.


1
2017-07-28 14:20





Я действительно не знаю, почему это действие по умолчанию, особенно для сервера, но это то, что я реализовал в своих сценариях настройки сервера.

sudo sed -i 's/set timeout=-1/set timeout=30/g' /etc/grub.d/00_header
sudo update-grub

1
2018-03-06 22:23





Этот подход немного чище - просто измените /etc/default/grub добавить строку:

GRUB_RECORDFAIL_TIMEOUT=2

... который можно сделать автоматически с чем-то вроде этого при настройке:

if grep '^GRUB_RECORDFAIL_TIMEOUT=' /etc/default/grub ; then
   echo GOOD: /etc/default/grub
else
   echo FIXING: /etc/default/grub
   perl -pi.bak -e \
      's/^(GRUB_TIMEOUT=.*\n)/${1}GRUB_RECORDFAIL_TIMEOUT=2\n/' \
      /etc/default/grub
   update-grub
fi

Это должно быть жизнеспособным, если переменная GRUB_RECORDFAIL_TIMEOUT указана в /etc/grub.d/00_header (как я вижу в 12.04 LTS) в:

make_timeout ()
{
    cat << EOF
if [ "\${recordfail}" = 1 ]; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1}
else
  set timeout=${2}
fi
EOF
}

Мне немного любопытно, может ли копаться в том, как записываются ошибки, может дать еще лучший ответ.


1
2018-05-13 06:45



Параметр GRUB_RECORDFAIL_TIMEOUT был добавлен, поскольку этот вопрос был первоначально обсужден. В настоящее время, да, это лучший метод. - mikepurvis