LFCS: Kako konfigurirati i riješiti probleme Grand Unified Bootloader (GRUB) - 13. dio


Zbog nedavnih promjena u ciljevima LFCS certifikacijskih ispita koje stupaju na snagu od 2. februara 2016., dodajemo potrebne teme u LFCS seriju objavljenu ovdje. Da biste se pripremili za ovaj ispit, preporučujemo vam da također pratite LFCE seriju.

U ovom članku ćemo vas upoznati sa GRUB-om i objasniti zašto je pokretački program neophodan i kako on dodaje svestranost sistemu.

Proces pokretanja Linux-a od trenutka kada pritisnete dugme za napajanje na računaru dok ne dobijete potpuno funkcionalan sistem prati ovaj niz visokog nivoa:

  1. 1. Proces poznat kao POST (Samotestiranje pri uključivanju) vrši opću provjeru hardverskih komponenti vašeg računara.
  2. 2. Kada se POST završi, on prenosi kontrolu na pokretački program, koji zauzvrat učitava Linux kernel u memoriju (zajedno sa initramfs ) i izvršava ga. Najčešći pokretač u Linuxu je GRand Unified Boot loader, ili skraćeno GRUB.
  3. 3. Kernel provjerava i pristupa hardveru, a zatim pokreće početni proces (uglavnom poznat po svom generičkom nazivu “init ”) koji zauzvrat završava pokretanje sistema pokretanjem usluge.

U 7. dijelu ove serije (“SysVinit, Upstart i Systemd”) predstavili smo sisteme i alate za upravljanje uslugama koje koriste moderne Linux distribucije. Možda biste željeli pregledati taj članak prije nego što nastavite dalje.

Predstavljamo GRUB Boot Loader

Dvije glavne verzije GRUB (v1 koje se ponekad nazivaju GRUB Legacy i v2) mogu se naći u modernim sistemima, iako većina distribucije koriste v2 prema zadanim postavkama u svojim najnovijim verzijama. Samo Red Hat Enterprise Linux 6 i njegovi derivati i danas koriste v1.

Stoga ćemo se prvenstveno fokusirati na karakteristike v2 u ovom vodiču.

Bez obzira na verziju GRUB, boot loader omogućava korisniku da:

  1. 1). modificirati način na koji se sistem ponaša navođenjem različitih kernela za korištenje,
  2. 2). izaberite između alternativnih operativnih sistema za pokretanje i
  3. 3). dodajte ili uredite konfiguracijske strofe da promijenite opcije pokretanja, između ostalog.

Danas, GRUB održava projekt GNU i dobro je dokumentiran na njihovoj web stranici. Preporučujemo vam da koristite zvaničnu GNU dokumentaciju dok prolazite kroz ovaj vodič.

Kada se sistem pokrene, prikazuje vam se sljedeći ekran GRUB u glavnoj konzoli. U početku se od vas traži da odaberete između alternativnih jezgara (podrazumevano, sistem će se pokrenuti koristeći najnoviji kernel) i dozvoljeno vam je da unesete GRUB komandnu liniju (sa c) ili uredite opcije pokretanja (pritiskom na tipku e).

Jedan od razloga zašto biste razmislili o pokretanju sa starijim kernelom je hardverski uređaj koji je radio ispravno i koji je počeo da se “ponaša” nakon nadogradnje (pogledajte ovu vezu u AskUbuntu forumi za primjer).

Konfiguracija GRUB v2 se čita pri pokretanju sa /boot/grub/grub.cfg ili /boot/grub2/grub.cfg, dok /boot/grub/grub.conf ili /boot/grub/menu.lst se koriste u v1. Ove datoteke NE treba uređivati ručno, već se modificiraju na osnovu sadržaja /etc/default/grub i datoteka koje se nalaze unutar /etc/grub.d.

U CentOS 7, evo konfiguracijske datoteke koja se kreira kada se sistem prvi put instalira:

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"

Pored online dokumentacije, možete pronaći i GNU GRUB priručnik koristeći sljedeće informacije:

info grub

Ako ste posebno zainteresirani za opcije dostupne za /etc/default/grub, možete direktno pozvati odjeljak za konfiguraciju:

info -f grub -n 'Simple configuration'

Koristeći gornju naredbu saznat ćete da GRUB_TIMEOUT postavlja vrijeme između trenutka kada se pojavi početni ekran i počinje automatsko podizanje sistema osim ako ga korisnik ne prekine. Kada je ova varijabla postavljena na -1, pokretanje neće biti pokrenuto dok korisnik ne izvrši odabir.

Kada je više operativnih sistema ili kernela instalirano na istoj mašini, GRUB_DEFAULT zahtijeva cjelobrojnu vrijednost koja pokazuje koji OS ili unos kernela na početnom ekranu GRUB-a treba biti odabran za pokretanje prema zadanim postavkama. Spisak unosa se može videti ne samo na uvodnom ekranu prikazanom iznad, već i korišćenjem sledeće komande:

U CentOS-u i openSUSE:

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

U Ubuntu:

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

