it-swarm.com.de

Der kopflose Ubuntu-Server blieb manchmal im Menü GRUB) hängen

Ich habe Ubuntu 10.10 Server auf einem Single-Board-Computer in einer Semi-Embedded-Umgebung installiert. Keine Tastatur oder Bildschirm, nur SSH-Zugriff darauf.

Es ist also wirklich frustrierend, wenn es gelegentlich hochfährt und im Menü GRUB) hängen bleibt und auf einen Tastendruck wartet, um die erste Option auszuwählen.

Wie konfiguriere ich GRUB, um unter keinen Umständen auf einen Tastendruck zu warten?

Update Nr. 1: Es gibt kein menu.lst, da dies GRUB 2. Aber ich habe ein/etc/default/grub, das so ist:

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

Update Nr. 2: Ich habe es herausgefunden. Bei Booten, die auf erfolglose Starts folgen, deaktiviert GRUB deaktiviert das eigene Timeout. Da das Anzeigen des Menüs einen Boot nicht erfolgreich macht, ist dies eine unausweichliche Schleife. Dieses Verhalten kann durch Bearbeiten von/etc/grub deaktiviert werden. d/00_header-Datei und Ändern der Funktion make_timeout:

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

Beenden Sie nun das Skript zur Aktualisierung der Grub-Konfiguration und führen Sie es erneut aus:

Sudo update-grub2

Für mich macht es keinen Sinn, dass dieses Verhalten die Standardeinstellung für Ubuntu Server ist, ein Produkt für Computer, auf die über die Konsole zugegriffen wird.

54
mikepurvis

Für Ubuntu 12.04 LTS gibt es eine spezielle Option, die in /etc/default/grub Eingestellt werden kann.

Wenn Sie beispielsweise eine Zeitüberschreitung von 2 Sekunden wünschen (wodurch Hänge bei unbeaufsichtigten Neustarts vermieden werden), fügen Sie einfach die folgende Zeile in /etc/default/grub Ein:

GRUB_RECORDFAIL_TIMEOUT=2

Denken Sie daran, danach update-grub Auszuführen ...

41

Hier finden Sie Anweisungen für Ubuntu 10.10, die sich geringfügig von früheren Versionen unterscheiden. Kommentieren Sie in der Datei /etc/grub.d/00_header die dumme Prüfung auf einen vorherigen Startfehler aus:

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

Dann aktualisieren:

Sudo update-grub

Beachten Sie, dass grub2 ein zweites Laufwerk mit angeschlossenem Linux findet und Sie beim Booten fragt, welches Sie möchten. Entfernen Sie alle zusätzlichen Laufwerke, bevor Sie "update-grub" ausführen.

Siehe auch https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544

18
Bryce

Ich bin mit Ubuntu Server 9.10 auf dieses zutiefst unangenehme Design-Versehen gestoßen. Ihr Fix hat mir enorm geholfen. Ich wollte nur darauf hinweisen, dass das für 9.10 erforderliche Update unterschiedlich ist, da es in derselben Datei keine Funktion "make_timeout ()" gibt.

Gehen Sie für Ubuntu 9.10 zum Ende derselben Datei (00_header) und ändern Sie Folgendes:

 if [\ $ {recordfail} = 1]; dann 
 setze Timeout = -1 
 sonst 
 setze Timeout = $ {GRUB_TIMEOUT} 
 fi 
 EOF 

zu

 if [\ $ {recordfail} = 1]; dann 
 setze timeout = $ {GRUB_TIMEOUT} 
 sonst 
 setze timeout = $ {GRUB_TIMEOUT} 
 fi 
 EOF 

Führen Sie dann wie zuvor Folgendes aus:

 Sudo update-grub2 
6
GNTC

Ich weiß wirklich nicht, warum dies die Standardaktion ist, insbesondere für einen Server, aber das habe ich in meinen Server-Setup-Skripten implementiert.

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

Dieser Ansatz ist etwas sauberer - ändern Sie einfach /etc/default/grub, Um die Zeile hinzuzufügen:

GRUB_RECORDFAIL_TIMEOUT=2

... was man bei der Bereitstellung automatisch mit so etwas machen könnte:

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

Dies sollte sinnvoll sein, wenn die Variable GRUB_RECORDFAIL_TIMEOUT in /etc/grub.d/00_header Erwähnt wird (wie ich in 12.04 LTS sehe) in:

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

Ich bin ein bisschen neugierig, ob es noch besser ist, zu untersuchen, wie die Fehler aufgezeichnet werden.

1
Alex North-Keys

Ich habe gerade eine lange Zeitüberschreitung für Rekordfehler festgelegt:

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

Das heißt, Sie erhalten beim Booten eine Zeitüberschreitung von 30 Sekunden, wenn der vorherige Start fehlgeschlagen ist. (Nicht anders als das andere Betriebssystem ...)

Dies könnte (und sollte meiner Meinung nach) sogar eine Einstellung genau dort in/etc/default/grub sein.

1
Gaute Lund

Konfigurieren Sie GRUB für den seriellen Zugriff (und Ihren Bootloader, während Sie gerade dabei sind) und halten Sie für diese Instanzen einen offenen seriellen Anschluss, ein Nullmodemkabel und einen USB-zu-RS232-Konverter bereit. I. Führen Sie einen kopflosen Server und einen Guruplug aus und würden Sie es nicht anders haben.

1
LawrenceC