Vraag Ubuntu-servermachine zonder hoofd zit soms vast in GRUB-menu


Ik heb Ubuntu 10.10 Server geïnstalleerd op een machine met één board in een semi-embedded omgeving; geen toetsenbord of scherm, alleen SSH-toegang.

Dus het is werkelijk frustrerend wanneer het af en toe opstart en vast komt te zitten in het GRUB-menu, wachtend op een toetsaanslag om de eerste optie te selecteren.

Hoe configureer ik GRUB om onder geen enkele voorwaarde te wachten op een toetsaanslag?

Update # 1: Er is geen menu.lst, omdat dit GRUB 2 is. Maar ik heb wel een / etc / default / grub die er zo uitziet:

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: ik heb het ontdekt. Op laarzen die niet-succesvolle boots volgen, schakelt GRUB zijn eigen time-out uit. Omdat het tonen van het menu een boot niet lukt, is dit een onontkoombare lus. Dit gedrag kan worden uitgeschakeld door het bestand /etc/grub.d/00_header te bewerken en de make_timeout-functie te wijzigen:

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

Sluit nu en voer het grub configuratie updater script uit:

sudo update-grub2

Het heeft voor mij geen zin dat dit gedrag de standaardinstelling is voor Ubuntu Server, een product bedoeld voor machines die via een console worden benaderd.


53
2018-03-04 18:17


oorsprong


Wat is jouw /boot/grub/menu.lst ziet eruit als? - Shane Madden♦
U bent van harte welkom om uw bevindingen te plaatsen als een antwoord op uw eigen vraag, in plaats van als een bewerking. Op die manier hebben we de mogelijkheid om uw antwoord te verbeteren als we het leuk vinden. - Skyhawk


antwoorden:


Voor Ubuntu 12.04 LTS is er een specifieke optie die kan worden ingesteld /etc/default/grub.

Als u bijvoorbeeld een time-out van 2 seconden wilt hebben (waardoor u niet langer wacht tot onbeheerde reboots), voegt u gewoon de volgende regel toe in /etc/default/grub:

GRUB_RECORDFAIL_TIMEOUT=2

Vergeet niet om te rennen update-grub daarna...


41
2018-02-24 17:54



Dit loste mijn oorspronkelijke probleem op, dat hetzelfde was als de OP's, maar nu merkte ik dat in het zeldzame geval dat ik mijn server op een monitor aansluit, ik niets zie. De monitor krijgt niet eens een verbinding, maar SSH werkt nog steeds prima. Wordt dit verwacht? - Dowlers


Hier zijn instructies voor Ubuntu 10.10, die enigszins afwijken van eerdere versies. In bestand /etc/grub.d/00_header commentaar geven op de domme controle op een eerdere opstartfout:

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

Update dan:

sudo update-grub

Houd er rekening mee dat als er een tweede schijf is waarop Linux is aangesloten, grub2 deze zal vinden en je bij het opstarten zal vragen welke je wilt. Verwijder alle extra schijven voordat u "update-grub" uitvoert.

Zie ook https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544


18
2018-06-15 06:42





Ik kwam dit zeer onaangename ontwerpoverzicht tegen met Ubuntu Server 9.10. Jouw oplossing heeft me enorm geholpen. Ik wilde er alleen op wijzen dat de fix die nodig is voor 9.10 anders is, want er is geen "make_timeout ()" -functie in hetzelfde bestand.

Ga voor Ubuntu 9.10 naar het einde van hetzelfde bestand (00_header) en wijzig het volgende:

als [\ $ {recordfail} = 1]; dan
  time-out = -1 instellen
anders
  timeout instellen = $ {GRUB_TIMEOUT}
fi
EOF

naar

als [\ $ {recordfail} = 1]; dan
  timeout instellen = $ {GRUB_TIMEOUT}
anders
  timeout instellen = $ {GRUB_TIMEOUT}
fi
EOF

Zoals eerder, voer dan uit:

sudo update-grub2

6
2018-03-14 13:15



Briljante oplossing, hebben zich afgevraagd hoe dit moet, werkt perfect! Opmerking: wanneer u grub bijwerkt, hoeft u alleen maar: "sudo update grub" uit te voeren, ongeacht de versie van de grub die u gebruikt.
Dit heeft zojuist mijn spek bespaard - mijn server zat bij het startmenu bij elke reboot voor een week - had geen idee wat er mis was en had alles geprobeerd. Dit en de tip in de vraag deden het. Heel erg bedankt. - Darren Greaves


Configureer GRUB voor seriële toegang (en je bootloader, terwijl je bezig bent) en houd een open seriële poort, nulmodemkabel en USB-naar-RS232-convertor bij de hand voor deze instanties. Ik run een headless server en een Guruplug en zou het niet op een andere manier willen hebben.


1
2018-04-20 17:37





Ik heb gewoon een lange time-out ingesteld voor recordfail:

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

Dit betekent dat je een time-out van 30 seconden krijgt als je opstart, als de vorige keer opstarten mislukt is. (Niet anders dan hoe dat andere besturingssysteem het doet ...)

Dit zou (en IMHO zou) zelfs een instelling kunnen zijn daar in / etc / default / grub.


1
2017-07-28 14:20





Ik weet echt niet waarom dit de standaardactie is, vooral voor een server, maar dit is wat ik heb geïmplementeerd in mijn serversetup-scripts.

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





Deze aanpak is een beetje schoner - gewoon aanpassen /etc/default/grub om de regel toe te voegen:

GRUB_RECORDFAIL_TIMEOUT=2

... wat je automatisch zou kunnen doen met zoiets als bij provisioning:

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

Dit moet haalbaar zijn als de variabele GRUB_RECORDFAIL_TIMEOUT wordt vermeld in /etc/grub.d/00_header (zoals ik zie in 12.04 LTS) in:

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

Ik ben een beetje nieuwsgierig of het onderzoeken van de manier waarop de fouten worden geregistreerd misschien een nog beter antwoord oplevert.


1
2018-05-13 06:45



De parameter GRUB_RECORDFAIL_TIMEOUT is toegevoegd sinds deze vraag oorspronkelijk werd besproken. Tegenwoordig, ja, dit is de betere methode. - mikepurvis