LFCS: Sådan konfigureres og fejlfindes Grand Unified Bootloader (GRUB) - Del 13


På grund af de nylige ændringer i målene for LFCS-certificeringseksamen, der træder i kraft den 2. februar 2016, tilføjer vi også de nødvendige emner til LFCE-serien.

I denne artikel introducerer vi dig til GRUB og forklarer, hvorfor en boot loader er nødvendig, og hvordan den tilføjer alsidighed til systemet.

Linux-startprocessen fra det tidspunkt, hvor du trykker på tænd/sluk-knappen på din computer, indtil du får et fuldt funktionelt system, følger denne sekvens på højt niveau:

  1. 1. En proces kendt som POST (Power-On Self Test) udfører en samlet kontrol af hardwarekomponenterne på din computer.
  2. 2. Når POST er færdig, overfører den kontrollen til boot loader, som igen indlæser Linux-kernen i hukommelsen (sammen med initramfs) og udfører den. Den mest anvendte boot loader i Linux er GRand Unified Boot loader, eller kort sagt GRUB.
  3. 3. Kernen kontrollerer og får adgang til hardwaren og kører derefter den indledende proces (for det meste kendt under dens generiske navn "init"), som igen fuldender systemstart ved at starte tjenester.

I del 7 i denne serie (“servicestyringssystemer og -værktøjer, der bruges af moderne Linux-distributioner. Det kan være en god idé at gennemgå artiklen, inden du fortsætter videre.

Introduktion til GRUB Boot Loader

To store GRUB-versioner (v1 undertiden kaldet GRUB Legacy og v2) findes i moderne systemer, selvom de fleste distributioner bruger v2 som standard i deres nyeste versioner. Kun Red Hat Enterprise Linux 6 og dets derivater bruger stadig v1 i dag.

Således vil vi primært fokusere på funktionerne i v2 i denne vejledning.

Uanset GRUB-versionen tillader en boot loader brugeren at:

  1. 1). ændre den måde, systemet opfører sig på, ved at angive forskellige kerner, der skal bruges,
  2. 2). vælg mellem alternative operativsystemer, der skal startes, og
  3. 3). tilføj eller rediger konfigurationsstrofer for blandt andet at ændre bootindstillinger.

I dag vedligeholdes GRUB af GNU-projektet og er veldokumenteret på deres hjemmeside. Du opfordres til at bruge den officielle GNU-dokumentation, mens du gennemgår denne vejledning.

Når systemet starter, får du følgende GRUB-skærm i hovedkonsollen. Oprindeligt bliver du bedt om at vælge mellem alternative kerner (som standard starter systemet med den nyeste kerne) og får lov til at indtaste en GRUB-kommandolinje (med c ) eller redigere bootindstillingerne (ved ved at trykke på e -tasten).

En af grundene til, at du overvejer at starte med en ældre kerne, er en hardwareenhed, der tidligere fungerede korrekt og er begyndt at "handle op" efter en opgradering (se dette link i AskUbuntu-fora for et eksempel).

GRUB v2-konfigurationen læses ved opstart fra /boot/grub/grub.cfg eller /boot/grub2/grub.cfg , hvorimod /boot/grub/grub.conf eller /boot/grub/menu.lst bruges i v1. Disse filer skal IKKE redigeres manuelt, men ændres baseret på indholdet af /etc/default/grub og de filer, der findes i /etc/grub.d .

I en CentOS 7 er her konfigurationsfilen, der oprettes, når systemet først installeres:

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"

Ud over online dokumentationen kan du også finde GNU GRUB-manualen ved hjælp af info som følger:

# info grub

Hvis du specifikt er interesseret i de tilgængelige indstillinger for/etc/default/grub, kan du påkalde konfigurationsafsnittet direkte:

# info -f grub -n 'Simple configuration'

Ved hjælp af kommandoen ovenfor finder du ud af, at GRUB_TIMEOUT indstiller tiden mellem det øjeblik, hvor startskærmen vises, og systemets automatiske opstart begynder, medmindre det afbrydes af brugeren. Når denne variabel er indstillet til -1 , startes boot først, før brugeren foretager et valg.

Når der er installeret flere operativsystemer eller kerner i den samme maskine, kræver GRUB_DEFAULT et heltalsværdi, der angiver, hvilket OS eller kerneindtastning på GRUB-startskærmen, der skal vælges for at starte som standard. Listen over poster kan ses ikke kun i stænkskærmen vist ovenfor, men også ved hjælp af følgende kommando:

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

I eksemplet vist i nedenstående billede, hvis vi ønsker at starte med kerneversionen 3.10.0-123.el7.x86_64 (4. post), skal vi indstille GRUB_DEFAULT til 3 (poster er internt nummereret, der begynder med nul) som følger:

