Li­nux star­ten met UEFI

De UEFI-start van Li­nux

C’t Magazine - - Contents - Thor­sten Leem­huis

Wil je je kun­nen red­den als er een keer iets mis­gaat bij de UEFI-boot van Li­nux? Maak je dan ver­trouwd met de op­start­pro­ce­du­re.

UEFI is an­ders. De trucs die je hebt ge­leerd voor klas­sie­ke BIOS-ver­sies hel­pen je dus niet als Li­nux niet op gang komt als het via UEFI op­start. In­te­gen­deel, de ou­de trucs kun­nen de UEFIop­start­pro­ble­men zelfs ver­er­ge­ren. Be­stu­deer daar­om lie­ver de op­start­pro­ce­du­re van een Li­nux die met UEFI boot, zo­dat je de juis­te trucs kent als het star­ten via UEFI eens een keer mis­gaat. Cen­traal staan de UEFI-boot-va­ri­a­be­len en de EFI-lo­a­der waar­mee de mo­der­ne UEFIBIOS-sys­te­men de be­stu­rings­sys­te­men star­ten via UEFI-me­cha­nis­men (zie pa­gi­na 124). Het ver­ra­der­lij­ke is dat de be­stu­rings­sys­te­men de op­start­va­ri­a­be­len bij de in­stal­la­tie op­slaan in een ge­heu­gen­ge­bied (in NVRAM) op het moe­der­bord. Het kan dus ge­beu­ren dat ge­ïn­stal­leer­de be­stu­rings­sys­te­men niet meer op­star­ten als je dat ver­vangt of de sys­teem­schijf in een an­de­re pc plaatst. Met een truc star­ten veel Li­nux-dis­tri­bu­ties dan toch nog. Bij an­de­re kun je het pro­bleem mak­ke­lijk ver­hel­pen met een li­ve-Li­nux. Dat gaat zelfs aan­zien­lijk mak­ke­lij­ker dan GRUB op­nieuw in­stal­le­ren, de ge­brui­ke­lij­ke truc om een klas­siek op­star­ten­de Li­nux weer op gang te hel­pen.

Start­pro­ce­du­re

Een UEFI-BIOS start een ge­ïn­stal­leer­de Li­nux via een op­start­ver­mel­ding, die het ge­ne­reert uit de in­houd van een UEFI­va­ri­a­be­le. Zo'n va­ri­a­be­le slaat de in­stal­ler tij­dens het in­stal­le­ren van het be­stu­rings­sys­teem op in een ge­heu­gen­ge­bied op het moe­der­bord, dat ge­woon­lijk niet­vluch­tig is en daar­om be­schouwd kan wor­den als 'NVRAM' (Non-vo­la­ti­le RAM). De UEFI-va­ri­a­be­le be­vat on­der an­de­re de door­gaans unie­ke iden­ti­fier (Uni­ver­s­al­ly Uni­que Iden­ti­fier, UUID) van de EFI Sy­s­tem Par­ti­ti­on (ESP). Dat is de par­ti­tie waar­op de in­stal­ler de EFI-lo­a­der plaatst waar­mee dat be­stu­rings­sys­teem start. Zo'n UUID wordt soms ook GUID (Glo­bally Uni­que Iden­ti­fier) ge­noemd en zorgt er­voor dat het BIOS de

met FAT-ge­for­mat­teer­de ESP ook nog pro­bleem­loos her­kent als ie­mand nog een schijf in­bouwt die een ESP be­vat.

Door­ver­wij­zen

De va­ri­a­be­le met de UEFI-boot-in­gang be­vat ook het pad naar de EFI-boot­lo­a­der, die het be­tref­fen­de be­stu­rings­sys­teem op gang brengt. Die be­vindt zich op de ESP in een di­rec­to­ry die spe­ci­fiek is voor een be­paal­de fa­bri­kant. Bij Ubuntu is dit \EFI\ ubuntu\shimx64.efi. Dat is in de eer­ste plaats be­doeld voor de on­der­steu­ning van Se­cu­re Boot. De ele­men­tai­re boot­lo­a­der (shim) is on­der­te­kend door Mi­cro­soft, zo­dat de mo­der­ne pc's hem ver­trou­wen en zon­der pro­test uit­voe­ren. Li­nux-dis­tri­bu­teurs schu­wen dit hand­te­ke­ning­pro­ces, om­dat het tijd en geld kost. De shim-ont­wik­ke­laars heb­ben de­ze EFI-lo­a­der daar­om een­vou­dig ge­hou­den en zo ge­maakt dat hij een krach­ti­ge­re boot­lo­a­der start, die dis­tri­bu­ties on­af­han­ke­lijk van Mi­cro­soft kun­nen bij­wer­ken.

