Frage Kopflose Ubuntu-Server-Rechner stecken manchmal im GRUB-Menü fest


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

So ist es Ja wirklich frustrierend, wenn es gelegentlich hochfährt und im GRUB-Menü stecken bleibt und auf einen Tastendruck wartet, um die erste Option auszuwählen.

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

Update # 1: Es gibt keine menu.lst, da dies GRUB 2 ist. Aber ich habe eine / etc / default / grub, die 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 # 2: Ich habe es herausgefunden. Bei Stiefeln, die nach erfolglosen Booten ausgeführt werden, deaktiviert GRUB seine eigene Zeitüberschreitung. Da das Aufrufen des Menüs einen Bootvorgang nicht erfolgreich macht, ist dies eine unausweichliche Schleife. Dieses Verhalten kann durch Bearbeiten der Datei /etc/grub.d/00_header und Ändern der Funktion make_timeout deaktiviert werden:

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

Beenden Sie nun das Grub-Konfigurationsaktualisierungsskript und führen Sie es erneut aus:

sudo update-grub2

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


53
2018-03-04 18:17


Ursprung


Was ist dein /boot/grub/menu.lst aussehen wie? - Shane Madden♦
Sie können Ihre Ergebnisse gerne als Antwort auf Ihre eigene Frage veröffentlichen, anstatt sie zu bearbeiten. So haben wir die Möglichkeit, Ihre Antwort zu verbessern, wenn es uns gefällt. - Skyhawk


Antworten:


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

Wenn Sie beispielsweise ein Zeitlimit von 2 Sekunden haben möchten (um zu vermeiden, dass es bei unbeaufsichtigten Neustarts hängen bleibt), fügen Sie einfach die folgende Zeile hinzu /etc/default/grub:

GRUB_RECORDFAIL_TIMEOUT=2

Denk dran zu rennen update-grub nachdem...


41
2018-02-24 17:54



Dies behob mein ursprüngliches Problem, das mit den OPs identisch war, aber jetzt bemerkte ich, dass ich in seltenen Fällen, wenn ich meinen Server an einen Monitor anschließe, nichts sehe. Der Monitor bekommt nicht einmal eine Verbindung, aber SSH funktioniert immer noch gut. Wird das erwartet? - Dowlers


Hier sind Anweisungen für Ubuntu 10.10, die sich leicht von früheren Versionen unterscheiden. Im Ordner /etc/grub.d/00_header Kommentieren Sie die dumme Suche nach einem früheren Boot-Fehler:

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

Dann aktualisiere:

sudo update-grub

Seien Sie sich bewusst, dass grub2 es finden wird, wenn es ein zweites Laufwerk mit angeschlossenem Linux gibt, und Sie beim Booten fragen, welches Sie wollen. Entfernen Sie alle zusätzlichen Laufwerke, bevor Sie "update-grub" ausführen.

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


18
2018-06-15 06:42





Mit Ubuntu Server 9.10 bin ich auf diese zutiefst unangenehme Designkontrolle gestoßen. Ihre Lösung hat mir enorm geholfen. Ich wollte nur darauf hinweisen, dass die für 9.10 benötigte Korrektur anders ist, da es keine "make_timeout ()" Funktion in der gleichen Datei gibt.

Wechseln Sie für Ubuntu 9.10 an das Ende derselben Datei (00_header) und ändern Sie Folgendes:

if [\ $ {recordfail} = 1]; dann
  Zeitüberschreitung = -1
sonst
  Zeitlimit setzen = $ {GRUB_TIMEOUT}
fi
EOF

zu

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

Wie zuvor, dann:

sudo update-grub2

6
2018-03-14 13:15



Brilliante Lösung, habe mich gefragt, wie man das macht, funktioniert perfekt! Hinweis: Wenn Sie grub aktualisieren, müssen Sie nur Folgendes ausführen: "sudo update grub", unabhängig davon, welche Version von grub Sie gerade ausführen.
Dies hat gerade meinen Speck gerettet - mein Server wurde bei jedem Neustart für eine Woche auf dem Menü grub gesessen - hatte keine Ahnung, was war falsch und hatte alles versucht. Dies und der Tipp in der Frage haben es getan. Vielen Dank. - Darren Greaves


Konfigurieren Sie GRUB für den seriellen Zugriff (und Ihren Bootloader, während Sie gerade dabei sind) und halten Sie einen offenen seriellen Port, ein Nullmodemkabel und einen USB-RS232-Konverter für diese Fälle bereit. Ich betreibe einen kopflosen Server und einen Guruplug und würde es nicht anders haben.


1
2018-04-20 17:37





Ich habe nur einen langen Timeout für Recordfail gesetzt:

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

Das bedeutet, dass Sie beim Booten 30 Sekunden Zeitüberschreitung erhalten, wenn der vorherige Start fehlgeschlagen ist. (Nicht unähnlich wie das andere OS es macht ...)

Dies könnte (und sollte IMHO) sogar eine Einstellung direkt in / etc / default / grub sein.


1
2017-07-28 14:20





Ich weiß wirklich nicht, warum dies die Standardaktion ist, besonders 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
2018-03-06 22:23





Dieser Ansatz ist ein bisschen sauberer - nur ändern /etc/default/grub um die Zeile hinzuzufügen:

GRUB_RECORDFAIL_TIMEOUT=2

... was man bei der Bereitstellung automatisch so 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 möglich sein, wenn die Variable GRUB_RECORDFAIL_TIMEOUT in erwähnt wird /etc/grub.d/00_header (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 darauf, ob es vielleicht sogar noch besser ist, herauszufinden, wie die Fehler aufgezeichnet werden.


1
2018-05-13 06:45



Der Parameter GRUB_RECORDFAIL_TIMEOUT wurde hinzugefügt, seit diese Frage ursprünglich diskutiert wurde. Heutzutage, ja, das ist die bessere Methode. - mikepurvis