Linux E X P R E S

Facebook

Jak se zavádí operační systém?

Když chcete spustit nějaký program, spustíte jej za pomoci operačního systému. Co ale spustí samotný operační systém? Odpověď je jasná – zavaděč systému neboli boot loader.


V dnešní době máme ve světě Linuxu na běžném hardwaru v podstatě dvě možnosti – LILO a GRUB. Která je vhodnější, to záleží zejména na nasazení. Pro domácí stanice je spíše výhodnější použít zavaděč GRUB, má mnoho šikovných vlastností, které nám můžou ulehčit práci v běžných i nečekaných situacích.

Nejdříve si projdeme základní terminologii, kterou GRUB používá. Pro označování disků a oddílů na disku se nepoužívají standardní názvy zařízení jako např. /dev/hda, ale disky i oddíly jsou očíslovány. Ovšem je potřeba dát si pozor, protože číslování začíná od nuly, a ne od jedničky, jak jsme zvyklí. První pevný disk v systému (toto pořadí vychází z nastavení BIOSu) nese označení (hd0) a první oddíl na prvním pevném disku (hd0,0) . První disketová mechanika (floppy disk) je (fd0) . Závorky jsou velmi důležité, bez nich by GRUB označení nerozeznal.

Konfigurační soubor menu.lst, případně grub.conf, se nachází v adresáři /boot/grub. Většinou to bývá soubor grub.conf a menu.lst je pak symbolický odkaz na něj. Jeho syntaxe je vcelku jednoduchá – nejdříve se uvedou globální nastavení a pak postupně seznam položek v menu. Parametry default a timeout nám určují číslo položky v menu, která bude při startu systému implicitně vybrána, a čas do jejího automatického spuštění. Menu lze při startu systému skrýt uvedením parametru hiddenmenu v konfiguračním souboru. Uživatel jej při startu systému stále může zobrazit pomocí [Esc].

Další zajímavou volbou je volba fallback, kde můžeme uvést číslo položky, která se automaticky spustí v případě, že při pokusu o spuštění položky default došlo k chybám. To lze využít při přidávání nových záznamů do menu (např. instalace nového jádra) – parametr default se změní na číslo nové položky a do fallback se uvede starý záznam (osvědčený a funkční). Při následném restartu systému se GRUB pokusí spustit položku default – a v případě, že tuto položku nelze spustit (např. kvůli překlepu v názvu jádra, které pak GRUB nenajde), spustí fallback. Toto nás samozřejmě neochrání před chybami, které mohou nastat po spuštění nového jádra.

Při práci s GRUBem se používají přímo názvy souborů, s uvedením, na kterém disku a oddílu disku se nacházejí. Toto si nejlépe ukážeme na příkladu: potřebujeme GRUBu zadat soubor /boot/vmlinuz . Ten se nachází na oddílu, který máme připojen jako root (/), a zařízení v systému, na němž je souborový systém umístěn, nese označení /dev/hdb2. Při tvorbě jednoznačného označení pro GRUB musíme postupovat od konce – zjistíme tedy, že tento soubor se nachází na druhém oddílu (pravděpodobně) druhého pevného disku. Výraz „pravděpodobně“ je na místě, protože se může stát, že číslování disků BIOSem zcela neodpovídá jejich označení v operačním systému. Nicméně ve většině případů toto platí a můžeme se toho držet.

Pozor na případy, kdy je adresář /boot umístěn na odděleném souborovém systému na jiném diskovém oddílu! Jako root je pak v GRUBu potřebné uvádět označení diskového oddílu pro adresář /boot, a nikoliv pro kořenový adresář systému! Také při uvádění cesty k souboru je s tím nutné počítat a místo /boot/vmlinuz uvádět pouze /vmlinuz . Cesta k souboru je vždy relativní ke kořenovému adresáři souborového systému.

Již víme, že GRUB místo od jedničky čísluje od nuly – takže druhý oddíl na druhém disku bude mít označení (hd1,1) . Když jsme to úspěšně zjistili, jednoduše připojíme relativní souborovou cestu k tomuto označení. V našem ukázkovém případě by to bylo (hd1,1)/boot/vmlinuz . Pokud používáme v konfiguraci více označení souborů, které se všechny nalézají na tom samém diskovém oddílu, lze uvést na začátek konfiguračního souboru parametr root a všechny cesty budou pak automaticky přiřazeny k tomuto oddílu disku. Syntaxe je velmi jednoduchá, stačí napsat root (hd1,1) a druhý oddíl druhého disku se nastaví jako výchozí. Když pak napíšeme pouze /boot/vmlinuz , GRUB již bude vědět, že se jedná o soubor (hd1,1)/boot/vmlinuz . Při uvádění souboru z jiného oddílu disku je samozřejmě pak potřebné uvést tento oddíl explicitně.

Alternativou, jak se pojistit proti problémům kvůli nesprávné interpretaci cest k souborům na různých souborových systémech, je vytvoření symbolického odkazu pomocí příkazu cd /boot;ln -s . boot . Některé distribuce tento symbolický odkaz vytvářejí automaticky.