Bij Ubuntu is dat de in \EFI\ubuntu\ grubx64.efi op­ge­sla­gen Grub2. Voor­dat het die uit­voert, con­tro­leert shim de au­then­ti­ci­teit van het be­stand met een in­ge­bouw­de ve­ri­fi­ca­tie­sleu­tel van Ca­no­ni­cal, om te voor­ko­men dat aan­val­lers de shim van Ca­no­ni­cal mis­brui­ken om kwaad­aar­di­ge co­de te lan­ce­ren. Daar­door zou Ubuntu's shim op een zwar­te lijst te­recht kun­nen ko­men.

Een via shim ge­star­te GRUB laadt op zijn beurt het con­fi­gu­ra­tie­be­stand grub. cfg in de­zelf­de di­rec­to­ry. In Ubuntu be­vat dat slechts drie re­gels, die de UUID van het be­stands­sys­teem en het pad spe­ci­fi­ce­ren waar GRUB zijn ei­gen­lij­ke con­fi­gu­ra­tie vindt: het be­stand /boot/grub/grub. cfg, dat zich be­vindt in het root-be­stands­sys­teem van het ac­tie­ve sys­teem, ten­zij je een apar­te op­start­par­ti­tie hebt ge­maakt. Met dat con­fi­gu­ra­tie­be­stand ge­ne­reert GRUB zijn boot­me­nu. La­ter start het dan au­to­ma­tisch de door de ge­brui­ker ge­se­lec­teer­de Ubuntu-ker­nel die zich op de­zelf­de par­ti­tie be­vindt. Bij Ubuntu start GRUB mo­men­teel wil­le­keu­ri­ge ker­nel-ima­ges; bij an­de­re dis­tri­bu­ties die Se­cu­re Boot on­der­steu­nen laadt GRUB al­leen een ker­nel die door shim ver­trouwd wordt door een hand­te­ke­ning of een hash. Dit om te voor­ko­men dat er ker­nels ge­start wor­den die door aan­val­lers of mal­wa­re zijn bin­nen­ge­smok­keld.

Veel dis­tri­bu­ties star­ten net als Ubuntu. Bij Fe­do­ra be­vindt het con­fi­gu­ra­tie­be­stand van GRUB zich ove­ri­gens di­rect op de ESP. De dis­tri­bu­ties die Se­cu­re Boot niet on­der­steu­nen star­ten GRUB vaak di­rect, zon­der shim.

Som­mi­ge Li­nuxen ge­brui­ken ook an­de­re EFI-boot­lo­a­ders, bij­voor­beeld die van Sy­s­temd, die voor­heen be­kend stond als Gum­mi­boot. Bo­ven­dien kun je de ker­nel en Ini­tramfs ook di­rect op de ESP plaat­sen. UEFI-BIOS-sys­te­men kun­nen die twee dank­zij de Li­nux-tech­no­lo­gie 'Efis­tub' zelfs di­rect la­den via een EFI-boot-in­gang, zo­dat de EFI-boot­lo­a­der niet eens no­dig is.

Stan­daard op­start­pro­ce­du­re

