10.4. Bruke GRUB til å sette opp oppstartsprosessen

10.4.1. Introduksjon

[Advarsel]

Advarsel

Feil konfigurering av GRUB kan gjøre systemet ditt ubrukelig uten en alternativ oppstartsenhet, for eksempel en CD-ROM eller en oppstartbar USB stasjon. Denne delen er ikke nødvendig for å starte opp LFS systemet. Du vil kanskje bare endre din nåværende oppstartslaster, f.eks. Grub-Legacy eller GRUB2.

Sørg for at en nødoppstartsdisk er klar for å «redde» datamaskinen hvis datamaskinen blir ubrukelig (ikke-oppstartbar). Hvis du ikke allerede har en oppstartsenhet, kan du opprette en. For at prosedyren nedenfor skal fungere, må du gå videre til BLFS og installere xorriso fra libisoburn pakken.

cd /tmp
grub-mkrescue --output=grub-img.iso
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso

10.4.2. Slå av sikker oppstart

LFS har ikke de nødvendige pakkene for å støtte sikker oppstart. For å konfigurere oppstartsprosessen ved å følge instruksjonene i denne delen, må sikker oppstart være slått av fra konfigurasjonsgrensesnittet til fastvaren. Les dokumentasjonen fra produsenten av systemet ditt for å finne ut hvordan å slå av støtte for sikker oppstart.

10.4.3. GRUB navnekonvensjoner

GRUB bruker sin egen navnestruktur for stasjoner og partisjoner i form av (hdn,m), hvor n er harddisknummeret og m er partisjonsnummeret. Harddisknumrene starter fra null, men partisjonnumrene starter fra én for vanlige partisjoner (fra fem for utvidede partisjoner). Merk at dette er forskjellig fra tidligere versjoner der begge numrene startet fra null. For eksempel, partisjon sda1 er (hd0,1) for GRUB og sdb3 er (hd1,3). I motsetning til Linux, anser ikke GRUB CD-ROM stasjoner som harddisker. Hvis du for eksempel bruker en CD på hdb og en annen harddisk på hdc, den andre harddisken ville fortsatt være (hd1).

10.4.4. Sette opp konfigurasjonen

Hvis du starter opp systemet via BIOS, fungerer GRUB ved å skrive en stub til den første sektoren (kalt Master Boot Record, eller MBR) på harddisken. Dette området er ikke en del av noe filsystem. BIOS laster inn og kjører innholdet i MBR, deretter laster stubben hoved GRUB bildet fra BIOS oppstartspartisjonen. GRUB bildet lagres som rådata i stedet for en fil (det må ikke være noe filsystem på BIOS oppstartspartisjonen), så stubben trenger ikke å støtte noe filsystem, og den kan gjøres liten nok til å passe i MBR.

Hvis du starter opp systemet via UEFI, fungerer GRUB ved å lagre hoved GRUB avbildningen som en PE-COFF kjørbar fil på en standardplassering i EFI systempartisjonen: EFI/BOOT/BOOTX64.EFI (eller EFI/BOOT/BOOTIA32.EFI for i386-efi). UEFI fastvaren laster den inn fra standardplasseringen og kjører den, og starter GRUB.

Mange GRUB funksjoner (inkludert oppstart av Linux kjernen) er ikke inkludert i hoved GRUB avbildningen. I stedet lagres de i et filsystem som GRUB moduler. Dette filsystemet er vanligvis montert på en måte som gjør at GRUB modulene kan nås i /boot/grub på de fleste Linux distribusjoner. For å unngå høna og egget problemet, grub-install bygger inn modulene som er nødvendige for å få tilgang til dette filsystemet i hoved GRUB avbildningen, slik at den kan finne og laste inn andre moduler.

Plasseringen av oppstartspartisjonen er et valg av brukeren som påvirker konfigurasjonen. En anbefaling er å ha en separat liten (foreslått størrelse er 200 MB) partisjon kun for oppstartsinformasjon. Ved å gjøre dette kan ikke bare LFS, men enhver Linux distribusjon, få tilgang til de samme oppstartsfilene, og dermed ethvert oppstartet system. Hvis du velger å gjøre dette, må du montere den separate partisjonen, flytte alle filer i gjeldende /boot mappen (f.eks. Linux kjernen du nettopp bygde i forrige avsnitt) til den nye partisjonen. Du må deretter avmontere partisjonen og montere den på nytt som /boot. Hvis du gjør dette, sørg for å oppdatere /etc/fstab.

[Notat]

Notat

Hvis vertsdistribusjonen bruker en separat partisjon for /boot og du vil at LFS systemet skal bruke den partisjonen til /boot også, bare monter partisjonen på $LFS/boot i vertsdistribusjonen. Linuxkjernen støtter montering av partisjoner på flere monteringspunkter.

Å la /boot være på den nåværende LFS partisjonen vil også fungere, men konfigurasjon for flere systemer er vanskeligere.

For eksempler og mer informasjon om oppsett av oppstartspartisjoner, å se på Seksjon 2.4, «Opprette en ny partisjon» kan være informativt.

Bruk informasjonen ovenfor til å bestemme riktig betegnelse for rotpartisjonen (eller oppstartspartisjonen, hvis en separat en brukes). I følgende eksempel antas det at rotpartisjonen (eller separat oppstartspartisjon) er sda2.

De følgende avsnittene går gjennom hvordan du starter opp med BIOS og UEFI. GRUB installasjonene for BIOS, 64-bit UEFI og 32-bit UEFI kan sameksistere og dele samme konfigurasjon. Bildene og dataene ligger på forskjellige steder, slik at du kan opprette både BIOS oppstartspartisjonen og EFI systempartisjonen, og installere GRUB for alle støttede fastvaretyper (dvs. kjøre tre grub-install kommandoer). Hvis du er usikker på fastvaretypen din, eller du planlegger å flytte harddisken til en annen datamaskin, er dette noe du kan gjøre som en generell strategi.

[Notat]

Notat

Hvis du kjører UEFI oppstart, men har opprettet Grub BIOS partisjonen, kan det være lurt å kjøre kommandoen for BIOS i tilfelle UEFI oppstart ikke fungerer som forventet.

[Notat]

Notat

Hvis du bare trenger å installere GRUB for én oppstartsmetode, trenger du ikke å kjøre kommandoer for begge metodene. Du kan bare kjøre kommandoen for oppstartsmetoden du trenger.

10.4.4.1. Oppstart med BIOS

For oppstart med BIOS, sørg for at oppstartspartisjonen er montert (hvis du bruker en separat) og at BIOS oppstartspartisjonen finnes. Etter det, installer GRUB filene i /boot/grub og sett opp oppstartssporet:

[Advarsel]

Advarsel

Følgende kommando vil overskrive gjeldende oppstartslaster. Ikke kjør kommandoen hvis dette ikke er ønskelig, for eksempel hvis du bruker en tredjeparts oppstartsbehandler til å administrere MBR.

grub-install /dev/sda --target=i386-pc

10.4.4.2. Oppstart med UEFI

For oppstart med UEFI, sørg for at oppstartspartisjonen er montert (hvis du bruker en separat partisjon) og at EFI systempartisjonen er montert på /boot/efi. Etter det, installer GRUB filene i /boot/grub og hoved GRUB bildet på /boot/efi/EFI/BOOT/BOOTX64.EFI:

[Advarsel]

Advarsel

Følgende kommando vil overskrive /boot/efi/EFI/BOOT/BOOTX64.EFI filen. Hvis den allerede finnes, er det sannsynlig at det er oppføringen til en annen oppstartslaster (for eksempel GRUB installasjonen fra vertsdistribusjonen eller Windows Boot Manager). Ta en sikkerhetskopi av filen slik at den kan gjenopprettes senere eller lastes inn som en sekundær oppstartslaster av den nye GRUB installasjonen fra LFS.

grub-install --target=x86_64-efi --removable

Kommandoen ovenfor forutsetter at du har 64-bit UEFI fastvare. Hvis du vil gjøre systemet oppstartbart på 32-bit UEFI fastvare, kjør kommandoen med x86_64-efi erstattet av i386-efi.

--removable alternativet gjør at grub-install bruker standardplasseringen, EFI/BOOT/BOOTX64.EFI (eller EFI/BOOT/BOOTIA32.EFI for i386-efi), i stedet for plasseringen GRUB foretrekker (EFI/GRUB/GRUBX64.EFI eller EFI/GRUB/GRUBIA32.EFI). Bruk av en ikke-standard plassering ville føre til at plasseringen i en EFI variabel ble registrert, men LFS mangler BLFS pakken efibootmgr, som er nødvendig for å manipulere EFI variabler.

[Notat]

Notat

Noen UEFI oppstartslastere, selv om de er sjeldne, hopper over den hardkodede EFI banen. Slike systemer er som regel gamle, som Lenevo ThinkPads eller HP stasjonære/bærbare datamaskiner. Når oppstartsoppføringen mangler i BIOS, må du installere BLFS pakken efibootmgr for å opprette en oppstartsoppføring for UEFI. Hvis det er enklere, kan pakken installeres via distribusjonens pakkebehandler, hvis aktuelt, og brukes på verten i stedet for på LFS systemet. Dette kan forhindre behovet for å laste ned flere tarballer til LFS systemet for nå.

Installer først pakken, og monter deretter EFI variabelfilsystemet hvis det ikke allerede er montert:

mountpoint /sys/firmware/efi/efivars ||
  mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars

Opprett nå en oppstartsoppføring for EFI:

efibootmgr -c -d /dev/sd<x> \
  -p <y> -L "LFS" -l '\EFI\BOOT\BOOT<X64>.EFI'