U primjeru prikazanom na slici ispod, ako želimo da se pokrenemo sa verzijom kernela 3.10.0-123.el7.x86_64 (4. unos), moramo postaviti GRUB_DEFAULT do 3 (unosi su interno numerisani počevši od nule) kako slijedi:

GRUB_DEFAULT=3

Jedna konačna varijabla konfiguracije GRUB-a koja je od posebnog interesa je GRUB_CMDLINE_LINUX, koja se koristi za prosljeđivanje opcija kernelu. Opcije koje se mogu proslediti kroz GRUB do kernela su dobro dokumentovane u datoteci Parametri jezgra i u man 7 bootparam.

Trenutne opcije na mom CentOS 7 serveru su:

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"

Zašto biste željeli izmijeniti zadane parametre kernela ili proslijediti dodatne opcije? Jednostavno rečeno, može doći do trenutaka kada ćete morati da kažete kernelu određene hardverske parametre koje ono možda neće moći samostalno da odredi ili da nadjačate vrednosti koje bi detektovao.

Ovo mi se dogodilo ne tako davno kada sam isprobao Vector Linux, derivat Slackwarea, na svom 10 godina starom laptopu. Nakon instalacije nije otkrio ispravne postavke za moju video karticu pa sam morao modifikovati opcije kernela propuštene kroz GRUB da bi mogao da radi.

Drugi primjer je kada trebate dovesti sistem u jednokorisnički način rada za obavljanje zadataka održavanja. To možete učiniti dodavanjem riječi single u GRUB_CMDLINE_LINUX i ponovnim pokretanjem:

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"

Nakon uređivanja /etc/defalt/grub, morat ćete pokrenuti update-grub (Ubuntu) ili grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS i openSUSE) nakon toga za ažuriranje grub.cfg (u suprotnom, promjene će biti izgubljene nakon pokretanja).

Ova komanda će obraditi ranije spomenute konfiguracijske datoteke za pokretanje kako bi se ažurirali grub.cfg. Ovaj metod osigurava da su promjene trajne, dok će opcije proslijeđene kroz GRUB u vrijeme pokretanja trajati samo tokom trenutne sesije.

Rješavanje problema s Linux GRUB-om

Ako instalirate drugi operativni sistem ili ako se vaša GRUB konfiguraciona datoteka ošteti zbog ljudske greške, postoje načini na koje možete vratiti svoj sistem na noge i moći ponovo da se pokrenete.

Na početnom ekranu pritisnite c da dobijete GRUB komandnu liniju (zapamtite da možete pritisnuti i e da uredite zadane opcije pokretanja) i koristite pomoć da dovedete dostupne komande u GRUB promptu:

Fokusiraćemo se na ls, koji će izlistati instalirane uređaje i sisteme datoteka, a mi ćemo ispitati šta će pronaći. Na slici ispod možemo vidjeti da postoje 4 hard diska (hd0 do hd3).

Čini se da je samo hd0 particioniran (što dokazuju msdos1 i msdos2, gdje su 1 i 2 su brojevi particija, a msdos je šema particioniranja).

Hajde da sada ispitamo prvu particiju na hd0 (msdos1) da vidimo možemo li tamo pronaći GRUB. Ovaj pristup će nam omogućiti da pokrenemo Linux i koristimo druge alate visokog nivoa da popravimo konfiguracionu datoteku ili potpuno ponovo instaliramo GRUB ako je potrebno:

ls (hd0,msdos1)/

Kao što možemo vidjeti u označenom području, pronašli smo grub2 direktorij u ovoj particiji:

Kada budemo sigurni da se GRUB nalazi u (hd0,msdos1), recimo GRUB-u gdje da pronađe svoju konfiguracijsku datoteku i zatim ga uputimo da pokuša pokrenuti svoj meni:

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

Zatim u GRUB meniju odaberite unos i pritisnite Enter da se pokrenete koristeći ga. Kada se sistem pokrene, možete izdati naredbu grub2-install /dev/sdX (promijenite sdX sa uređajem na kojem želite instalirati GRUB). Informacije o pokretanju će se tada ažurirati i sve povezane datoteke će biti vraćene.

grub2-install /dev/sdX

Drugi složeniji scenariji su dokumentovani, zajedno sa njihovim predloženim ispravkama, u Ubuntu GRUB2 vodiču za rešavanje problema. Koncepti koji su tamo objašnjeni vrijede i za druge distribucije.

Sažetak

U ovom članku smo vas upoznali sa GRUB-om, naznačili smo gdje možete pronaći dokumentaciju i na mreži i van mreže i objasnili kako pristupiti scenariju u kojem je sistem prestao da se pravilno diže zbog problema vezanog za bootloader.

Srećom, GRUB je jedan od alata koji je najbolje dokumentiran i lako možete pronaći pomoć bilo u instaliranim dokumentima ili na mreži koristeći resurse koje smo podijelili u ovom članku.

Imate li pitanja ili komentara? Ne ustručavajte se obavijestiti nas koristeći formu za komentare ispod. Radujemo se Vašem odgovoru!