Vanwege de recente wijzigingen in de examendoelstellingen van het LFCS-certificeringsexamen die ingaan op 2 februari 2016, voegen we de benodigde onderwerpen toe aan de hier gepubliceerde LFCS-serie. Om je voor te bereiden op dit examen, word je ook ten zeerste aangemoedigd om de LFCE-serie te volgen.

In dit artikel zullen we je introduceren tot GRUB en uitleggen waarom een opstartlader nodig is en hoe dit veelzijdigheid aan het systeem toevoegt.
Het Linux opstartproces vanaf het moment dat je op de aan-uitknop van je computer drukt totdat je een volledig functioneel systeem hebt, volgt deze hoog-niveau-sequentie:
- 1. Een proces dat bekend staat als POST (Power-On Self Test) voert een algemene controle uit op de hardwarecomponenten van je computer.
- 2. Wanneer POST is voltooid, geeft het de controle over aan de opstartlader, die op zijn beurt de Linux-kernel in het geheugen laadt (samen met initramfs) en uitvoert. De meest gebruikte opstartlader in Linux is de GRand Unified Boot loader, of kortweg GRUB.
- 3. De kernel controleert en heeft toegang tot de hardware, en voert vervolgens het initiële proces uit (meestal bekend onder de generieke naam “init“), dat op zijn beurt het systeem opstart door services te starten.
In Deel 7 van deze serie (“SysVinit, Upstart en Systemd“) hebben we de servicemanagementsystemen en -tools geïntroduceerd die worden gebruikt door moderne Linux-distributies. U wilt dat artikel misschien bekijken voordat u verder gaat.
Introductie van GRUB Boot Loader
Er zijn twee belangrijke GRUB versies (v1 soms ook wel GRUB Legacy genoemd en v2) te vinden in moderne systemen, hoewel de meeste distributies standaard v2 gebruiken in hun nieuwste versies. Alleen Red Hat Enterprise Linux 6 en zijn afgeleiden gebruiken vandaag de dag nog steeds v1.
We zullen ons daarom voornamelijk richten op de functies van v2 in deze handleiding.
Ongeacht de GRUB-versie, stelt een opstartlader de gebruiker in staat om:
- 1). de manier waarop het systeem zich gedraagt te wijzigen door verschillende kernels op te geven,
- 2). te kiezen tussen alternatieve besturingssystemen om op te starten, en
- 3). configuratiestanza’s toe te voegen of te bewerken om opstartopties te wijzigen, onder andere dingen.
Vandaag wordt GRUB onderhouden door het GNU-project en is goed gedocumenteerd op hun website. U wordt aangemoedigd om de officiële GNU-documentatie te gebruiken terwijl u deze handleiding doorloopt.
Wanneer het systeem opstart, wordt u gepresenteerd met het volgende GRUB-scherm in de hoofdconsole. In eerste instantie wordt u gevraagd te kiezen tussen alternatieve kernels (standaard start het systeem met de nieuwste kernel) en kunt u een GRUB-opdrachtregel invoeren (met c
) of de opstartopties bewerken (door op de toets e
te drukken).

Een van de redenen waarom u zou overwegen op te starten met een oudere kernel is een hardwareapparaat dat voorheen goed werkte en na een upgrade begon te “haperen” (zie deze link in de AskUbuntu-forums voor een voorbeeld).
De configuratie van GRUB v2 wordt bij het opstarten gelezen vanuit /boot/grub/grub.cfg
of /boot/grub2/grub.cfg
, terwijl /boot/grub/grub.conf
of /boot/grub/menu.lst
worden gebruikt in v1. Deze bestanden mogen NIET met de hand worden bewerkt, maar worden aangepast op basis van de inhoud van /etc/default/grub
en de bestanden die zich bevinden in /etc/grub.d
.
In een CentOS 7, hier is het configuratiebestand dat wordt aangemaakt wanneer het systeem voor het eerst wordt geïnstalleerd:
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet" GRUB_DISABLE_RECOVERY="true"
Naast de online documentatie, kunt u ook de GNU GRUB-handleiding vinden met behulp van de volgende info:
# info grub
Als u specifiek geïnteresseerd bent in de beschikbare opties voor /etc/default/grub, kunt u de configuratiesectie direct oproepen:
# info -f grub -n 'Simple configuration'
Met het bovenstaande commando zult u ontdekken dat GRUB_TIMEOUT
de tijd instelt tussen het moment waarop het initiële scherm verschijnt en het automatische opstarten van het systeem begint, tenzij onderbroken door de gebruiker. Wanneer deze variabele is ingesteld op -1
, wordt het opstarten niet gestart totdat de gebruiker een selectie maakt.
Wanneer meerdere besturingssystemen of kernels zijn geïnstalleerd op dezelfde machine, vereist GRUB_DEFAULT
een geheel getal dat aangeeft welke OS- of kernelvermelding in het GRUB initiële scherm standaard moet worden geselecteerd om op te starten. De lijst met vermeldingen kan niet alleen worden bekeken in het bovenstaande splash-scherm, maar ook met behulp van het volgende commando:
In CentOS en openSUSE:
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
In Ubuntu:
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg
In het voorbeeld dat wordt getoond in de onderstaande afbeelding, als we willen opstarten met de kernelversie 3.10.0-123.el7.x86_64 (4e vermelding), moeten we GRUB_DEFAULT
instellen op 3
(vermeldingen zijn intern genummerd, beginnend met nul) als volgt:
GRUB_DEFAULT=3

