Linux opstarten vanaf de Grub commandline – noodopdrachten

Noud van Kruysbergen
2

Inhoudsopgave

Als je Linux-pc bij het opstarten de commandline van de bootloader Grub laat zien in plaats van te starten, hoef je niet meteen naar het live Linux-systeem te grijpen. De Grub-shell is verrassend veelzijdig en biedt meer dan voldoende voor veel reddingstaken. Met de juiste noodopdrachten kun je alsnog Linux opstarten.

Start je Linux opeens niet meer op en krijg je alleen nog maar de commandline van de bootloader Grub? Dan hoef je die Linux-installatie niet meteen op te geven, want de commandline van de GRand-Unified Bootloader kan vaak gebruikt worden om het systeem met een paar eenvoudige stappen weer makkelijk aan de praat te krijgen.

Grub-commando’s

Het gebruik van de commandline van Grub 2, die bij moderne Linux-distributies vaak ingezet wordt, lijkt wel wat op bash. Het leuke is dat de Grub-shell alle commando’s bevat die je al kent van het Grub-configuratiebestand grub.cfg. Zelfs eenvou­dige varianten van ls en cat zijn voor de commandline van de bootloader geïmplementeerd.

Met behulp van help kun je alle commando’s laten weergeven en ze meer in detail laten uitleggen met bijvoorbeeld help cat. Net als bij bash werkt op veel plaatsen het automatisch aanvullen via de Tab-toets. Tekst kan worden geknipt met Ctrl+K (van cursor naar einde) of Ctrl+U (van cursor naar begin) en weer worden ingevoegd met Ctrl+Y.

Het toetsenbord in de Grub-shell is standaard altijd ingesteld op een Amerikaanse lay-out. Het is mogelijk om vooraf een andere lay-out in te stellen, maar dit is meestal de moeite niet waard en kan de Grub-­configuratie verknoeien. Op internet rouleren diverse tabellen met daarin de toetsen die je moet gebruiken als je een toetsenbord met een andere indeling hebt.

Grub en Grub Rescue Shell

Er zijn verschillende redenen waarom je op de commandline terecht zou kunnen komen. Wellicht kan Grub zijn configuratiebestand niet vinden of lezen, omdat het dit niet kan vinden op de opstart­systeempartitie of omdat het bestand beschadigd is. Redenen daarvoor zijn gewijzigde schijfnamen ten gevolge van een wijziging in de partities of een andere volgorde van de schijven. Als Grub zelf zijn eigen programmagegevens niet kan vinden, kom je in een gereduceerde reddingsmodus terecht, de Grub Rescue Shell. Daar ontbreken de makkelijke functies zoals auto-complete.

Linux opstarten grub commando repareren

Het aanvullen met de Tab-toets in de Grub-shell vereenvoudigt de bediening en geeft veel details prijs over de gedetecteerde partities en schijven.

Door het systeem wandelen

De Grub-shell heeft een eigen naamgeving voor schijven en partities. Zo is (hd0) vaak de schijf die onder Linux toegankelijk is via /dev/sda. Dat kan echter snel ingewikkeld worden op systemen met meerdere schijven, omdat daar (hd0) ook kan staan voor het onder Linux aangesproken volume op /dev/sdb. Commando’s zoals ls geven bij partitienamen ook aan welk partitieschema een schijf gebruikt: (hd0,mbr1). Je kunt je echter de moeite besparen om die informatie in te voeren en in plaats van (hd0,gpt1) gewoon (hd0,1) schrijven. In tegenstelling tot wat informatici gewend zijn, begint het tellen van de partities bij 1. Voor schijven begint het wel met 0. Gelukkig hoef je de partities van je systeem niet uit het hoofd te weten.

Het commando ls geeft een lijst van alle herkende schijven en partities. Om het type bestands­systeem van de eerste partitie op de eerste schijf uit te lezen, typ je het volgende commando:

ls (hd0,1)

Dat levert bijvoorbeeld (hd0,1): Filesystem is fat terug.

