Hlavní navigace

Poznejte boot loader GRUB2

Petr Krčmář 11. 2. 2010

Boot loader GRUB je z mnoha důvodů mezi linuxovými uživateli a distributory velmi oblíbený. Velké distribuce postupně přecházejí na druhou verzi, která je ale co do správy podstatně jiná a komplexnější. Mnoho uživatelů tedy hledá staré konfigurační soubory tam, kde nejsou. Jak se nový GRUB spravuje?

GRUB byl původně vyvíjen v rámci projektu Hurd, tedy přímo pod iniciativou GNU. Od roku 1999 je to oficiální boot loader projektu GNU a postupně jej převzaly všechny velké distribuce. Proti zavaděči LILO, který byl používán dříve, je GRUB výrazně mocnější, rozumí obsahu souborového systému a umí proto dynamicky načítat konfiguraci při startu nebo je možné jej dodatečně konfigurovat už za běhu.

Původní první řada (nejnovější je verze 0.97) je dnes označována jako GRUB Legacy a už není nadále vyvíjena. Vývojáři do ní budou jen přidávat opravy chyb, ale další vývoj se zaměřuje na GRUB2. Současná verze nese označení 1.97.2. Dvojková řada se z uživatelského hlediska od té první výrazně liší. Cílem článku je tyto rozdíly představit a vysvětlit principy novější řady. Část distribucí už na novou verzi přešla.

Anketa

Kterou řadu GRUB máte nainstalovanou?

Proč GRUB2?

GURB2 je logickým pokračovatelem první řady, jedná se ale o kompletní přepis původního kódu s cílem přinést robustnější, modulární a mocnější nástroj. Hlavní novinky můžeme shrnout do několika bodů:

  • podpora ne-x86 platforem
  • podpora lokalizace
  • možnost zobrazení ne-ASCII znaků
  • podpora modulů
  • vylepšená správa paměti
  • vlastní skriptovací jazyk
  • přesun platformně závislého kódu do modulů

Zmíněné moduly naleznete v adresáři /boot/grub a obvykle mají jen několik málo kilobajtů. Mají příponu .mod a v konfiguračním souboru se volají příkazem insmod. Naleznete tu například podporu pro png či tga obrázky pozadí, ovladač pro čtení ze souborových systému etx2, ZFS, NTFS a dalších. V mém Debianu je modulů celkem 158.

Důležitý je také důraz na automatickou konfiguraci zavaděče. Zatímco dříve různé aplikace parsovaly centrální konfigurační soubor, dnes je vše prováděno na úrovni automatických skriptů a modulů. To je také hlavní kámen úrazu u uživatelů, kteří nemají s novou verzí zkušenosti. Stará pravidla zde neplatí a vše je zcela jinak.

Konec ruční editace

Původní GRUB byl konfigurovatelný pomocí standardního textového souboru, který se nacházel v /boot/grub/menu.lst. V něm byla uložena celá konfigurace zavaděče a odtud ji také při každém startu natahoval. Tento soubor se nadále nepoužívá a nahradil jej soubor /boot/grub/grub.cfg. Podstatný rozdíl je, že tento nový soubor už se ručně needituje.

O jeho vygenerování se starají specializované utility, především update-grub2. To je ovšem jen zástupce pro zpětnou kompatibilitu, který doopravdy spouští příkaz update-grub. Aby toho ale nebylo málo, poslední jmenovaný skript je velmi jednoduchý a vlastně jen zavolá následující příkaz:

# grub-mkconfig -o /boot/grub/grub.cfg

Tím spouštíme skript, který začně automaticky na základě jiných souborů generovat finální konfiguraci. Pokud si chcete jeho funkčnost vyzkoušet „nanečisto“, můžete vynechat parametr -o a výstup se bude objevovat na obrazovce.

Odkud se berou podklady

Podklady pro tvorbu konfigurace se sbírají z několika zdrojů. Především se jedná o soubor /etc/default/grub a skripty v adresáři /etc/grub.d/. To je také způsob, jak mohou nově nainstalované balíky přidat položku do menu GRUB. Prostě jen přidají svůj skript do adresáře /etc/grub.d/. Vezmeme to ale postupně.

Už zmíněný soubor /etc/default/grub obsahuje základní globální konfigurace zavaděče. Zde je možné ručně nastavit, která položka bude po startu standardně zvolena, kolik sekund bude GRUB čekat na uživatelský vstup a podobně. Také zde ovlivňujeme některé skripty, které například nemusejí generovat položky s „recovery“ režimem a podobně. Tento soubor je určen pro ruční editaci.