/dev/sd<x> stasjonen bør samsvare med den du installerer LFS på. <y> partisjonsnummeret skal samsvare med nummeret som ESP-en er montert på. Hvis ESP-en er på /dev/sda2, da ville partisjonsnummeret være 2. Hvis du bruker 32-bit UEFI, må du erstatte <X64> med IA32.

Noen (ødelagte) fastvarer kan kreve ytterligere parametere for efibootmgr, som --full-dev-path eller -e 1 -E. Les manualsiden efibootmgr(8) for detaljer.

Avmonter nå EFI variabelfilsystemet:

umount -v /sys/firmware/efi/efivars

10.4.5. Opprette GRUB konfigurasjonsfilen

Generer /boot/grub/grub.cfg:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2

set root=(hd0,2)

# For UEFI
insmod efi_gop
insmod efi_uga

set gfxpayload=1024x768x32

menuentry "GNU/Linux, Linux 6.19.10-lfs-r13.0-45-systemd" {
        linux   /boot/vmlinuz-6.19.10-lfs-r13.0-45-systemd root=/dev/sda2 ro
}
EOF

insmod kommandoene laster inn GRUB moduler navngitt part_gpt, ext2, efi_gop, og efi_uga. Til tross for navngivningen, ext2 støtter faktisk ext2, ext3, og ext4 filsystemer. På UEFI systemer, efi_gop og efi_uga er for videostøtte. GOP, eller Graphics Output Protocol, er den moderne tilnærmingen. UGA, eller UGA Draw Protocol, er en eldre måte å håndtere det på. I en typisk konfigurasjon, part_gpt og ext2 moduler er allerede innebygd i hoved GRUB avbildningen av grub-install, og insmod kommandoer for dem vil ikke gjøre noe. Imidlertid gjør de ingen skade uansett, og de kan være nødvendige med noen sjeldne konfigurasjoner.

set gfxpayload=1024x768x32 kommandoen angir oppløsningen og fargedybden til VESA rammebufferen som skal sendes til kjernen. Det er nødvendig at kjernens SimpleDRM driver bruker VESA rammebufferen. Du kan bruke en annen oppløsnings eller fargedybdeverdi som passer bedre for skjermen din. Denne linjen gjør ingenting når systemet startes opp via UEFI, men den gjør ingen skade uansett.

[Notat]

Notat

Fra GRUB sitt perspektiv, kjernefilene er relative til partisjonen som brukes. Hvis du brukte en separat /boot partisjon, fjern /boot fra den ovenstående linux linjen. Du må også endre set root linjen til å peke på oppstartspartisjonen.

[Notat]

Notat

GRUB betegnelsen for en partisjon kan endres hvis du har lagt til eller fjernet noen disker (inkludert flyttbare disker som USB minnepinner). Endringen kan forårsake oppstartsfeil fordi grub.cfg refererer til noen «gamle» betegnelser. Hvis du ønsker å unngå et slikt problem, kan du bruke UUID-en til en partisjon og UUID-en til et filsystem i stedet for en GRUB betegnelse for å spesifisere en enhet. Kjør lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT for å vise UUID-ene til filsystemene dine (i UUID kolonnen) og partisjoner (i PARTUUID kolonnen). Bytt deretter ut set root=(hdx,y) med search --set=root --fs-uuid <UUID av filsystemet der kjernen er installert>, og erstatte root=/dev/sda2 med root=PARTUUID=<UUID av partisjonen der LFS er bygget>.

Merk at UUID-en til en partisjon er helt forskjellig fra UUID-en til filsystemet i denne partisjonen. Noen nettressurser kan instruere deg til å bruke root=UUID=<filsystem UUID> istedenfor root=PARTUUID=<partisjon UUID>, men å gjøre det vil kreve en initramfs, som er utenfor omfanget av LFS.

Navnet på enhetsnoden for en partisjon i /dev kan også endres (veldig ofte på noen systemer med flere NVME disker). Du kan også erstatte stier til enhetsnoder som /dev/sda1 med PARTUUID=<partisjon UUID>, i /etc/fstab, for å unngå en potensiell oppstartsfeil i tilfelle enhetens nodenavn har endret seg.

GRUB er et ekstremt kraftig program, og det tilbyr et enormt antall alternativer for oppstart fra et bredt utvalg av enheter, operativsystemer og partisjonstyper. Det finnes også mange alternativer for tilpasning, som grafiske velkomstskjermer, avspilling av lyder, museinndata osv. Detaljene om disse alternativene går utenfor rammen av denne introduksjonen.

[Obs]

Obs

Det finnes en kommando, grub-mkconfig, som kan skrive en konfigurasjonsfil automatisk. Den bruker et sett med skript i /etc/grub.d/ og vil ødelegge eventuelle tilpasninger du gjør. Disse skriptene er primært utviklet for ikke-kildekodedistribusjoner og anbefales ikke for LFS. Hvis du installerer en kommersiell Linux-distribusjon, er det stor sjanse for at dette programmet vil bli kjørt. Sørg for å sikkerhetskopiere grub.cfg filen din.