Zavaděč systému GNU GRUB v.2
Zavaděč GNU GRUB ve verzi 2 už začíná být v našich systémech usazený a tak není na škodu se zajímat o to, jak vlastně tato verze zavaděče funguje. Zatlačíme slzu nad starým dobrým jedničkovým grubem (někomu se zatlačuje opravdu těžko) a jeho menu.lst a podíváme se jak je to nyní. Budu se snažit stručně vysvětlit zavádění systému v Sabayon Linuxu i když samozřejmě v jiných systémech budou principy podobné.
Principy fungování zavaděče *
Dá se říci, že GRUB 2 má tři hlavní části:
- /etc/default/grub – soubor který obsahuje nastavení, edituje se ručně
- /etc/grub.d/ – adresář se skripty generující menu, některé se mohou editovat a nebo přidávat zcela nové
- /boot/grub/grub.cfg – generovaný konfigurační soubor, needituje se ručně
Tyto části postupně dále popíši trochu podrobněji a tím bude vlastně tvořena kostra článku.
/boot/grub/grub.cfg aneb jak pracuje GRUB 2 *
Vezmu to odzadu a začnu třetím bodem. Nejdříve si ale řekněme, jak vlastně zavaděč pracuje. Princip fungování zavaděče by se dal zjednodušeně shrnout do jedné věty. GRUB 2 obsahuje hlavní skript grub2-mkconfig, který generuje menu do souboru /boot/grub/grub.cfg pomocí parametrů z konfiguračního souboru /etc/default/grub a sady skriptů umístěných v /etc/grub.d/. Toť vše. Jednoduché ne? Nikdy nic není tak jednoduché jak se řekne … ale v tomto případě opravdu proces složitější není.
Chceme-li vygenerovat menu z připravených souborů, stačí spustit výše uvedený skript jako root …
# grub2-mkconfig -o /boot/grub/grub.cfg
… ten zpracuje všechny vstupy do jediného výstupního souboru. Že to má být do souboru, mu říkáme parametrem “-o” s cestou k výstupnímu souboru. Pokud se spustí pouze příkaz samotný bez parametrů …
# grub2-mkconfig
… vygeneruje se se stejný obsah ale pouze na standardní výstup, tedy na obrazovku. To se hodí v případech, kdy se chcete nejdříve podívat co se vlastně bude generovat do výstupního souboru. Třeba při ladění menu, než výsledek finálně uložíte. Sice by se v tom výstupu prasevyznalo, ale požadované informace se tam najít dají.
Zkrácený příklad generovaného výstupu vypadá nějak takto:
Generating grub.cfg ... # # DO NOT EDIT THIS FILE # # It is automatically generated by grub2-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub #### BEGIN /etc/grub.d/00_fonts ### ### END /etc/grub.d/00_fonts ###### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then load_env fi set default="0"if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" ....................
Konfigurace parametrů v /etc/default/grub *
Soubor obsahuje několik již přednastavených voleb, další se pak dají doplnit. Toto jsou některé z nich.
- GRUB_DEFAULT=saved – pokud je GRUB_SAVEDEFAULT nastaveno na true, při příštím startu se automaticky vybere stejná položka jako při minulém
- GRUB_DEFAULT=0 – jaká položka z menu bude provádět při startu, “0” je první, “1” druhá … atd.
- GRUB_TIMEOUT =3 – jak dlouho bude grub čekat na uživatelský vstup, než se spustí autoboot na DEFAULT položku (-1 pro trvalé čekání na výběr, 0 pro okamžitý start bez čekání)
- #GRUB_TERMINAL=console – pokud povolíte, grub se spustí v textové konzoli namísto grafického terminálu s definovanými fonty a splash pozadím
- GRUB_GFXMODE=1024×768 – rozlišení grafického terminálu, může zde být nejspíš jiná hodnota, uložená při instalačním procesu. Pokud není položka definována, bude použita hodnota “auto” a grub vybere sám vhodnou hodnotu z preferovaných rozlišení.
- GRUB_CMDLINE_LINUX=”” – parametry přidávané jako argument na konec každého (včetně recovery) jádra
- GRUB_CMDLINE_LINUX_DEFAULT=”” – parametry přidávané jako argument na konec jádra standardních “ne-recovery” řádek, které jsou generované v případě že GRUB_DISABLE_RECOVERY je nastaveno na “true”.
- GRUB_BACKGROUND=”/boot/grub/default-splash.png”– pozadí zavaděče v grafické konzoli, mohou být použity soubory obrázků .png, .tga, .jpg, nebo .jpeg a obrázek bude roztáhnut přes obrazovku podle použitého rozlišení
- #GRUB_THEME=”/boot/grub2/themes/starfield/theme.txt” povolte a upravte cestu k tématu, pokud si chcete nastavit jiné téma. Pozor, zde nám pan ředitel v konfiguračním souboru udělal chybu a tak pokud budete experimentovat vynechte z cesty dvojku
- GRUB_DISABLE_OS_PROBER=”true” – tato položka v souboru není, nastavte jí v případě že nechcete generovat do menu grubu ostatní operační systémy
Soubor obsahuje více položek, ale buď jsou pro základní funkce zavaděče nedůležité, a nebo se o nich nepíše ani v manuálu, jako například definování barev menu.
Spouštěcí skripty v /etc/grub.d/ *
Tento adresář obsahuje sadu spouštěcích skriptů, číslovaných podle priority spouštění. Sabayon 13.08 má ve výchozím stavu v tomto adresáři před-vytvořeny tyto skripty:
- 00_fonts – pro fonty generující se skriptem grub2-mkfont
- 00_header – příprava prostředí mimo jiné pomocí parametrů ze souboru /etc/default/grub a získávání uložených stavů ze značkovacího kilobajtového souboru, zvaného enviroment block /boot/grub/grubenv
- 10_linux – skript pro generování řádků s linuxovými jádry
- 20_linux_xen – pro položky určené na Xen virtualizaci
- 30_os-prober – část generující položky s ostatními operačními systémy
- 40_custom – uživatelská část
- 41_custom – alternativa k předchozí možnosti, přidání položek přímo pomocí vytvořeného souboru /boot/grub/custom.cfg
Z našeho pohledu může být zajímavý soubor 40_custom, který je podle dokumentace určen k přidávání vlastních položek do menu. Samozřejmě je možné přidat i zcela nový spustitelný soubor/skript, například s názvem 50_moje-polozky-v-menu, jenž bude správně v pořadí zpracován. Rezervovány jsou podle manuálu pouze 00_* pro 00_header, 10_* pro nativní bootovací položky a 20_* pro aplikace třetích stran (např. memtest86+).
Úprava parametrů jádra *
Tak, nyní už máme informací poměrně dost a tak můžeme zkusit praktický pokus s odstraněním zjednodušeného grafické rozhraní při startování systému, které se zobrazuje místo řádkového výpisu. Tyto grafiky lze samozřejmě dočasně překonat klávesou F2, ale osobně spíše chci trvale vidět co přesně systém v danou chvíli děje.
Někteří z vás tuší, že pro vypnutí obrázku bude nutné vynechat parametr splash v proměnné GRUB_CMDLINE_LINUX v souboru /etc/default/grub. Ale copak? Že je proměnná GRUB_CMDLINE_LINUX prázdná? Ano 🙂 a teď najít odkud že se nám to ty parametry berou že 😀 Docela jsem se s hledáním potrápil. Dokolečka přes všechny spouštěcí skripty, abych pak nakonec došel opět k souboru kde jsem začínal, a našel na konci jednu nenápadnou podmínku, která přinesla do hledání světlo. Na závěru našeho konfiguračního souboru/etc/default/grub je umístěna podmínka, která přidává další parametry do proměnné GRUB_CMDLINE_LINUX
if [ -f "/etc/default/sabayon-grub" ]; then # this file is placed by the Sabayon Installer and contains # custom GRUB_CMDLINE_LINUX parameters created at install # time. . /etc/default/sabayon-grub fi
Zde je vidno, že se jedná o soubor /etc/default/sabayon-grub, který obsahuje hodnoty podobné těmto
# this file has been added by the Anaconda Installer # containing default installer bootloader arguments. # DO NOT EDIT NOR REMOVE THIS FILE DIRECTLY !!! GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} splash vga=791 quiet dokeymap keymap=cz domdadm resume=swap:UUID=20dd5fda-eca6-40d8-8ad9-980ea4635632 real_resume=UUID=20dd5fda-eca6-40d8-8ad9-980ea4635632 dolvm root=UUID=be06e4bf-9d40-4220-8bc7-17bc6f03dacd docrypt"
Je hezké, že jsme varováni, nicméně není jiné cesty, než právě tento soubor upravit. Pro zakázání splash obrazovky odstraňte vyznačený parametr splash, a v případě že vám vadí ještě stručnost výpisu na obrazovku, vyjměte i parametr quiet. Uložit provedené změny a znovu vygenerovat menu zavaděče …
# grub2-mkconfig -o /boot/grub/grub.cfg
… a restartovat. Ještě jedna poznámka. Pokud budete chtít nějaké parametry jádra přidávat a ne jako v tomto případě ubírat, použijte standardní postup, tedy editaci proměnné GRUB_CMDLINE_LINUX v souboru /etc/default/grub.
Problémy se startem GRUB 2 *
Pokud se zavaděč poškodí tak že se nespustí, nebo ho přepíše nějaký operační systém, který si myslí že je na světě sám, je potřeba zavaděč, nemáte-li jeho zálohu, znovu nainstalovat. Pokud máte po ruce nějaké instalační CD/DVD Sabayonu (nebo jiné linuxové distribuce s grubem2) nabootujte na něj a spusťte terminál jako root. Dále uvedu příklad pro instalaci GRUBu 2 do MBR na disk sda. Při skutečné situaci berte toto jen jako vodítko a doplňte správný disk dle vlastního systému.
Nejdříve je dobré si udělat přehled o rozdělení disků (například):
# fdisk -l
/dev/sda1 xxx Linux
/dev/sda2 xxx Linux swap
/dev/sda3 xxx Linux
x-ka jsou sloupce pro nás nyní s nezajímavými informacemi. V tomto případě budu instalovat grub na sda. Nejdříve je potřeba vytvořit svůj přípojný bod
# mkdir /mnt/disk-sabayon
pak připojit disk kde je systém, neboli root (nebo též “/“) do tohoto bodu
# mount /dev/sda1 /mnt/disk-sabayon
po připojení zkontrolovat, že se jedná správný disk a obsahuje “/boot” adresář (v případě že je /boot na samostatné partition, tak ho stejným způsobem připojit do /mnt/disk-sabayon/boot)
# ls /mnt/disk-sabayon
pak nainstalovat Grub2 do MBR na sda
# grub2-install --root-directory=/mnt/disk-sabayon /dev/sda
odmontovat připojený disk
# umount /mnt/disk-sabayon
… a restart systému.
Samozřejmě není nutné instalovat zavaděč do MBR (i když to je obvyklé). Je také možné zavaděč instalovat přímo na partition se systémem a využívat alternativní zavaděče z jiných OS. Záleží na konfiguraci kterou používáte na svém konkrétním systému.
Texty se vztahují k verzi sys-boot/grub-2.00-r4.
Luděk
Prosinec 11th, 2013 on 21:11
No to je paráda! Tak tento článek si dám do záložek v prohlížeči.
Děkuji mnohokrát!