GRUB_DEFAULT=3

En endelig GRUB-konfigurationsvariabel, der er af særlig interesse, er GRUB_CMDLINE_LINUX , som bruges til at overføre indstillinger til kernen. De muligheder, der kan sendes gennem GRUB til kernen, er veldokumenterede i man 7 bootparam.

Nuværende muligheder på min CentOS 7-server er:

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"

Hvorfor vil du ændre standardkerneparametrene eller videregive ekstra muligheder? Enkelt sagt kan der være tidspunkter, hvor du har brug for at fortælle kernen bestemte hardwareparametre, som den muligvis ikke kan bestemme alene eller til at tilsidesætte de værdier, som den vil opdage.

Dette skete for ikke så længe siden, da jeg prøvede Vector Linux, et derivat af Slackware, på min 10-årige bærbare computer. Efter installationen registrerede det ikke de rigtige indstillinger til mit grafikkort, så jeg var nødt til at ændre de kernemuligheder, der blev sendt gennem GRUB for at få det til at fungere.

Et andet eksempel er, når du har brug for at bringe systemet i enkeltbrugertilstand for at udføre vedligeholdelsesopgaver. Du kan gøre dette ved at tilføje ordet single til GRUB_CMDLINE_LINUX og genstarte:

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"

Efter redigering af /etc/defalt/grub skal du køre update-grub (Ubuntu) eller grub2-mkconfig -o/boot/grub2/grub. cfg (CentOS og openSUSE) bagefter for at opdatere grub.cfg (ellers går ændringer tabt ved opstart).

Denne kommando behandler de tidligere nævnte bootkonfigurationsfiler for at opdatere grub.cfg . Denne metode sikrer, at ændringer er permanente, mens indstillinger, der sendes gennem GRUB ved opstartstid, kun varer i den aktuelle session.

Løsning af Linux GRUB-problemer

Hvis du installerer et andet operativsystem, eller hvis din GRUB-konfigurationsfil bliver ødelagt på grund af menneskelig fejl, er der måder, du kan få dit system tilbage på benene og være i stand til at starte igen.

På startskærmen skal du trykke på c for at få en GRUB-kommandolinje (husk at du også kan trykke på e for at redigere standardstartindstillingerne) og bruge hjælp til at bringe den tilgængelige kommandoer i GRUB-prompten:

Vi vil fokusere på ls, som viser de installerede enheder og filsystemer, og vi vil undersøge, hvad den finder. På billedet nedenfor kan vi se, at der er 4 harddiske ( hd0 gennem hd3 ).

Kun hd0 ser ud til at være opdelt (som det fremgår af msdos1 og msdos2, hvor 1 og 2 er partitionsnumrene, og msdos er partitioneringsskemaet).

Lad os nu undersøge den første partition på hd0 (msdos1) for at se, om vi kan finde GRUB der. Denne tilgang giver os mulighed for at starte Linux, og der bruger andre værktøjer på højt niveau til at reparere konfigurationsfilen eller geninstallere GRUB helt, hvis det er nødvendigt:

# ls (hd0,msdos1)/

Som vi kan se i det fremhævede område, fandt vi grub2-biblioteket i denne partition:

Når vi er sikre på, at GRUB er bosat i (hd0, msdos1), lad os fortælle GRUB, hvor den skal finde sin konfigurationsfil og derefter instruere den om at forsøge at starte dens menu:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Vælg derefter en post i GRUB-menuen, og tryk på Enter for at starte med den. Når systemet er startet, kan du udstede kommandoen grub2-install/dev/sdX (skift sdX med den enhed, du vil installere GRUB på). Startoplysningerne opdateres derefter, og alle relaterede filer gendannes.

# grub2-install /dev/sdX

Andre mere komplekse scenarier er dokumenteret sammen med deres foreslåede rettelser i Ubuntu GRUB2 Fejlfindingsvejledning. De begreber, der er forklaret der, gælder også for andre distributioner.

Resumé

I denne artikel har vi introduceret dig til GRUB, angivet, hvor du kan finde dokumentation både online og offline, og forklaret, hvordan man nærmer sig et scenario, hvor et system er stoppet med at starte korrekt på grund af et bootloader-relateret problem.

Heldigvis er GRUB et af de værktøjer, der er bedst dokumenteret, og du kan nemt finde hjælp enten i de installerede dokumenter eller online ved hjælp af de ressourcer, vi har delt i denne artikel.

Har du spørgsmål eller kommentarer? Tøv ikke med at fortælle os ved hjælp af nedenstående kommentarformular. Vi ser frem til at høre fra dig!