54 votes

Machine serveur Ubuntu sans tête parfois bloquée au menu Grub.

J'ai Ubuntu 10.10 Server installé sur une machine monocarte dans un environnement semi-intégré ; pas de clavier ni d'écran, juste un accès SSH.

Donc c'est realmente frustrant lorsqu'il démarre occasionnellement et reste bloqué sur le menu Grub, attendant une frappe pour sélectionner la première option.

Comment configurer Grub pour qu'il n'attende en aucun cas la frappe d'une touche ?

Mise à jour #1 : Il n'y a pas de menu.lst, puisque c'est Grub 2. Mais j'ai un /etc/default/Grub qui est comme ça :

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=""

Mise à jour n°2 : J'ai trouvé la solution. Lors des démarrages qui suivent des démarrages infructueux, Grub désactive son propre timeout. Puisque l'affichage du menu fait échouer un démarrage, c'est une boucle inéluctable. Ce comportement peut être désactivé en éditant le fichier /etc/Grub.d/00_header, et en modifiant la fonction make_timeout :

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

Maintenant, quittez et exécutez à nouveau le Grubmise à jour de la configuration Grub :

sudo update-grub2

Je trouve illogique que ce comportement soit le comportement par défaut d'Ubuntu Server, un produit destiné aux machines accessibles par console.

1voto

Ajay Singh Points 103

Je ne sais vraiment pas pourquoi c'est l'action par défaut, surtout pour un serveur, mais c'est ce que j'ai implémenté dans la configuration de mon serveur scripts.

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

1voto

Alex North-Keys Points 521

Cette approche est un peu plus propre - il suffit de modifier /etc/default/grub pour ajouter la ligne :

GRUB_RECORDFAIL_TIMEOUT=2

...ce que l'on pourrait faire automatiquement avec quelque chose comme ça dans le provisionnement :

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

Cela devrait être viable si la variable GRUB_RECORDFAIL_TIMEOUT est mentionnée dans le document /etc/grub.d/00_header (comme je le vois dans 12.04 LTS) dans :

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

Je suis un peu curieux de savoir si le fait de creuser dans la manière dont les échecs sont enregistrés pourrait donner une réponse encore meilleure.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X