Poznejte boot loader GRUB2

11. 2. 2010
Doba čtení: 5 minut

Sdílet

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.

Kterou řadu GRUB máte nainstalovanou?

Proč GRUB2?

GRUB2 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.

bitcoin školení listopad 24

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.

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.