GRUB (rescue mode)
Do rescue mode (záchranného režimu) se GRUB2 dostane tehdy, když z nějakého důvodu nemůže pokračovat v činnosti. To se může stát z následujících příčin:
- Při instalaci GRUB2 byl chybně nastaven prefix nebo kořen ( "root" )
- V datovém bloku pro "first stage" chybí modul, potřebný ke zpřístupnění adresáře s dalšími moduly, nutnými pro zavedení systému
- Chybí obsah souboru grub.cfg
Základní příkazy
GRUB2 v záchranném režimu ( mode rescue ) má dostupnou pouze základní sadu příkazů, přesto s jejich pomocí můžete nejenom nalézt odpověď na otázku proč se váš systém nespouští, ale i případnou chybu provizorně opravit a systém spustit.
- set
- je-li spuštěn bez parametrů, vypíše seznam aktuálně nastavených proměnných. Jeho prostřednictvím lze také hodnoty proměnných přenastavit
- ls
- Tento příkaz je zjednodušená varianta příkazu, který je jinak součástí modulu
ls
, provádí vylistování lokálních disků a jejich obsahu, za předpokladu, že jsou natažené moduly, které to umožňují - insmod
- umožňuje natáhnout další moduly. Příkaz rmmod který umožňuje naopak jejich odebírání je stejně jako příkaz lsmod součástí modulu
minicmd
. Tzn. že v rescue mode nemusí být dostupný!
Tuto základní paletu příkazů lze rozšířit pomocí dalších modulů přidaných do do prvního stupně zavaděče (first stage).
Krok první - kontrola proměnných
Chybné nastavení proměnných prefix a root při instalaci GRUB2 je nejčastějším zdrojem problémů při zavádění systému!
grub rescue> set
prefix=(hd96)/boot/grub/i386-pc
root=hd96
|
prefix
Pro GRUB2 je nejdůležitější nastavení proměnné prefix. Prefix obsahuje cestu do adresáře s dalšími moduly, bez kterých může být zavedení systému nemožné.
Není-li hodnota proměnné prefix nastavena správně, tak sice lze moduly zavést, ale při jejich natahování je nutné uvést plnou cestu - tj. včetně blokového zařízení a přípony.
Je-li prefix v pořádku, stačí příkazu insmod předat pouze název modulu bez přípony.
Nastavení prefixu pro first stage se provádí při sestavování core.img , který je její součástí. Viz kapitola o instalaci GRUB2 na fyzické zařízení.
|
root
Druhá proměnná root obsahuje adresu zařízení, které má GRUB2 považovat za výchozí. Není-li tato proměnná nastavena správně, lze sice systém zavést, ale při zavádění musí být před cestou k jádru a ramdisku uvedena i adresa zařízení, včetně příslušného diskového oddílu.
Krok druhý - kontrola dostupných zařízení
Když spustíte příkaz ls bez parametru, uvidíte obvykle podobný výpis, jako je ten na níže uvedeném příkladu...
grub rescue> ls
(hd0) (hd1)
|
error: unknown filesystem
GRUB2 v současné době (verze 1.99~rc3) má k dispozici jak moduly pro většinu běžně používaných souborových systémů, tak i moduly pro různé typy tabulek rozdělení diskových oddílů, i vyšší logické vrstvy (SW RAID, LVM). Jenže prostor pro first stage je většinou omezený a tím pádem tato část zavaděče obsahuje pouze nezbytně nutné moduly.
Tato chybová hláška signalizuje, že zařízení u kterého se pokoušíme o výpis..
- buď žádný souborový systém neobsahuje
- nebo pro jeho souborový systém chybí příslušný modul
- nebo je zařízení jenom nižší vrstvou pro RAID pole, či LVM skupinu
grub rescue> ls (hd2)
error: unknown filesystem
|
U blokových zařízení, které jsou součástí RAID pole, nebo LVM skupiny, záleží také na pořadí v jakém jsou zaváděny moduly pro jednotlivé abstraktní vrstvy.
V případě, že je operační systém nainstalován nad RAID polem, musí být nejdřív natažen modul pro příslušný typ RAID pole a teprve až GRUB2 pole rozpozná, může být zaveden modul pro další vrstvu.
error: bad filename
Je vcelku banální chybová hláška, která se objeví tehdy, pokud cílem příkazu ls není známé fyzické blokové zařízení, nebo adresář.
grub rescue> ls (system-boot)
error: bad filename
|
Obvykle stačí za identifikací zařízení uvést cestu..
grub rescue> ls (system-boot)/
./ ../ lost+found/ grub/
|
error: not a regular file
grub rescue> cat (hd0,msdos1)/grub
error: not a regular file
|
Krok třetí - nastavení prefixu a zavedení modulu
Při bootování z first stage která má sice k dispozici všechny potřebné moduly, ale špatně nastavený prefix (viz upozornění výše), je třeba..
- nejdříve opravit prefix
- pak přenastavit root
- překontrolovat nastavení
- a po natažením modulu
normal
zkusit spustit normální menu
Pokud se normální režim zavést nepodaří, je zřejmě nějaká chyba ve výchozím menu a nezbývá než se pokusit zavést systém ručně.
Krok čtvrtý - zavedení systému
Zavedení linuxového systému
grub rescue> insmod linux
grub rescue> linux /vmlinuz-xxxx root=/dev/sda1 ro single
grub rescue> initrd /initrd.img-xxxx
grub rescue> boot
|
Zavedení MS Windows
Součástí diskového oddílu formátovaného na NTFS, kde je nainstalován operační systém MS Windows, je také informace na kterém sektoru disku. Ta je umístěna na offsetu 0x1c, ale hodnota v hexa kódu je zapsaná na přeskáčku podle následujícího schématu:
"0xABCDEFGH => GH EF CD AB"
U starších MS-DOS tabulek začínal první oddíl obvykle na 63 sektoru (viz předchozí stránka ) to bude hexa hodnota..
spike:~# printf "%x" 63
3f
Která po příslušném zpřeházení bude vypadat takto:
"0x00 00 00 3f" => "3f 00 00 00"
Novější MS-DOS tabulky však mají začátek prvního diskového oddílu posunutý až na sektor 2048 ( hodnota 0x800 ), takže po případném přestěhování diskového oddílu ze staršího disku je třeba provést manuální editaci a původní hodnotu změnit na..
"0x00 00 08 00" => "00 08 00 00"
V případě, že bychom systém s MS Windows přesunuli až na další diskový oddíl, který by začínal třeba na sektoru 40965750 ( hodnota 0x2711676 ), tak by byla hodnota zase jiná:
"0x02 71 16 76" => "76 16 71 02"
Editaci lze provést buď pomocí editoru hexcurse, ve kterém po otevření příslušného diskového oddílu (dejme tomu /dev/sda1
) nejprve skočíme na
pozici 0x1c, pak přepíšeme původní řetězcovou hodnotu na novou a změny zapíšeme.
Nebo zapsáním příslušné hodnoty na odpovídající místo disku pomocí utility dd
Další proměnné
Při práci s GRUB2 se vám může hodit znalost dalších proměnných, které ovlivňují chování shellu:
- pager
- Nastavuje stránkování výpisu. Je-li nastaveno bez konkrétní hodnoty, posouvá se výpis vždy o celou obrazovku. Jinak v závislosti na nastavené hodnotě. Hodí se to obzvlášť při použití příkazů help, ls, lsmod, cat, aj.
- menu_color_normal
- nastavuje barvy pro menu. Týká se to například i příkazové řádky GRUB2 shellu
- menu_color_highlight
- nastavuje barvy pro vysvícené položky
- gfxmode
- nastavení rozlišení pro zavedení modulu
gfxterm
- default
- určuje pořadí výchozí bootovací položky v menu grub.cfg
- lang=cs_CZ
- nastavení pro locales
- locale_dir
- nastavení adresáře s lokalizačními soubory. Obvykle to je podadresář
locale
, umístěný v prefixu. Nastavení cesty musí být plné, tj. včetně identifikace blokového zařízení.