Vyhledávání na webu

LFCS: Jak konfigurovat a řešit problémy s Grand Unified Bootloader (GRUB) – Část 13


Vzhledem k nedávným změnám v cílech certifikačních zkoušek LFCS účinných od 2. února 2016 přidáváme potřebná témata do zde publikované série LFCS. Chcete-li se připravit na tuto zkoušku, důrazně vám doporučujeme sledovat také sérii LFCE.

V tomto článku vám představíme GRUB a vysvětlíme, proč je zavaděč nezbytný a jak dodává systému všestrannost.

Proces spouštění Linuxu od okamžiku, kdy stisknete tlačítko napájení vašeho počítače, dokud nezískáte plně funkční systém, probíhá takto:

  1. 1. Proces známý jako POST (Power-On Self Test) provádí celkovou kontrolu hardwarových součástí vašeho počítače.
  2. 2. Po dokončení POST předá řízení zavaděči, který zase načte linuxové jádro do paměti (spolu s initramfs ) a provede jej. Nejpoužívanějším zavaděčem v Linuxu je GRand Unified Boot loader nebo zkráceně GRUB.
  3. 3. Jádro zkontroluje a přistoupí k hardwaru a poté spustí počáteční proces (většinou známý pod svým obecným názvem „init “), který zase dokončí spouštění systému spuštěním služby.

V 7. části této série („SysVinit, Upstart a Systemd“) jsme představili systémy a nástroje pro správu služeb, které používají moderní distribuce Linuxu. Než budete pokračovat dále, můžete si tento článek přečíst.

Představujeme GRUB Boot Loader

V moderních systémech lze nalézt dvě hlavní verze GRUB (v1 někdy nazývané GRUB Legacy a v2), ačkoli většina distribuce ve svých nejnovějších verzích standardně používají v2. Pouze Red Hat Enterprise Linux 6 a jeho deriváty dnes stále používají v1.

Proto se v této příručce zaměříme především na funkce v2.

Bez ohledu na verzi GRUB zavaděč umožňuje uživateli:

  1. 1). upravit způsob, jakým se systém chová, zadáním různých jader, která se mají použít,
  2. 2). vyberte si mezi alternativními operačními systémy pro spuštění a
  3. 3). přidávejte nebo upravujte konfigurační stanzy, abyste mimo jiné změnili volby spouštění.

Dnes je GRUB spravován projektem GNU a je dobře zdokumentován na jejich webových stránkách. Při procházení této příručky vám doporučujeme používat oficiální dokumentaci GNU.

Po spuštění systému se vám v hlavní konzoli zobrazí následující obrazovka GRUB. Zpočátku budete vyzváni k výběru mezi alternativními jádry (ve výchozím nastavení se systém spustí s nejnovějším jádrem) a budete moci zadat příkazový řádek GRUB (s c) nebo upravte možnosti spouštění (stisknutím klávesy e).

Jedním z důvodů, proč byste měli zvážit zavedení se starším jádrem, je hardwarové zařízení, které dříve fungovalo správně a po upgradu začalo „provádět činnost“ (viz tento odkaz v AskUbuntu fórech pro příklad).

Konfigurace GRUB v2 se čte při spouštění z /boot/grub/grub.cfg nebo /boot/grub2/grub.cfg, zatímco /boot/grub/grub.conf nebo /boot/grub/menu.lst se používají ve verzi v1. Tyto soubory NESMÍ být upravovány ručně, ale jsou upraveny na základě obsahu /etc/default/grub a souborů nalezených v /etc/grub.d.

V CentOS 7 je zde konfigurační soubor, který se vytvoří při první instalaci systému:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

Kromě online dokumentace můžete také najít příručku GNU GRUB pomocí následujících informací:

info grub

Pokud vás zajímají konkrétně možnosti dostupné pro /etc/default/grub, můžete přímo vyvolat sekci konfigurace:

info -f grub -n 'Simple configuration'

Pomocí výše uvedeného příkazu zjistíte, že GRUB_TIMEOUT nastavuje čas mezi okamžikem, kdy se objeví úvodní obrazovka, a zahájením automatického bootování systému, pokud jej uživatel nepřeruší. Když je tato proměnná nastavena na -1, zavádění se nespustí, dokud uživatel neprovede výběr.

Když je na stejném počítači nainstalováno více operačních systémů nebo jader, GRUB_DEFAULT vyžaduje celočíselnou hodnotu, která udává, který operační systém nebo položka jádra na úvodní obrazovce GRUB by měla být vybrána pro zavádění ve výchozím nastavení. Seznam položek lze zobrazit nejen na úvodní obrazovce zobrazené výše, ale také pomocí následujícího příkazu:

V CentOS a openSUSE:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

V Ubuntu:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

