Sve što trebate znati o GRUB bootloaderu

Izvor: HrOpenWiki
Inačica od 06:55, 5. listopada 2009. koju je unio/unijela 4ndY (razgovor | doprinosi)

Skoči na: orijentacija, traži

GRUB ili punim nazivom GRand Unified Bootloader je prvi program koji se pokreće nakon što BIOS prepusti kontrolu učitavanja operacijskog sustava. Direktno je zadužem za učitavanje kernela operacijskog sustava, koji dalje učitava ostatak.

Ovaj bootloader je najrašireniji u Linux svijetu danas, no nije i jedini. Naime, postoji i LILO bootloader koji se i dalje koristi, ali manje

Opis

GRUB menu na početku učitavanja Linuxa

GRUB je zadužen, kao i ostali bootloaderi za učitavanje kernela operacijskog sustava ili čak daljnje učitavanje drugog bootloadera (kao što je to slučaj sa MS Windowsima). Radi preko tri stanja odnosno Stage-ova.


Stage 1

Nalazi se u 512 byteova MBR sektora jer je MBR sektor na PC računalima veličine 512 byteova. Sve što on mora jest učitati Stage 2 ili Stage 1.5 dio GRUB-a sa lokalnog diska. Zbog ograničenog prostora Stage 1 prevodi lokaciju od Stage 2 (ili Stage 1.5) u tzv. block list format, tako da ne mora poznavati niti jedan datotečni sustav.

Stage 1.5

e2fs_stage1_5
fat_stage1_5
ffs_stage1_5
jfs_stage1_5
minix_stage1_5
reiserfs_stage1_5
vstafs_stage1_5
xfs_stage1_5

Ovo je nazvano Stage 1.5 jer stvara most između Stage 1 i Stage 2, odnosno drugačije rečeno Stage 1.5 se učitava od strane Stage 1, a Stage 1.5 učitava Stage 2.

Razlika između Stage 1 i Stage 1.5 je u tome što ovaj prvi ne poznaje niti jedan datotečni sustav, dok drugi razumije jedan (npr. e2fs_stage1_5 razumije Ext2). Stoga je moguće postaviti Stage 2 podatke na drugu lokaciju bez bojazni, čak i nakon instalacije GRUB-a.

Dok Stage 2 ne može u pravilu biti postavljen u fiksno područje jer je pre velik, Stage 1.5 može biti postavljen u područje odmah iza MBR sektora.

Stage 2

To je glavnina GRUB-a, te on čini sve dalje. Obično se postavlja unutar datotečnog sustava, ali to nije nužno.

Podešavanje

Sve bitno i potrebno za podešavanje GRUB-a nalazi se unutar datoteke /boot/grub/menu.lst. Datoteka je tekstualna i lako se editira preko bilo kojeg tekstualnog editora instaliranog unutar vaše Linux distribucije. Kako je ovo od prilične važnosti za ispravno učitavanje ostatka operacijskog sustava, proći ćemo kroz sve bitne naredbe koje se nalaze unutar menu.lst datoteke

Zadani redak izbornika

Ako želite da vam GRUB meni odmah odebare željenu redak u svom meniju, potrebno je podesiti naredbu default:

default n

gdje je n redni broj izbornikovog redka. Pazite, prvi redak ima oznaku 0 (nula), drugi - 1 itd.

Vrijeme čekanja na odabir

Ako želite promijeniti vrijeme čekanja GRUB-a da sam odabere zadani redak u izobrniku, onda to radite preko naredbe timeout:

timeout n

gdje je n vrijeme čekanja na automatski odabir u sekundama

Sljedeći izbor

Za podešavanje koji je sljedeći mogući izbor, ukoliko GRUB iz određenog razloga ne može startati zadani redak činite naredbom fallback:

fallback n

gdje je n redni broj izbornikovog redka. Pazite, prvi redak ima oznaku 0 (nula), drugi - 1 itd.

Definicije operacijskog sustava

Ovim naredbama definiraju se svi potrebni parametri za ispravno učitavanje kernela određenog operacijskog sustava. Ako na ovom mjestu pogriješite, nećete moći učitati željeni operacijski sustav. Mudro je, ako radite neka nova podešavanja da ih radite kao novu instancu, a prema kopiji starih, a stara (koja rade uredno) ostavite unutar menu.lst-a sve dok niste potpuno sigurni da novokreiranim redkom izbornika možete normalno podići operacijski sustav.