Wil je gedetailleerde informatie over de gedetecteerde partities, typ dan ls (hd0) en druk op de Tab-toets. De uitvoer laat dan details zien zoals het bestandssysteem, de UUID, het startpunt en de grootte van de partities. Grub stopt echter niet bij de partitie­types, maar kan ook de inhoud van alle gangbare bestandssystemen lezen. Net als met bash kun je de Tab-aanvulling gebruiken om de paden te comple­teren. Het volgende commando geeft de inhoud van de tweede partitie weer:

ls (hd0,2)/

Grub-configuratie herstellen

Als je de Grub-directory hebt ontdekt en grub.cfg daarin staat, kun je proberen het configuratie­bestand te laden met

configfile (hd0,2)/grub/grub.cfg

Als het bestand in orde is, zal Grub automatisch het bootmenu laden, waardoor je idealiter weer gewoon verder kunt. Als je een van de boot-items moet bewerken, druk je op de toets E om over te schakelen naar de bewerkingsmodus. Daarna start je het opstart­proces weer met Ctrl+X.

Vertel Grub waar hij de grub-directory (meestal /boot/grub) kan vinden, inclusief het configuratiebestand en andere delen van zichzelf, om dan door het aanroepen van de normale modus weer gewoon door te gaan:

set prefix=(hd0,2)/grub
insmod normal
normal

In het voorbeeld is de tweede partitie van de eerste gedetecteerde schijf een aparte opstartpartitie die de directory grub bevat. Met die commando’s kun je ook van de Grub Rescue Shell een normale, handi­gere commandline maken.

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Linux opstarten

Als dat alles mislukt, zul je Grub meer moeten helpen. Voor een typische Linux-installatie heb je daar ­verschillende details voor nodig: waar bevindt zich de root-directory van de installatie, waar staat de kernel en waar staat het Initial RAM Filesystem (Initramfs), dat om historische redenen ook wel Initial RAM Disk (Initrd) genoemd wordt. Je kunt de partitie met het root-bestandssysteem vinden door in het bestandssysteem alle partities na elkaar te bekijken met ls, bijvoorbeeld met ls (hd0,gpt3)/, tot je bij de output directory’s ziet als dev/, run/, boot/ en zo verder. Stel die partitie in als de opstartschijf:

set root=(hd0,gpt3)

Als je dan ls / uitvoert, zal de inhoud van (hd0,gpt3) worden weergegeven. Zoek daar naar de kernel, waarvan de bestandsnaam meestal vmlinuz is of met die naam begint. Die kun je direct in de root-directory vinden of in /boot/. Vaak staan de kernel-images ook in hun eigen bootpartitie. Vermijd typfouten door alleen het begin van de bestands- en mapnamen te typen en die vervolgens aan te laten vullen met de Tab-toets. Zet het pad naar het bestand achter het commando linux (voor sommige oudere Grub-versies moet dat echter linuxefi zijn bij het Linux opstarten via UEFI) en geef ook de device-naam met de root-partitie door aan de kernel:

linux /boot/vmlinuz-5.3.0-40-generic root=/dev/sda3

Geef vervolgens het Initramfs aan met initrd (of initrdefi). Dit bevat de voor de kernel benodigde bestanden en drivers. Het Initramfs moet exact overeenstemmen met de kernelversie, wat je meestal kunt zien aan de identieke versienummers.

initrd /boot/initrd.img-5.3.0-40-generic

Dan ontbreekt alleen nog het commando voor Linux opstarten:

boot

Versleuteling / encryptie

Het voorbeeld heeft betrekking op een eenvou­dige installatie zonder Logical Volume Manager (LVM), software-RAID en encryptie. Als het root-bestandssysteem versleuteld is, maar de bootpartitie niet, dan zal deze procedure ook werken voor Linux opstarten. Er wordt dan tijdens het bootproces naar het wachtwoord gevraagd en het root-bestandssysteem wordt daarmee ont­sleuteld.

Als de partitie die de boot-directory bevat daarentegen versleuteld is, moet je die eerst ontgren­delen met Grub. Daarna kan die de kernel en de RAM-disk laden en booten. Om dat te doen, laad je eerst de LUKS-module van Grub en vervolgens ontsleutel je de partitie:

insmod luks
cryptomount (hd0,4)