V příkladu zobrazeném na obrázku níže, pokud chceme zavést verzi jádra 3.10.0-123.el7.x86_64 (4. položka), musíme nastavit GRUB_DEFAULT3 (položky jsou interně očíslovány začínající nulou) takto:

GRUB_DEFAULT=3

Jedna poslední konfigurační proměnná GRUB, která je zvláště zajímavá, je GRUB_CMDLINE_LINUX, která se používá k předávání voleb jádru. Volby, které mohou být předány jádru přes GRUB, jsou dobře zdokumentovány v souboru Kernel Parameters a v man 7 bootparam.

Aktuální možnosti na mém serveru CentOS 7 jsou:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

Proč byste chtěli upravit výchozí parametry jádra nebo předat další možnosti? Jednoduše řečeno, mohou nastat chvíle, kdy budete muset jádru sdělit určité hardwarové parametry, které nemusí být schopno určit samo, nebo přepsat hodnoty, které by detekovalo.

Stalo se mi to nedávno, když jsem na svém 10 let starém notebooku vyzkoušel Vector Linux, derivát Slackware. Po instalaci nezjistil správná nastavení pro mou grafickou kartu, takže jsem musel upravit možnosti jádra procházející přes GRUB, aby to fungovalo.

Dalším příkladem je situace, kdy potřebujete převést systém do režimu pro jednoho uživatele, abyste mohli provádět úlohy údržby. Můžete to udělat přidáním slova single do GRUB_CMDLINE_LINUX a restartováním:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

Po úpravě /etc/defalt/grub budete muset spustit update-grub (Ubuntu) nebo grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS a openSUSE) poté aktualizujte grub.cfg (jinak budou změny ztraceny při spuštění).

Tento příkaz zpracuje konfigurační soubory spouštění uvedené výše a aktualizuje grub.cfg. Tato metoda zajišťuje, že změny jsou trvalé, zatímco možnosti předané přes GRUB při spouštění budou trvat pouze během aktuální relace.

Oprava problémů s Linuxem GRUB

Pokud nainstalujete druhý operační systém nebo pokud se váš konfigurační soubor GRUB poškodí kvůli lidské chybě, existují způsoby, jak můžete svůj systém postavit zpět na nohy a znovu jej zavést.

Na úvodní obrazovce stiskněte c, abyste získali příkazový řádek GRUB (nezapomeňte, že můžete také stisknout e pro úpravu výchozích možností spouštění) a pomocí nápovědy zobrazíte dostupné příkazy v řádku GRUB:

Zaměříme se na ls, který vypíše nainstalovaná zařízení a souborové systémy, a prozkoumáme, co najde. Na obrázku níže vidíme, že existují 4 pevné disky (hd0hd3).

Zdá se, že byl rozdělen pouze hd0 (jak dokládají msdos1 a msdos2, kde 1 a 2 jsou čísla oddílů a msdos je schéma rozdělení).

Podívejme se nyní na první oddíl na hd0 (msdos1), abychom zjistili, zda tam najdeme GRUB. Tento přístup nám umožní zavést Linux a tam použít další nástroje na vysoké úrovni k opravě konfiguračního souboru nebo úplné přeinstalaci GRUB, pokud je to potřeba:

ls (hd0,msdos1)/

Jak můžeme vidět ve zvýrazněné oblasti, našli jsme v tomto oddílu adresář grub2:

Jakmile jsme si jisti, že GRUB sídlí v (hd0,msdos1), řekněme GRUBU, kde má najít svůj konfigurační soubor, a poté mu dejte pokyn, aby se pokusil spustit jeho nabídku:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Poté v nabídce GRUB vyberte položku a stisknutím klávesy Enter ji spusťte. Jakmile se systém nabootuje, můžete zadat příkaz grub2-install /dev/sdX (změňte sdX na zařízení, na které chcete GRUB nainstalovat). Zaváděcí informace budou poté aktualizovány a všechny související soubory budou obnoveny.

grub2-install /dev/sdX

Další složitější scénáře jsou zdokumentovány spolu s jejich navrhovanými opravami v průvodci řešením problémů Ubuntu GRUB2. Zde vysvětlené pojmy platí i pro jiné distribuce.

souhrn

V tomto článku jsme vám představili GRUB, uvedli, kde můžete najít dokumentaci online i offline, a vysvětlili, jak přistupovat ke scénáři, kdy se systém přestal správně spouštět kvůli problému souvisejícím s bootloaderem.

Naštěstí je GRUB jedním z nejlépe zdokumentovaných nástrojů a nápovědu můžete snadno najít buď v nainstalovaných dokumentech, nebo online pomocí zdrojů, které jsme sdíleli v tomto článku.

Máte dotazy nebo připomínky? Neváhejte a dejte nám vědět pomocí formuláře pro komentáře níže. Těšíme se na setkání s Vámi!