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
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.
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).
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.
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.
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.
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.
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:
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
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:
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.
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 stasjonen bør
samsvare med den du installerer LFS på. <x><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, som ikke lenger skulle være nødvendig for oppstartsprosessen, ettersom filsystemet kun brukes til manipulering av EFI variabler:
umount -v /sys/firmware/efi/efivars
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" {
linux /boot/vmlinuz-6.19.10-lfs-r13.0-45 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.
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.
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 , og erstatte
<UUID av filsystemet
der kjernen er installert>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= istedenfor <filsystem
UUID>root=PARTUUID=,
men å gjøre det vil kreve en initramfs, som er utenfor omfanget
av LFS.
<partisjon UUID>
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=, i
<partisjon UUID>/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.
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.