UEFI-BIOS-sys­te­men pro­be­ren een be­stu­rings­sys­teem op een an­de­re ma­nier te star­ten als de stan­daard UEFI-boot-in­gang niet werkt of als er geen op­start­va­ri­a­be­len zijn voor ge­ïn­stal­leer­de sys­te­men. Daar­voor door­zoe­ken ze de sys­teem­schijf en al­le ver­wis­sel­ba­re schij­ven (usb-sticks, dvd's en der­ge­lij­ke) vol­gens de op­start­volg­or­de in de BIOS-in­stel­lin­gen op de EFI-lo­a­der \EFI\ Boot\Bootx64.efi, om die dan uit te voe­ren. Op de ESP be­vindt zich dan meest­al een EFI-lo­a­der in dat be­stand, die het laatst ge­ïn­stal­leer­de be­stu­rings­sys­teem heeft ach­ter­ge­la­ten voor het ge­val dat de bij de in­stal­la­tie ge­maak­te UEFI-boot-in­gang ont­breekt of niet werkt.

De mees­te Li­nux-dis­tri­bu­ties slaan shim op in dat be­stand, maar zet­ten daar geen GRUB naast, maar de 'fall­back'-lo­a­der Fbx64.efi. Die start dan geen be­stu­rings­sys­teem, maar zoekt in de map \EFI\ van de be­tref­fen­de ESP naar sub­map­pen met

Dis­tri­bu­ties la­ten shim door Mi­cro­soft on­der­te­ke­nen, zo­dat mo­der­ne pc's het zon­der mor­ren uit­voe­ren

het be­stand Bootx64.csv. Li­nux-dis­tri­bu­ties die met shim star­ten, ma­ken de­ze meest­al aan. Hier­in be­vin­den zich ge­ge­vens waar­mee de fall­back-lo­a­der ver­vol­gens de UEFI­boot-va­ri­a­be­len kan ma­ken voor de daar­in ge­spe­ci­fi­ceer­de lo­a­der.

Daar­na geeft de fall­back-lo­a­der de con­tro­le weer aan het UEFI-BIOS, dat een van de nieuw ge­maak­te in­gan­gen pro­beert te star­ten.

Re­pa­ra­tie

Ge­ïn­stal­leer­de Li­nux-sys­te­men star­ten dank­zij de fall­back-lo­a­der ook na het ver­van­gen van het moe­der­bord. In elk ge­val in the­o­rie, want hard- en soft­wa­re be­vat­ten fou­ten, dus gaat er af en toe iets mis. Bo­ven­dien ont­breekt bij som­mi­ge dis­tri­bu­ties de fall­back-lo­a­der. In die en an­de­re ge­val­len kan het han­dig zijn om de UEFI-op­start­va­ri­a­be­len zelf te ma­ken. Neem daar­voor het in­stal­la­tie­me­di­um of een li­ve-Li­nux, die je start via UEFI. Open een com­mand­line­ven­ster om daar­in de ESP op te spo­ren. Dat kan door met ls­blk te zoe­ken naar par­ti­ties met het voor ESP's be­doel­de par­ti­ti­e­ty­pe:

ls­blk -f -l -o NA­ME,PARTTYPE | grep

'.*00a0c93ec93b'

Het com­man­do laat in de eer­ste ko­lom de naam van het ap­pa­raat zien, bij­voor­beeld 'sda2' of 'nvme0n1p1'. Mount dat ap­pa­raat er­gens (bij­voor­beeld in /mnt/), en geef met find de in­houd van de ESP weer:

su­do mount /dev/sda2/mnt/ find /mnt/

Daar zie je de fa­bri­kant­spe­ci­fie­ke di­rec­to­ry waar­in de boot­lo­a­ders van de ge­ïn­stal­leer­de be­stu­rings­sys­te­men zich be­vin­den. Daar be­vindt zich ook het CSV-be­stand dat de EFI-lo­a­der spe­ci­fi­ceert die stan­daard wordt aan­ge­roe­pen, meest­al shimx64.efi. Met de­ze in­for­ma­tie heb je dan al­les bij el­kaar om zelf de UEFI-op­start­va­ri­a­be­le voor de be­tref­fen­de Li­nux te ma­ken: efi­bootm­gr --cre­a­te --disk /dev/sda

--part 2 --la­bel 'Mijn Ubuntu' --lo­a­der '\EFI\ubuntu\shimx64.efi'

Ap­pa­raat­na­men als /dev/sda2 moet je op­split­sen in de ge­ge­vens voor de schijf (--disk /dev/sda) en het par­ti­tie­num­mer (--part 2). Als de ESP op de eer­ste schijf op de eer­ste par­ti­tie staat (dus op /dev/sda1), kun je bei­de op­ties over­slaan. Hoofd- en klei­ne let­ters maakt niet uit in het pad naar de EFI-lo­a­der, maar er zijn wel een aan­tal an­de­re strui­kel­blok­ken:

- Zet net als in het voor­beeld het pad naar de boot­lo­a­der tus­sen en­ke­le aan­ha­lings­te­kens, want die be­scher­men de backs­las­hes er­tus­sen te­gen in­ter­pre­ta­tie door de shell, die ze an­ders zou op­slok­ken. - Spe­ci­fi­ceer het pad naar de boot­lo­a­der ten op­zich­te van de hoofd­map van de ESP. - Ge­bruik de uit DOS en Win­dows be­ken­de backs­lash ('\') als di­rec­to­ry­schei­ding, om­dat een UEFI-BIOS de schui­ne streep uit de Li­nux/Unix-we­reld ('/') niet be­grijpt. Voer het com­man­do efi­bootm­gr -v uit na­dat je de UEFI-in­gang hebt ge­maakt om de boot-va­ri­a­be­le te con­tro­le­ren op plau­si­bi­li­teit. Ide­a­li­ter con­tro­leer je be­hal­ve het pad ook of de UUID van de par­ti­tie over­een­komt met die van de ESP. Dat kan met de bo­ven­staan­de ls­blk-op­dracht, als je tus­sen NA­ME en ,PARTTYPE ook nog ,PARTUUID in­voegt. Let op: ver­war de UUID van de par­ti­tie niet met het ty­pe van de par­ti­tie.

Nog iets: de UUID van een par­ti­tie heeft niets te ma­ken met de UUID van een daar­in ge­cre­ëerd be­stands­sys­teem. Het ge­noem­de ls­blk-com­man­do laat die zien als je de sec­tie na -o aan­vult met ,UUID. Het ge­vaar van ver­wis­se­ling bij de­ze twee

UUID's is bij­zon­der groot, om­dat het BIOS de ESP vindt via de UUID van de par­ti­tie. Ubuntu's GRUB vindt zijn vol­le­di­ge con­fi­gu­ra­tie­be­stand daar­en­te­gen niet via de UUID van de root- of op­start­par­ti­tie, maar via de UUID van het daar­in aan­we­zi­ge be­stands­sys­teem.

Voor het ge­val dat

Over­weeg om de uit­voer van efi­bootm­gr -v voor nood­ge­val­len af te druk­ken. Dan heb je de EFI-lo­a­der van de ge­ïn­stal­leer­de be­stu­rings­sys­te­men zwart op wit en kun je hun boot­va­ri­a­be­len mak­ke­lijk weer ma­ken. Als de boot­lo­a­der op de ESP be­scha­digd is, kun je die bij veel dis­tri­bu­ties met de op­dracht grub-in­stall (soms ook grub2-in­stall) op­nieuw in­stal­le­ren. Daar­bij wordt ook met­een een boot­va­ri­a­be­le ge­maakt voor het star­ten van de be­tref­fen­de lo­a­der. Dat com­man­do moet je ech­ter star­ten van­uit de Li­nux-om­ge­ving die de la­der la­ter moet star­ten. Daar­voor moet je eerst een red­dings- of li­ve-Li­nux star­ten met UEFI-me­cha­nis­men. Mount daar­mee de root-par­ti­tie van de ge­ïn­stal­leer­de Li­nux (bij­voor­beeld in /mnt/) om daar de pseu­do­be­stands­sys­te­men /dev/, / dev/ptc/, /sys/ en /proc/ on­der te han­gen met bind-mount, bij­voor­beeld met com­man­do's als mount --bind /dev/ /mnt/ dev/. Scha­kel daar­na met chroot over naar de be­stands­sys­tee­m­om­ge­ving van de gein­stal­leer­de Li­nux, om daar nog al­le in de Fstab ge­de­fi­ni­eer­de be­stands­sys­te­men te moun­ten met mount -a. Pas dan be­vindt de ESP zich ook op de aan­ge­we­zen lo­ca­tie en is al­les ge­reed voor grub-in­stall.

Rond­kij­ken

Start als je wat tijd hebt ook rus­tig efi­bootm­gr --help, om de ver­de­re mo­ge­lijk­he­den van het EFI-con­fi­gu­ra­tie­pro­gram­ma te be­kij­ken. Je kunt het bij­voor­beeld op­roe­pen met -B -b 1 om de eer­ste op­start­va­ri­a­be­le ('0001') te wis­sen. Het hulp­pro­gram­ma kan ook de op­start­volg­or­de wij­zi­gen en spe­ci­fi­ce­ren dat bij de vol­gen­de sys­teem­start een­ma­lig een be­paal­de boot­in­gang wordt ge­start. Dat is bij­voor­beeld in­te­res­sant voor de mul­ti-boot­sys­te­men uit het vol­gen­de ar­ti­kel, om Win­dows een­ma­lig te star­ten zon­der dat je het op­start­me­nu van GRUB hoeft aan te pas­sen. (mdt)

Dank­zij een fall­back-lo­a­der star­ten veel Li­nuxen ook het ver­van­gen van het moe­der­bord

Ver­war­rend is dat het UEFI-BIOS de ESP vindt via de in de UEFI-boot­va­ri­a­be­le op­ge­sla­gen UUID van de par­ti­tie (rood aan­ge­ge­ven). Het la­ter in het boot­pro­ces van Ubuntu ge­star­te GRUB vindt zijn con­fi­gu­ra­tie­be­stand ech­ter via de UUID van het be­stands­sys­teem (geel) dat staat op de root- of boot-par­ti­tie.

Newspapers in Dutch

Newspapers from Netherlands

© PressReader. All rights reserved.