Een laatste GRUB-configuratievariabele die van bijzonder belang is, is GRUB_CMDLINE_LINUX
, die wordt gebruikt om opties door te geven aan de kernel. De opties die via GRUB aan de kernel kunnen worden doorgegeven, zijn goed gedocumenteerd in het Kernel Parameters-bestand en in man 7 bootparam.
Huidige opties in mijn CentOS 7-server zijn:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
Waarom zou je de standaard kernelparameters willen wijzigen of extra opties willen doorgeven? In eenvoudige bewoordingen, er kunnen momenten zijn waarop je de kernel bepaalde hardwareparameters moet vertellen die het niet zelf kan bepalen, of om de waarden die het zou detecteren te overschrijven.
Dit overkwam mij niet zo lang geleden toen ik Vector Linux, een afgeleide van Slackware, probeerde op mijn 10 jaar oude laptop. Na de installatie detecteerde het niet de juiste instellingen voor mijn videokaart, dus moest ik de kernelopties die via GRUB werden doorgegeven aanpassen om het te laten werken.
Nog een voorbeeld is wanneer je het systeem naar de single-usermodus moet brengen om onderhoudstaken uit te voeren. Dit kun je doen door het woord single toe te voegen aan GRUB_CMDLINE_LINUX
en opnieuw op te starten:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"
Na het bewerken van /etc/defalt/grub
, moet je update-grub
uitvoeren (Ubuntu) of grub2-mkconfig -o /boot/grub2/grub.cfg
(CentOS en openSUSE) om vervolgens grub.cfg
bij te werken (anders gaan de wijzigingen verloren bij het opstarten).
Deze opdracht zal de eerder genoemde opstartconfiguratiebestanden verwerken om grub.cfg
bij te werken. Deze methode zorgt ervoor dat wijzigingen permanent zijn, terwijl opties die via GRUB worden doorgegeven tijdens het opstarten alleen geldig zijn tijdens de huidige sessie.
Linux GRUB-problemen oplossen
Als je een tweede besturingssysteem installeert of als het configuratiebestand van je GRUB beschadigd raakt door menselijke fouten, zijn er manieren om je systeem weer op de been te krijgen en opnieuw op te starten.
Druk op het initiële scherm op c
om een GRUB-opdrachtregel te krijgen (onthoud dat je ook op e
kunt drukken om de standaard opstartopties te bewerken) en gebruik help om de beschikbare commando’s in de GRUB-prompt te tonen:

We zullen ons richten op ls, dat de geïnstalleerde apparaten en bestandssystemen zal weergeven, en we zullen onderzoeken wat het vindt. In de onderstaande afbeelding kunnen we zien dat er 4 harde schijven zijn (hd0
tot hd3
).
Alleen hd0
lijkt te zijn gepartitioneerd (zoals blijkt uit msdos1 en msdos2, waar 1 en 2 de partitienummers zijn en msdos het partitieschema is).
Laten we nu de eerste partitie op hd0
(msdos1) onderzoeken om te zien of we daar GRUB kunnen vinden. Met deze aanpak kunnen we Linux opstarten en daar andere geavanceerde tools gebruiken om het configuratiebestand te repareren of GRUB opnieuw te installeren als dat nodig is:
# ls (hd0,msdos1)/
Zoals we kunnen zien in het gemarkeerde gebied, vonden we de grub2 map in deze partitie:

Zodra we zeker weten dat GRUB zich bevindt in (hd0,msdos1), laten we GRUB weten waar het zijn configuratiebestand kan vinden en geven we het opdracht om te proberen zijn menu te starten:
set prefix=(hd0,msdos1)/grub2 set root=(hd0,msdos1) insmod normal normal

Vervolgens kiest u in het GRUB-menu een vermelding en drukt u op Enter om deze te starten. Nadat het systeem is opgestart, kunt u het commando grub2-install /dev/sdX
uitvoeren (wijzig sdX
naar het apparaat waarop u GRUB wilt installeren). De opstartinformatie wordt dan bijgewerkt en alle gerelateerde bestanden worden hersteld.
# grub2-install /dev/sdX
Andere meer complexe scenario’s worden gedocumenteerd, samen met hun voorgestelde oplossingen, in de Ubuntu GRUB2 Troubleshooting guide. De concepten die daar worden uitgelegd, zijn ook geldig voor andere distributies.
Samenvatting
In dit artikel hebben we u kennis laten maken met GRUB, aangegeven waar u documentatie zowel online als offline kunt vinden, en uitgelegd hoe u een scenario kunt aanpakken waarbij een systeem niet meer goed opstart vanwege een opstartladergerelateerd probleem.
Gelukkig is GRUB een van de best gedocumenteerde tools en kunt u gemakkelijk hulp vinden, zowel in de geïnstalleerde documentatie als online met behulp van de bronnen die we in dit artikel hebben gedeeld.
Heeft u vragen of opmerkingen? Aarzel niet om dit te laten weten via het opmerkingenformulier hieronder. We horen graag van u!
Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/