Als Grub de versleutelde partitie herkent, wordt gevraagd naar een wachtwoord om die te ontsleutelen. Als de partitie met succes ontsleuteld is, krijg je een antwoord zoals Slot 0 opened en een nieuw apparaat (crypt0), dat je op dezelfde manier kunt behandelen als andere partities. In plaats van de werkdirectory met de Grub-shell in te stellen via de prefix-variabele, kun je ook de volledige paden opgeven:

linux (crypt0)/vmlinuz root=/dev/mapper/mycrypt
initrd (crypt0)/initrd
boot

Wat er achter root= staat hangt af van de naam die jij zelf of het Linux-installatieprogramma hebt in­gesteld. In geval van twijfel laat je die parameter weg en kijk je of het systeem toch opstart. Anders kan het Grub-configuratiebestand een hint geven over de juiste parameter. Dat kun je met cat laten weer­geven:

cat (hd0,2)/grub/grub.cfg

De output daarvan is meestal erg lang. Om daar pagina voor pagina doorheen te bladeren, pas je de weergavemodus vooraf aan met set pager=1. Als je set alleen aanroept, verschijnt er een lijst met de in­gestelde omgevingsvariabelen.

versleuteling encryptie ssd

RAID en LVM

De Grub-shell kan configuratiebestanden rechtstreeks van LVM-volumes laden of van bestands­systemen in softwarematige RAID’s die door mdadm beheerd worden. De naamgevingsconventie voor LVM is (lvm/volgroup-logvolume) en voor RAID (md/0), (md/1) enzovoort. Daarmee werk je net als met (crypt0) of (hd0,gpt3) in de bovenstaande voorbeelden. Als de RAID- of LVM-volumes niet in de output van ls verschijnen, kan het zijn dat je de modules eerst moet laden met insmod (bijvoorbeeld lvm of mdraid1x). De reeds geladen modules worden opgesomd door het commando lsmod.

Als je je Linux-installatie met de Grub-shell weer aan de praat hebt kunnen krijgen, controleer dan de instellingen en genereer een nieuwe Grub-­configuratie. Afhankelijk van de distributie zijn daar verschillende tools voor (zoals in Fedora of Ubuntu).

In dit artikel hebben we in elk geval laten zien dat de Grub-shell veel commando’s en functies biedt die het gebruik van een live-systeem onnodig kunnen maken. Zodra je je systeem met de commandline weer aan de praat hebt weten te krijgen, kun je in de vertrouwde omgeving de configuratie controleren en de bootloader repareren.

(Keywan Tonekaboni en Noud van Kruysbergen, c’t magazine 6/2020, p. 128)

 


Blijf op de hoogte van de nieuwste informatie en tips!
Schrijf je in voor de nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

 

Lees uitgebreide reviews en achtergrondinfo op je gemak in c't 05/2024

Meer over

Software

Deel dit artikel

Noud van Kruysbergen
Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

Lees ook

Je Raspberry Pi op afstand bedienen? Zo krijg je het voor elkaar met SSH!

De Raspberry Pi op afstand bedienen is handig en kan op verschillende manieren. Via SSH is het makkelijkste op te zetten, we laten zien hoe.

TeamViewer op Ubuntu installeren & gebruiken: zo werkt het

In dit artikel tonen we hoe je op afstand je Linux-computer met Ubuntu kunt beheren door TeamViewer te gebruiken. Voor degenen die niet bekend zijn me...

2 Praat mee
avatar
  Abonneer  
nieuwsteoudste
Laat het mij weten wanneer er
Joost
Lezer
Joost

Hallo,

Dit is echt een heel goede tutorial, ik kom regelmatig hier op terug.
Deze pagina heeft me als persoon die professioneel support geeft aan Linux gebruikers al heel goed geholpen. Al zeker 5 keer een Linux machine er terug mee op gang gekregen.
Heel erg bedankt hiervoor,

Joost

Bert van Tol
Lezer
Bert van Tol

Je opstart repareren kan veel eenvoudiger.
Gewoon even opstarten vanaf USB met daarop de BootRepair CD ISO.
En in no time doet alles het weer …..