Do konfiguračního souboru lze také uvést heslo, které bude vyžadováno při spuštění systému pro výběr zamčených položek menu, případně zobrazení příkazového řádku. Toto heslo je dobré zašifrovat pomocí nástroje grub-md5-crypt a do konfiguračního souboru nikdy neuvádět heslo v podobě čistého textu. Stačí spustit grub-md5-crypt, zadat heslo a ono se zobrazí v zašifrované podobě. Do konfiguračního souboru pak přidáme řádek password --md5 [zašifrované_heslo]. Tento řádek je možné přidat jak do hlavní části konfigurace (před seznam položek), tak případně k jednotlivým položkám menu. V prvním případě pak lze uvést volbu lock ke každé položce menu, kterou chceme neoprávněným osobám znepřístupnit. Navíc bude znemožněna editace položek a zobrazení příkazového řádku GRUBu. Na konec řádku lze přidat také název souboru s menu, jež se zobrazí, když zadáme heslo, místo menu normálního. V případě druhém budeme také vyzváni k zadání hesla, ovšem pouze při pokusu o spuštění dané položky menu.

Po globálních volbách následují položky pro menu, ve kterých je popsáno, co má GRUB skutečně spustit. Každá položka menu začíná řádkem s parametrem title [název položky v menu]. Za ní je možné uvést parametr lock, který při použití hesla v hlavní části konfiguračního souboru položku zamkne, a ta bude bez hesla nepřístupná. Je vhodné uvést root pro spouštěný operační systém. Pro spouštění Linuxu dále kernel [soubor] [parametry] a případně také initrd [soubor]. GRUB dokáže spouštět místo operačního systému také jiné zavaděče, například pro Windows či FreeBSD. V případě Windows se místo parametru kernel uvede příkaz chainloader +1 – GRUB pak načte první sektor oddílu disku a spustí jej. Toto lze využít i pro položku pro spuštění systému z diskety, kde je vhodné také přidat volbu rootnoverify. GRUB se totiž snaží zjistit, zda daná zařízení a soubory jsou přístupné při jeho zavedení na disk – a disketa je vyměnitelné médium, které v mechanice při instalaci být nemusí.

GRUB umožňuje kromě nastavení barev v menu také použití obrázku na pozadí a mnoho dalších voleb, které naleznete v texinfo manuálu ve svém systému pomocí info grub .

GRUB již máme nakonfigurován, ale jak jej zavést na disk, aby se spouštěl při startu systému? Možnosti máme dvě: buď zkusit instalaci z operačního systému, nebo vytvořit spouštěcí disketu a nainstalovat GRUB z ní. Jednodušší je použít první způsob, ovšem v případě, že z nějakého důvodu chcete GRUB zavést ne do MBR, ale do prvního sektoru určitého diskového oddílu, je potřeba použít disketu. Protože toto je velmi specifické, popíši pouze první způsob.

MBR – master boot record – je prvních 512 bajtů na disku, kde je uložen program pro spouštění operačního systému. Jelikož je 512 bajtů značně málo, při použití složitějšího zavaděče (jakým GRUB bezesporu je), je v MBR uložen pouze stage1. MBR obsahuje také primární tabulku rozdělení disku.

Nejdříve musíme zjistit, kde se soubory GRUBu nalézají na disku - měly by být v adresáři /boot/grub – musíme znát číslo disku a oddíl, na kterém se tento adresář nalézá. Je nutné, aby tam byly soubory stage1, stage2 a pak stage1_5 pro použité souborové systémy, na nichž je GRUB a jádra operačních systémů, které chceme spouštět. Samozřejmě se nic nezkazí, když budou k dispozici všechny *_stage1_5 soubory. Spuštěním programu grub vyvoláme jeho příkazový řádek. Pro zavedení do MBR prvního disku (což ve většině případů bude našim cílem), zadáme následující příkazy:

stage1 je první „stupeň“ zavaděče, který pouze načte do paměti a spustí stage2, kterou hledá podle pevně dané adresy na disku.

stage2 je druhý „stupeň“ zavaděče a program, který vidíme při spouštění systému a umožňuje nám např. zobrazení menu a výběr operačního systému.

stage1_5 – GRUB používá také tento „poloviční stupeň“, který je v podstatě ovladačem pro určitý typ souborového systému. Jelikož je možné pomocí GRUBu procházet adresářovou strukturu na disku, je takovýto ovladač nutný.

root (hdX,Y)
setup (hdZ)

Kde X a Y označují disk a oddíl disku, kde jsou soubory GRUBu a jádra systému – ve většině případů oddíl disku, na kterém je souborový systém připojen jako /boot, případně kořenový adresář systému; a Z označuje číslo disku, na který chceme GRUB zavést. Pro první disk zadáme setup (hd0) .

GRUB je velmi specifický tím, že při startu systému můžeme pomocí klávesy [e] editovat položky z menu před jejich následovným spuštěním klávesou [b]. Také lze vyvolat příkazový řádek pomocí [c] a do něj psát příkazy (nejen) na spuštění operačního systému. Používají se zde stejné příkazy jako v konfiguračním souboru. Navíc obsahuje GRUB různé jiné příkazy, pomocí kterých můžeme provádět operace jako binárně porovnat dva soubory, načíst data z paměti apod.. Pro vážné zájemce je tady opět info grub, v sekci Index naleznete seznam všech použitelných příkazů.

Diskuze (4) Nahoru