Dakle, svaka instanca za učitavanje kernela operacijskog sustava počinje sa naredbom title, koja predstavlja tekst koji se pojavljuje u GRUB izborniku. Odnosno, predstavlja opis onoga što pokrećete tim odabirom. Definira se ovako:

title Opis operacijskog sustava u izborniku

Slijedi obično naredba root, koja definira koji disk i particija predstavlja korijen operacijskog sustava. Definira se ovako:

root (hdx,y)

Gdje je:

  • x - redni broj tvrdog diska na kontroleru. Prvi disk je 0, drugi - 1 itd.
  • y - redni broj particije na x-tom disku. Prva particija je 0, druga - 1 itd.

Slijedeća naredba je kernel kojom se daju sve potrebne definicije za ispravno učitavanje slike kernela sa diska:

kernel		/boot/vmlinuz-... root=UUID=... opcije kernela

Gdje je:

  • /boot/vmlinuz-... - mjesto i naziv datoteke slike kernela koji se starta
  • root=UUID=... - UUID oznaka root (/) particije datotečnog stabla instaliranog operacijskog sustava. UUID oznaku particije možete lako dobiti naredbom blkid
  • opcije kernela - ako se želite uključiti određene opcije kernela, koje on izvršava tijekom svojeg postavljanja, onda ih upisujte ovdje i razmaknite ih praznim mjestima

Slijedi naredba initrd koja učitava inicijalni ramdisk. Unutar initrd-a nalaze se svi potrebni driveri koji kernelu trebaju priliko podizanja operacijskog sustava, a ne nalaze se u samoj slici kernela.

initrd		/boot/initrd.img-...

Gdje je /boot/initrd.img-... - mjesto i naziv datoteke slike initrd-a koji se učitava.

Cijeli blok opisa završava se naredbom quiet koja nije nužna i više je estetske prirode, a zadatak joj je da ne prikazuje nepotreban tekst na ekranu priliko daljnjih faza podizanja operacijskog sustava. Ona nema parametara.

quiet

Primjer

Primjer jednog bloka za ispravno učitavanje Ubuntu distribucije možete vidjeti ispod:

title		Ubuntu 8.04.1, kernel 2.6.24-22-generic
root		(hd1,1)
kernel		/boot/vmlinuz-2.6.24-22-generic root=UUID=af03b0cc-0fcb-4006-9fc4-105745fc9187 ro quiet splash
initrd		/boot/initrd.img-2.6.24-22-generic
quiet

Postavljanje lozinke na GRUB

Bez lozinke na GRUB-u, vrlo je lako domoći se root ovlasti na instaliranom sustavu kod većine distribucija. Stoga je lozinka na GRUB must-have. Postavljamo je u dva koraka:

1. generiramo je, tako da pokrenemo grub iz komandne linije
grub
i upišemo naredbu
md5crypt
i željenu lozinku, pa dobijemo md5 hash te lozinke koji za sad snimimo (c/p) i izađemo iz grub-a s quit.
2. Snimljeni hash lozinke postavimo u grub konfiguracijsku datoteku u ovom obliku i to odmah na sam početak:
password --md5 $1$qhkF./$LTG9vmrVb7BJXkeF5UV821

I to je to.

Učitavanje MS Windows operacijskog sustava

Informacija
Chain-loading je proces učitavanja drugog bootloadera umjesto kernela operacijskog sustava

Mnogi žele uz Linux imati i MS Windows operacijski sustav na svom računalu, te prilikom pokretanja odabirati operacijski sustav po želji. Međutim, GRUB ne može direktno učitati Windowse preko sebe, nego se služi tzv. chain-loading-om. Takvo učitavanja donekle komplicira stvar oko podešavanja GRUB-a, ali uz ova objašnjenja pokušati ćemo i tu stvar donekle olakšati.

Prvi problem na kojeg možete naići jest ako želite podići WIndows-e sa diska koji nije prvi disk u sistemu (u slučajevima da ste za Linux kupili novi disk, te ga postavili u računalo kao prvi disk u sustavu, a stari disk, na kojemu se od prije nalaze Windowsi premjestili na drugu poziciju kontrolera). Kako se Windowsi ne mogu podići sa diska koji nije prvi treba napraviti prividnu zamjenu diskova. To se radi preko GRUB naredbe map ovako:

map (hd0) (hd1)
map (hd1) (hd0)
Warning.png
Upozorenje

Naredba map radi samo ako Windowsi koriste BIOS za pristup zamjenjenom disku.

Nakon ovoga, naš Windows disk sada postaje hd0, a Linux disk hd1. Zapamtite da se ova zamjena dešava samo prilikom podizanja Windowsa, ali ne i Linuxa. Također, ako su vaši WIndowsi i dalje na jednom te istom disku kao i ranije, a Linux ste instalirali na drugu particiju tog istog diska, onda za ovim neće biti potrebe.

Slijedeći problem može iskrsnuti u koliko imamo na jednom disku više od jedne instalacije Windowsa. Što se može desiti ako imate i WindowsXP i Vistu na istom disku, ali na dvije particije. Takva stvar može zbuniti GRUB. Da bi riješili i taj nered, posegnuti ćemo za hide i unhide naredbama za particije. Neka u našem primjeru postoje dvije instalacije Windows-a i to na 1. i 2. particiji diska, a mi želimo učitati Windowse iz 1. particije. U tom slučaju drugu particiju moramo sakriti, a prvu otkriti ovako: unhide (hd0,0) hide (hd0,1) Opet, ako nemamo slučaj višestrukih instalacija Windows-a ona izbacujemo i ove naredbe.

Sada dopisujemo ostatak bloka naredbi za podizanje Windows operacijskog sustava:

rootnoverify (hd0,0)

Podešavamo root particiju operacijskog sustava (slično kao naredba root), samo ova služi u slučajevima kada GRUB ne može pristupiti dijelovima diska (zbog npr. nepodržanog datotečnog sustava)

Parametri (hdx,y) Gdje je:

  • x - redni broj tvrdog diska na kontroleru. Prvi disk je 0, drugi - 1 itd.
  • y - redni broj particije na x-tom disku. Prva particija je 0, druga - 1 itd.
chainloader +1

Jednostavno, učitava prvi sektor trenutne particije (definirane ispred sa rootnoverify)

makeactive

Postavlja trenutnu particiju - aktivnom.

boot

Izvršava učitani bootsektor (učitan naredbom chainloader +1) ili točnije, pokreće učitavanje Windows operacijskog sustava

Primjeri

Imamo dvije instalacije Windowsa na drugom disku po redu (WindowsXP na 1. particiji i Vistu na 2. particiji)

Učitavanje WindowsXP-a:

title Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
chainloader +1
makeactive
boot

Učitavanje Viste:

title Vista
map (hd0) (hd1)
map (hd1) (hd0)
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
chainloader +1
makeactive
boot

Imamo jedne WindowseXP i jedan Linux na istom disku. Windowsi su na 1. particiji, a Linux na 2. particiji

title WindowsXP
rootnoverify (hd0,0)
chainloader +1
makeactive
boot

Reinstalacija - popravak GRUB-a

Ponekad se može desiti da instalacijom nekog drugog operacijskog sustava nepažnjom obrišemo Stage 1 GRUB-a koji se nalazi u MBR sektoru. Takva stvar se redovno dešava pri instalaciji Windows operacijskog sustava nakon već instaliranog Linux-a. Tada dolazi do problema jer ne možemo pristupiti GRUB izborniku niti Linux-u.

Problem se rješava prilično jednostavno, a sve što nam treba jest LiveCD Linux distribucija na CD-u. Podignemo Linux sa LiveCD-a Odlazimo u terminal, postavimo se kao root (sa su ili sudo) i tipkamo:

grub

Odnosno:

sudo grub

Unutar grub programa pišemo:

find /boot/grub/stage1

Čime tražimo poziciju Stage 1 dijela GRUB-a.
Kao odgovor dobivamo (hdx,y)
Gdje su x i y brojevi koji predstavljaju disk i particiju na kojoj se nalazi Stage 1

Sada pišemo slijedeće naredbe

root (hdx,y)
setup (hdx)
quit

Ovime je popravak GRUB-a u MBR sektoru gotov, te restartamo računalo, izvadimo LiveCD iz CD pogona i ponovo pokrenemo sa tvrdog diska.

Primjer

sudo grub
find /boot/grub/stage1
(hd0,0) <--- dobijemo kao rezultat!
root (hd0,0)
setup (hd0)
quit

Poruke o greškama

Kako o GRUB-u ovisi daljnje učitavanje operativnog sustava, smatramo bitnim da se ovdje postavi popis svih mogućih grešaka koje može prijaviti GRUB prilikom izvršavanja nekog od svojih nivoa.

Stage 1 greške

Prilikom prijave greške na ovom nivou, GRUB daje ime greške na ekranu i zaustavlja računalo. Ponovo pokretanje je moguće pritiskom na CTRL+ALT+DEL

Poruka greške Opis greške
Hard Disk Error Ne može odrediti veličinu i geometriju tvrdog diska sa kojeg se učitava Stage 1.5 ili Stage 2
Floppy Error Ne može odrediti veličinu i geometriju diskete s koje se učitava Stage 1.5 ili Stage 2
Read Error Greška pri čitanju sa diska prilikom učitavanja Stage 1.5 ili Stage 2. Može se sumnjati na oštećenje diska!
Geom Error Lokacija Stage 1.5 ili Stage 2 nije u dijelu diska kojem se može pristupiti direktno preko BIOS-ovih poziva. Ovo se može desiti ako se u BIOS-u naknadno mijenjaju podaci o geometriji diska ili je disk prebačen u drugo računalo ili na drugi kontroler nakon instalacije GRUB-a.

Stage 1.5 greške

Uobičajeni način na koji Stage 1.5 prijavljuje greške jest da ispiše broj greške na ekranu u formi: Error broj i zaustavlja računalo. Pritiskom na CTRL+ALT+DEL moguće je restartati ga.

Brojevi grešaka odgovaraju greškama prijavljenim od Stage 2 dijela GRUB-a, pa pogledajte na Stage 2 greške

Stage 2 greške

Način na koji Stage 2 prijavljuje greške sastoji se u prekidu operacije, prijavi greške na ekranu, te (ako je moguće) nastavlja sa operacijama uz činjenicu da se greška desila ili čeka na korisnikovu odluku.

Stage 1.5 greška Stage 2 greška Opis greške
1 Filename must be either an absolute filename or blocklist Ime datoteke koje je navedeno u postavkama GRUB-a ne odgovara sintaksi/pravilima za dodjeljivanje imena datotekama
2 Bad file or directory type Datoteka koju želite pozvati navedenim imenom nije datoteka nego je poveznica ili direktorij
3 Bad or corrupt data while decompressing file Greška pri otpakiravanju pozvane datoteke. Vjerojatno je datoteka koju pozivate oštećena.
4 Bad or incompatible header in compressed file Zaglavlje zapakirane datoteke je nekompatibilno, tj. GRUB ne može otpakirati datoteku.
5 Partition table invalid or corrupt Greška koja se javlja ako provjera integriteta particijske tablice nije prošla. To je loš znak i upućuje na oštećenja diska i gubitak podataka.
6 Mismatched or corrupt version of stage1/stage2 Greška prilikom install naredbe, kada ona pokazuje na nekompatibilne ili oštećene verzije Stage 1 ili Stage 2 dijela GRUB-a
7 Loading below 1MB is not supported Greška u koliko je najniža adresa u kernelu ispod okvira od 1 MB. Linuxov zImage format je specijalni slučaj i može biti obrađen čak i kada ima fiksnu adresu i maksimalnu veličinu.
8 Kernel must be loaded before booting Javlja se u koliko je GRUB-u naređeno da izvrši boot bez da je prethodno učitao kernel.
9 Unknown boot failure Greška ukoliko nije uspjelo podizanje sustava iz nepoznatih razloga
10 Unsupported Multiboot features requested Greška koja se javlja kada Multiboot opcija u Multiboot zaglavlju zahtjeva opciju koja nije prepoznata. Naglasak ovdje je da kernel traži posebni tretman kojeg GRUB nije u mogućnosti pružiti.
11 Unrecognized device string Javlja se kada se očekuje ime uređaja, a dobiveno ime ne odgovara sintaksi/pravilima datotečnog sustava.
12 Invalid device requested Javlja se priliko uredno prepoznatog naziva uređaja, ali ne prolazi uslijed drugih grešaka uređaja.
13 Invalid or unsupported executable format Javlja se ako je slika kernela učitana, ali nije prepoznata kao Multiboot ili kao jedna od podržanih formata (Linux zImage ili bzImage, FreeBSD ili NetBSD)
14 Filesystem compatibility error, cannot read whole file Dio koda datotečnog sustava u GRUB-u ima ograničenja na duljinu datoteka koje može učitati.
15 File not found Javlja se ako ne može naći traženu datoteku, a sve drugo je dobro (npr. disk ili particija)
16 Inconsistent filesystem structure Greška se javlja ako datotečni sustav javlja interne greške unutar svoje strukture. To obično upućuje na oštećenja datotečnog sustava ili greške u kodu kojim upravlja GRUB.
17 Cannot mount selected partition Greška u koliko tražena particija postoji, ali GRUB ne može prepoznati datotečni sustav.
18 Selected cylinder exceeds maximum supported by BIOS Greška se javlja ukoliko se pokušava čitati sa linearne blok adrese iza kraja koji kojeg BIOS može dohvatiti. U pravilu se dešava ako je disk veći od onog s kojim BIOS može raditi (512 MB za (E)IDE diskove na starijim mašinama ili u pravilu veće od 8GB)
19 Linux kernel must be loaded before initrd Javlja da je izvršena naredba initrd prije nego se učitao Linux kernel
20 Multiboot kernel must be loaded before modules Greška se javlja ako je izvršena module load naredba prije nego je učitan Multiboot kernel. Ovo jedino ima smisla u slučaju kada GRUB nema načina kako da komunicira sa takvim modulima i ne-Multiboot kernelom.
21 Selected disk does not exist Javlja se ukoliko dio uređaja, uređaj ili datoteka koja upućuje na disk ili BIOS uređaj ne postoji ili nije preoznata od strane BIOS-a.
22 No such partition Javlja se ukoliko zahtjevana particija nije na odabranom disku
23 Error while parsing number Javlja se ukoliko GRUB očekuje broj, a dobiva krive podatke.
24 Attempt to access block outside partition Javlja se u slučaju kada je linearna blok adresa van diskovne particije. To se uglavnom dešava kod oštećenog datotečnog sustava na disku ili zbog greške u kodu GRUB-a
25 Disk read error Javlja se kao greška prilikom pokušaja čitanja sa diska. Upućuje na oštećenja diska.
26 Too many symbolic links Javlja se ukoliko je broj linkova prešao maksimum (trenutno 5). Moguće je da su simbolički linkovi u petlji.
27 Unrecognized command Javlja se ako je unesena nepoznata naredba bilo preko GRUB ljuske, bilo unutar konfiguracijske datoteke.
28 Selected item cannot fit into memory Greška se javlja ako naredba za učitavanje kernela, modula ili datoteke pokušava učitati podatke koji ne stanu u memoriju ili su jednostavno preveliki.
29 Disk write error Greška prilikom pokušaja zapisivanja na disk.
30 Invalid argument Javlja se ukoliko je unesen krivi parametar neke naredbe.
31 File is not sector aligned Može se pojaviti samo priliko pristupa RaiserFS datotečnom sustavu preko blok liste (npr. naredbom install). U tom slučaju potrebno je montirati particiju sa opcijom -o notail.
32 Must be authenticated Javlja se ukoliko pokušavate pristupiti zaključanom dijelu. Morate unijeti ispravnu šifru prije nego mu pristupite.
33 Serial device not configured Javlja se ukoliko želite promijeniti svoj terminal na serijski prije nego ste inicijalizirali serijski uređaj.
34 No spare sectors on the disk Greška se javlja ako disk nema dovoljno rezervnog prostora. Dešava se ako pokušavate složiti Stage 1.5 na neiskorištene sektore nakon MBR-a, ali prva particija počinje odmah nakon MBR sketora ili se koristi od strane EZ_BIOS-a.

Reference

GRUB reference

Ukoliko želite znati više o GRUB-u ili vam trebaju informacije kojih ovdje nema, sve možete naći pod GRUB dokumentacijom