To nejdůležitější se ukrývá v adresáři /etc/grub.d/. Jsou to spustitelné bash skripty, které utilita update-grub postupně spouští. Skripty začínají číslem (podobně jako init skripty) a jsou automaticky spouštěny ve správném pořadí. Čísla nejsou volena náhodně, ale mají vlastní pravidla:

  • 00 je rezervováno pro generování hlavičky z konfiguračního souboru
  • 10 hlavní bootovací položky
  • 20 aplikace třetích stran

Pokud tedy nainstalujete například utilitu Memtest, balíček kromě samotného programu dodá také skript 20_memtest, který se při spuštění postará o nezbytné akce a předá generátoru konfigurace informace pro další položku v GRUB menu. Skripty jsou jednoduše spouštěny a výstup vypisují na standardní výstup. Můžeme si tak zkusit skript ručně spustit:

$ ./20_memtest86
Found memtest86 image: /memtest86.bin
menuentry "Memory test (memtest86)" {
    linux16 /memtest86.bin
}

Vidíte, že skript našel obraz s aplikací Memtest a vygeneroval novou položku pro GRUB. Následující výstup by byl při normálním provozu zapsán do souboru  /boot/grub/grub.cfg.

Pokud chcete přidat vlastní položky menu, máte dvě možnosti: buďto si napíšete celý vlastní skript nebo můžete využít souboru 40_custom, který je standardně prázdný a je určen právě pro uživatele. Skript může být velmi jednoduchý, nemusí nic kontrolovat, jen může prostě vypsat to, co byste postaru vepsali do konfiguračního souboru. Nezapomeňte, že se skripty spouštějí vždy ve stejném pořadí, tím můžete ovlivňovat také to, jak bude poskládána výsledná konfigurace.

Co dělají standardní skripty

V každé distribuci jsou k dispozici jiné standardní grub.d skripty, jejich funkce je ale obvykle podobná. Soubor 00_header sleduje obsah souboru /etc/default/grub a na jeho základě vytvoří základ konfigurace. U mě v Debianu (a v Ubuntu také) následuje soubor 05_debian_theme, který nastavuje vzhled zavaděče. Zde se vybírá obrázek pro pozadí a barvičky fontů. Důležitý skript 10_linux prohledá disk, najde všechna linuxová jádra a vytvoří pro ně položky v menu, případně i položky s (recovery), pokud jsme mu to dříve nezakázali.

Dále u mě následuje zmíněný skript 20_memtest86 následovaný 20_memtest86+, pro jinou verzi Memtestu. Jak vidíte, dva různé programy zde nijak nekolidují, každý si jednoduše dodal svůj vlastní skript a nakonec se provádějí oba. V menu jsou pak položky pro obě aplikace. Předposlední skript 30_os-prober se stará o hledání dalších operačních systému (třeba Windows) a jejich zařazení do zavaděče a konečně poslední 40_custom slouží pro přidání uživatelských položek. Počet skriptů v adresáři se může samozřejmě lišit v závislosti na distribuci a nainstalovaných balíčcích.

Závěrečné shrnutí

Cílem článku bylo vysvětlit principy konfigurace nové verze zavaděče GRUB2, se kterou ještě nemá většina uživatelů zkušenosti. Jelikož se změnil a zkomplikoval celý koncept nastavování, jsou uživatelé často zmatení z toho, že na disku nenacházejí obvyklý konfigurační soubor a tápou při hledání toho, kde se ten nový nachází. GRUB2 je velmi mocným a silně konfigurovatelným nástrojem, se kterým se ale většina uživatelů musí teprve sžít. Stále však platí to, co zaznělo před šesti lety na OpenWeekendu: Co nejde nabootovat Grubem… to nejde nabootovat.

Našli jste v článku chybu?

11. 2. 2010 2:07

Hulka (neregistrovaný)

Muze mi tu nekdo vysvetlit k cemu presne je ten grub2 dobrej? Z toho co jsem si tu precetl to vypada ze je dobrej mozna tak pro novy BFU uzivatele (lokalizace + non-ASCII). Dalsi pozitiva budu hledat asi tezko. Linux jako takovy tu existuje pro mnoho architektur proto usuzuji ze pokud se nebootovalo z GRUBU (ze by to snad neumel – nemam zkusenosti) tak evidentne musi existovat jiny zavadec ktery by umel nabootovat na non-x86 systemech. Pokud svou praci odvadel dobre tak nevidim jediny duvod nasa…

11. 2. 2010 9:09

Xjmeno363 (neregistrovaný)

vůbec nelíbí

jak třeba nahradím standardní krizový postup:

root (…
initrd…
kernel…
boot…

co setup – bude fungovat nad rozmrdaným systémem?

když teče do bot a server stojí, tak mě tyhle „vylepšení“ dokáží maximálně vytočit




Vitalia.cz: Pečete cukroví a zbyl vám bílek?

Pečete cukroví a zbyl vám bílek?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky