LFCS: Hvordan konfigurere og feilsøke Grand Unified Bootloader (GRUB) - del 13


På grunn av de nylige endringene i målene for LFCS-sertifiseringseksamen som gjelder fra 2. februar 2016, legger vi til de nødvendige emnene til LFCS-serien publisert her. For å forberede deg til denne eksamen, oppfordres du sterkt til å følge LFCE-serien også.

I denne artikkelen vil vi introdusere deg til GRUB og forklare hvorfor en oppstartslaster er nødvendig, og hvordan den gir allsidighet til systemet.

Linux-oppstartsprosessen fra du trykker på strømknappen på datamaskinen til du får et fullt funksjonelt system følger denne sekvensen på høyt nivå:

  1. 1. En prosess kjent som POST (Power-On Self Test) utfører en generell kontroll av maskinvarekomponentene til datamaskinen.
  2. 2. Når POST er fullført, overfører den kontrollen til oppstartslasteren, som igjen laster Linux-kjernen i minnet (sammen med initramfs ) og utfører den. Den mest brukte oppstartslasteren i Linux er GRand Unified Boot loader, eller GRUB for kort.
  3. 3. Kjernen sjekker og får tilgang til maskinvaren, og kjører deretter den første prosessen (mest kjent under det generiske navnet "init "), som igjen fullfører systemoppstarten ved å starte tjenester.

I Del 7 av denne serien (“SysVinit, Upstart og Systemd ”) introduserte vi tjenesteadministrasjonssystemene og verktøyene som brukes av moderne Linux-distribusjoner. Det kan være lurt å se gjennom den artikkelen før du fortsetter.

Vi introduserer GRUB Boot Loader

To store GRUB-versjoner (v1 noen ganger kalt GRUB Legacy og v2) kan finnes i moderne systemer, selv om de fleste distribusjoner bruker v2 som standard i de nyeste versjonene. Bare Red Hat Enterprise Linux 6 og dens derivater bruker fortsatt v1 i dag.

Derfor vil vi først og fremst fokusere på funksjonene til v2 i denne veiledningen.

Uavhengig av GRUB-versjonen lar en oppstartslaster brukeren:

  1. 1). endre måten systemet oppfører seg på ved å spesifisere forskjellige kjerner som skal brukes,
  2. 2). velg mellom alternative operativsystemer for å starte opp, og
  3. 3). legg til eller rediger konfigurasjonsstrofer for å endre oppstartsalternativer, blant annet.

I dag vedlikeholdes GRUB av GNU-prosjektet og er godt dokumentert på nettsiden deres. Du oppfordres til å bruke den offisielle GNU-dokumentasjonen mens du går gjennom denne veiledningen.

Når systemet starter, vises følgende GRUB-skjerm i hovedkonsollen. Til å begynne med blir du bedt om å velge mellom alternative kjerner (som standard vil systemet starte opp med den nyeste kjernen) og har lov til å angi en GRUB-kommandolinje (med c) eller rediger oppstartsalternativene (ved å trykke e-tasten).

En av grunnene til at du vil vurdere å starte opp med en eldre kjerne er en maskinvareenhet som pleide å fungere ordentlig og som har begynt å «virke» etter en oppgradering (se denne lenken i AskUbuntu fora for et eksempel).

GRUB v2-konfigurasjonen leses ved oppstart fra /boot/grub/grub.cfg eller /boot/grub2/grub.cfg, mens /boot/grub/grub.conf eller /boot/grub/menu.lst brukes i v1. Disse filene skal IKKE redigeres for hånd, men er modifisert basert på innholdet i /etc/default/grub og filene som finnes i /etc/grub.d.

I en CentOS 7, her er konfigurasjonsfilen som opprettes når systemet først ble installert:

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"

I tillegg til nettdokumentasjonen, kan du også finne GNU GRUB-manualen ved å bruke info som følger:

info grub

Hvis du er spesielt interessert i alternativene som er tilgjengelige for /etc/default/grub, kan du starte konfigurasjonsdelen direkte:

info -f grub -n 'Simple configuration'

Ved å bruke kommandoen ovenfor vil du finne ut at GRUB_TIMEOUT setter tiden mellom det øyeblikket startskjermbildet vises og den automatiske oppstarten av systemet starter med mindre brukeren avbryter det. Når denne variabelen er satt til -1, vil ikke oppstart startes før brukeren gjør et valg.

Når flere operativsystemer eller kjerner er installert på samme maskin, krever GRUB_DEFAULT en heltallsverdi som indikerer hvilket OS eller kjerneoppføring i GRUB-startskjermbildet som skal velges for å starte opp som standard. Listen over oppføringer kan sees ikke bare på velkomstskjermen vist ovenfor, men også ved å bruke følgende kommando:

I CentOS og openSUSE:

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

I Ubuntu:

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

I eksemplet vist i bildet nedenfor, hvis vi ønsker å starte opp med kjerneversjonen 3.10.0-123.el7.x86_64 (fjerde oppføring), må vi angi GRUB_DEFAULT til 3 (oppføringer er internt nummerert som begynner med null) som følger:

GRUB_DEFAULT=3

En siste GRUB-konfigurasjonsvariabel som er av spesiell interesse er GRUB_CMDLINE_LINUX, som brukes til å sende alternativer til kjernen. Alternativene som kan sendes gjennom GRUB til kjernen er godt dokumentert i kjerneparameterfilen og i man 7 bootparam.

Gjeldende alternativer i CentOS 7-serveren min 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 endre standard kjerneparametere eller sende ekstra alternativer? Enkelt sagt kan det være tider når du trenger å fortelle kjernen visse maskinvareparametere som den kanskje ikke kan bestemme på egen hånd, eller å overstyre verdiene den vil oppdage.

Dette skjedde med meg for ikke så lenge siden da jeg prøvde Vector Linux, et derivat av Slackware, på min 10 år gamle bærbare datamaskin. Etter installasjonen oppdaget det ikke de riktige innstillingene for skjermkortet mitt, så jeg måtte endre kjernealternativene som ble sendt gjennom GRUB for å få det til å fungere.

Et annet eksempel er når du trenger å bringe systemet til enkeltbrukermodus for å utføre vedlikeholdsoppgaver. Du kan gjøre dette ved å legge til ordet singel i GRUB_CMDLINE_LINUX og starte på nytt:

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"

Etter å ha redigert /etc/defalt/grub, må du kjøre update-grub (Ubuntu) eller grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS og openSUSE) etterpå for å oppdatere grub.cfg (ellers vil endringer gå tapt ved oppstart).

Denne kommandoen vil behandle oppstartskonfigurasjonsfilene nevnt tidligere for å oppdatere grub.cfg. Denne metoden sikrer at endringer er permanente, mens alternativer som sendes gjennom GRUB ved oppstart kun vil vare under den gjeldende økten.

Løse Linux GRUB-problemer

Hvis du installerer et annet operativsystem eller hvis GRUB-konfigurasjonsfilen din blir ødelagt på grunn av menneskelige feil, er det måter du kan få systemet på beina igjen og starte opp igjen.

I startskjermbildet, trykk c for å få en GRUB-kommandolinje (husk at du også kan trykke e for å redigere standard oppstartsalternativer), og bruk hjelp til å bringe de tilgjengelige kommandoer i GRUB-ledeteksten:

Vi vil fokusere på ls, som viser de installerte enhetene og filsystemene, og vi vil undersøke hva den finner. På bildet nedenfor kan vi se at det er 4 harddisker (hd0 til hd3).

Bare hd0 ser ut til å ha blitt partisjonert (som det fremgår av msdos1 og msdos2, der 1 og 2 er partisjonsnumrene og msdos er partisjonsskjemaet).

La oss nå undersøke den første partisjonen på hd0 (msdos1) for å se om vi kan finne GRUB der. Denne tilnærmingen vil tillate oss å starte opp Linux og der bruke andre høynivåverktøy for å reparere konfigurasjonsfilen eller installere GRUB helt på nytt hvis det er nødvendig:

ls (hd0,msdos1)/

Som vi kan se i det uthevede området, fant vi grub2-katalogen i denne partisjonen:

Når vi er sikre på at GRUB ligger i (hd0,msdos1), la oss fortelle GRUB hvor den skal finne konfigurasjonsfilen og deretter instruere den til å prøve å starte menyen:

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

Velg deretter en oppføring i GRUB-menyen og trykk Enter for å starte opp med den. Når systemet har startet kan du utstede kommandoen grub2-install /dev/sdX (endre sdX med enheten du vil installere GRUB på). Oppstartsinformasjonen vil da bli oppdatert og alle relaterte filer gjenopprettes.

grub2-install /dev/sdX

Andre mer komplekse scenarier er dokumentert, sammen med deres foreslåtte rettelser, i Ubuntu GRUB2 feilsøkingsveiledningen. Konseptene som er forklart der, er også gyldige for andre distribusjoner.

Sammendrag

I denne artikkelen har vi introdusert deg for GRUB, angitt hvor du kan finne dokumentasjon både online og offline, og forklart hvordan du nærmer deg et scenario der et system har sluttet å starte opp på riktig måte på grunn av et oppstartslasterrelatert problem.

Heldigvis er GRUB et av verktøyene som er best dokumentert, og du kan enkelt finne hjelp enten i de installerte dokumentene eller på nettet ved å bruke ressursene vi har delt i denne artikkelen.

Har du spørsmål eller kommentarer? Ikke nøl med å gi oss beskjed ved å bruke kommentarskjemaet nedenfor. Vi ser frem til å høre fra deg!