GRUB2

Grub2 je program odpovídající za načtení/zavedení systému. Je odkazován přímo z MBR (Master Boot Record - zaváděcí stopy) a zajišťuje předání kontroly mezi BIOSem (de facto firmware základní desky, úplně nejnižší softwarová vrstva) a operačním systémem (OS, jako je kupříkladu Linux, Unix či Windows). Název je akronymem GRand Unified Bootloader, version 2 (Grub 2), druhé verze GNU GRUB.

Nastavení Grub2

Základní nastavení Grubu je možno provést pomocí Správce spouštění - není potřeba ručně upravovat konfigurační soubory.

Hlavní konfigurační soubor GRUBu 2 je grub.cfg v adresáři /boot/grub. Tento soubor je nastaven pomocí mnoha skriptů spuštěných příkazem update-grub. Primárně za nastavení grub.cfg jsou zodpovědné soubory /etc/default/grub a jednotlivé skripty ve složce /etc/grub.d/

grub (/etc/default/grub)

Tento soubor obsahuje nastavení týkající se především toho, jak se zobrazí Grub2 nabídka (jako například čas nabídky, její barvy či pozadí). Tento soubor může být měněn jen s root právy (právy administrátora). Aby se změna zapsala do souboru grub.cfg a tak se stala aktivní, je po úpravě a uložení souboru /etc/default/grub třeba spustit příkaz update-grub.

~-

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"

-~

  • GRUB_DEFAULT=0
    • Nastavuje předem vybranou položku nabídky (pořadí shora dolů: 0 pro první, 1 pro druhou… Položku vybranou při posledním startu nastavíte pomocí hodnoty GRUB_DEFAULT=saved a ukládání povolíte pomocí GRUB_SAVEDEFAULT=true).
  • GRUB_TIMEOUT=5
    • Nastavuje čas v sekundách před tím, než se automaticky načte hodnota dle GRUB_DEFAULT
    • Nastavením hodnoty -1 dosáhnete trvalého čekání na výběr uživatele (bez timeoutu).
  • GRUB_HIDDEN_TIMEOUT=0
    • Nabídka při startu bude skryta. Zobrazí se nabídka OS, pokud tuto funkci vypnete: na začátek řádky vložte znak #. ( # GRUB_HIDDEN_TIMEOUT=0 )
    • Výchozí hodnota závisí na přítomnosti dalších operačních systémů
      • jiný OS nenalezen: Nabídka bude zobrazena. ( Řádka bude začínat symbolem #.)
      • Jiný OS nalezen: Nabídka bude skryta.
    • Pro čísla větší 0 bude systém čekat příslušný počet sekund, ale nezobrazí nabídku.
    • 0 - nabídka nebude zobrazena (ani nebude žádné zdržení).
      • Když je tento vstup nastaven na 0:
        • Uživatel může vynutit zobrazení menu držením klávesy SHIFT při startu počítače.
          • Během startu systém kontroluje stav klávesy SHIFT, pokud nemůže zjistit její stav, je uživateli dána chvilka pro zapnutí nabídky pomocí klávesy ESC.
        • Pokud je zapnuto, úvodní obrazovka (splash screen) určená pomocí 05_debian_theme bude zobrazena i v případě nastavení skrytí nabídky.
  • GRUB_HIDDEN_MENU_QUIET=true
    • true - nebude zobrazeno odpočítávání. Obrazovka bude prázdná.
    • false - počítadlo bude zobrazovat prázdnou obrazovku po dobu nastavenou v GRUB_HIDDEN_TIMEOUT.
  • GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
    • určuje označení pro jednotlivé vstupy. (Ubuntu, Xubuntu, Debian, atd.)
  • GRUB_CMDLINE_LINUX
    • Pokud existuje, pak tato řádka vkládá zápis na konec linux řádky(v Grub Legacy příkaz „kernel“) jak pro normální, tak i pro „recovery“ mód. Podobně jako „kopt“ řádka v menu.lst.
  • GRUB_CMDLINE_LINUX_DEFAULT=„quiet splash“
    • Tato řádka importuje vstup na konec 'linux' řádky. Zde zapsané se přidává jen na konec normálního módu (nikoliv „recovery“) podobně jako „defoptions“ řádka v menu.lst. Pokud chcete černou obrazovku se skrolujícími se hláškami o průběhu bootování, odstraňte „quiet splash“. Pokud chcete grub obrazovku s omezenými informacemi zobrazenými pod logem Ubuntu, použijte jen „splash“.
  • #GRUB_TERMINAL=console
    • Odkomentováním se vypne grafický terminál (grub-pc jen).
  • GRUB_GFXMODE=640×480
    • Odkomentováním (uberte '#' z počátku řádky) se upraví rozlišení celého boot menu. Pro klasické obrazovky (4:3 poměr stran) použijte např.:
      • GRUB_GFXMODE=640×480 (výchozí hodnota, pokud systém nenalezne odkomentovanou žádnou hodnotu zde, použije právě tuto )
      • GRUB_GFXMODE=800×600
      • GRUB_GFXMODE=1024×768
      • GRUB_GFXMODE=1600×1200
  • hodnoty rozlišení najdete třebazde nebo nastavte vlastní méně běžné rozlišení (jako je například můj širokoúhlý notebook s poměrem stran 16:10)
    • GRUB_GFXMODE=640×400
    • GRUB_GFXMODE=800×500
    • GRUB_GFXMODE=1024×640
    • GRUB_GFXMODE=1280×800
    • GRUB_GFXMODE=1680×1050
  • #GRUB_DISABLE_LINUX_UUID=true
    • odkomentujte, pokud nechcete opominout „root=UUID=xxx“ parametr Linuxu.
  • GRUB_DISABLE_LINUX_RECOVERY=true
    • přidejte nebo odkomentuje tento řádek pro nezobrazení módu jádra „Recovery“ v úvodním menu.
  • GRUB_DISABLE_OS_PROBER=true
    • Zapíná/vypíná test/prohledávání ostatních diskových oddílů na přítomnost dalších operačních systémů (Windows, Linux, OSX, Hurd…).

Obnovení GRUB2 pomocí LiveCD

  • stáhněte a spusťte LiveCD Ubuntu
  • otevřete Terminál (např. Alt+F2, zadejte gnome-terminal)
  • dále zjistěte výpis všech oddílů disku
sudo fdisk -l

výpis bude vypadat třeba takto

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3199    25695936    7  HPFS/NTFS
/dev/sda3            3836        9729    47343524+   5  Extended
/dev/sda5            3836        5751    15390238+  83  Linux
/dev/sda6            9596        9729     1076323+  82  Linux swap / Solaris

* nyní potřebujete vědět, které zařízení (a který diskový oddíl) obsahuje váš nainstalovaný linuxový systém, v našem příkladě to je /dev/sda5.

:!: Ujistěte se, že je určení bez chyb - věnujte prosím pozornost výpisu FDISKu

  • A jaký je na něm použit souborový systém.
sudo blkid

Ukázka výpisu.

/dev/sda1: UUID="666cd724-8d60-4a1d-b39d-71f195c821c3" TYPE="ext4"
  • připojte Ubuntu oddíl na /mnt
sudo mount -t ext4 /dev/sda5 /mnt

* nainstalujte Grub do MBR disku

sudo grub-install --root-directory=/mnt /dev/sda

Tímto se vám přemaže MBR disku /dev/sda!

Buďte velmi opatrní a radši si předtím udělejte zálohu MBR. Také dávejte pozor, aby bylo určení disku (není to oddíl!) bez označení číslem, tedy /dev/sda, NE třeba /dev/sda1.

  • restartujte počítač. Po přihlášení do systému aktualizujte Grub pomocí
sudo update-grub
  • pokud došlo k problémům, zkuste obnovu znova, anebo dejte dotaz do fóra s informacemi z boot_info_script.

Zdroj: http://forum.ubuntu.cz/index.php/topic,42267.0.html

Alternativní postup

  • stáhněte a vypalte cd s tímto obsahem: Ubuntu LiveCD a nabootujte/načtete z něj systém.
  • Otevřete Terminál (Alt+F2, zadejte gnome-terminal)
  • a dále zadejte: $ sudo fdisk -l
  • nyní potřebujete vědět, které zařízení (a který diskový oddíl) obsahuje váš nainstalovaný linuxový systém, například bude použit /dev/sda1 . Nyní tedy potřebujete připojit (mount) souborový systém (pravděpodobně typu Ext4 či Ext3 v případě Ubuntu, NTFS či FAT v případě Windows) do složky /mnt: $ sudo mount -t ext4 /dev/sda1 /mnt
  • pokud máte náhodou složku /boot na zvláštním oddílu, musíte připojit i tento. Příklad: pro /dev/sda2 napište: $ sudo mount -t ext4 /dev/sda2 /mnt/boot

:!: Ujistěte se, že je určení bez chyb - věnujte prosím pozornost výpisu FDISKu

  • Vytvořte adresář pro následující příkaz: sudo mkdir /mnt/dev
  • Nyní připojte zbytek oddílů: sudo mount --bind /dev /mnt/dev
  • nyní proveďte chroot do vašeho (původního) systému: sudo chroot /mnt

Nyní byste měli být přihlášeni do vašeho trvalého linuxu pomocí příkazu chroot (administrátorská práva bez potřeby používat sudo)

  • nastavte soubor /etc/default/grub dle vašeho systému

$ nano /etc/default/grub

  • poté je třeba spustit update-grub pro vytvoření konfig. souboru.

$ update-grub

  • pro nainstalování GRUBu 2 do MBR (MasterBootRecord - hlavní/první spouštěcí stopa), zadejte grub-install /dev/sda (pokud máte bězné nastavení i hardware, grub se nahraje na první pevný disk

$ grub-install /dev/sda

  • pokud dojde k chybám, zkuste grub-install –recheck /dev/sda

$ grub-install --recheck /dev/sda

  • nyní můžete restartovat počítač přímo do zavaděče GRUB 2 a dále k vaší normální instalaci.

Pokud máte netradiční operační systémy (alternate OS entries), příkaz update-grub vás může oblažit hláškou „Cannot find list of partitions!“ (Nemohu nalézt seznam oddílů). Ignorujte ji a pokračujte - jak jednou nabootujete do vaší řádné linuxové instalaci, použijte pomocí Terminálu opět příkaz sudo update-grub a sudo grub-install /dev/sda.

GRUB 2 - snadná editace v grafickém režimu

Velmi pohodlně můžeme upravovat položky grafickým nástrojem nazvaným Grub Customizer. Umožňuje mimo jiné měnit pořadí položek v menu, přejmenovávat položky a samozřejmě také přidávat nebo odebírat položky. Grub Customizer se dá nainstalovat např. takto přes terminál:

 sudo add-apt-repository ppa:danielrichter2007/grub-customizer
 sudo apt-get update
 sudo apt-get install grub-customizer

Po instalaci najdeme Grub Customizer v menu aplikací (System Tools - Grub Customizer).

Po spuštění se objeví okno programu, ve kterém můžeme provádět změny. Poklepáním na položku změníme text. Např. text Ubuntu, with Linux 2.6.35-22-generic snadno změníme třeba na Ubuntu 10.10. Zrušením zaškrtnutí u některé položky tuto položku skryjeme.

Po provedení požadovaných změn jednoduše uložíme nové nastavení kliknutím na Save. Hotovo.

Technické detaily

Grub 2 je kompatibilní se standardem POSIX (Portable Operating System Interface for Unix) jako jsou GNU/Linux, *BSD, Mac OS aj., ale zvládá už i připojit systémy nekompatibilní s tímto standardem.

GRUB 2 je kompletně přepsanou verzí původního GRUBu. Založen na výzkumu projektu PUPA, GRUB2 je mnohem více modulární a přenosnější než jeho předchůdce. Některé z jeho nových vlastností:

  • grafické rozhraní, zahrnutí témat/profilů (theming);
  • načítání po částech;
  • multiplatformní kompatibilita;
  • podpora skriptování;
  • uživatelské úpravy menu;
  • opravené pojmenovávání oddílů.

Mnoho souborů v /boot/grub bude pro uživatele Grub Legacy nových. Zejména množství souborů „*.mod“ v adresáři /boot/grub. Grub 2 je modulární a tak soubory „*.mod“ jsou nezbytné. Bez ohledu na množství souborů celková velikost obsahu /boot/grub zůstává v porovnání s Grub Legacy zhruba zachována a tak není třeba zvětšovat /boot oddíl.

grub.cfg (/boot/grub/grub.cfg)

:!: NEEDITUJTE TENTO SOUBOR Toto je hlavní konfigurační soubor Grub 2. Nahrazuje do jisté míry /boot/grub/menu.lst původního GRUBu. Tento soubor obsahuje jen přímé instrukce pro Grub2 a NENÍ URČEN K PŘÍMÉ EDITACI!!! Ještě jednou: na rozdíl od „původního“ menu.lst, soubor grub.cfg NEEDITUJTE!!! :!:

  • grub.cfg je samočinně vytvářen a obnovován při spustění příkazu sudo update-grub.
  • Skripty pro tvorbu grub.cfg zahrnují soubory obsažené v /etc/grub.d a informace získané ze souboru /etc/default/grub
  • Soubor je složen ze dvou částí. Obě jsou jasně odděleny hlavičkou ### BEGIN. Informace na této řádce odpovídají zápisům v souborech ze složky /etc/grub.d
  • implicitně je tento soubor „jen ke čtení (read-only). To by mělo zabránit jeho ruční editaci.
  • Příklad grub.cfg zahrnující dvě Ubuntu jádra, memtest86+, Windows a vlastní zadání (41_srcd) importované ze skriptů v /etc/grub.d/:

~-

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/update-grub using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=5
set root=(hd0,5)
search --fs-uuid --set b02e1934-12dd-418a
if font /usr/share/grub/ascii.pff ; then
  set gfxmode=640x480
  insmod gfxterm
  insmod vbe
  terminal gfxterm
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_hurd ###
### END /etc/grub.d/10_hurd ###

### BEGIN /etc/grub.d/10_linux ###
set root=(hd0,5)
search --fs-uuid --set b02e1934-12dd-418a-be3a-9ff7d3e7e7ea
menuentry "Ubuntu, linux 2.6.28-13-generic" {
	linux	/boot/vmlinuz-2.6.28-13-generic root=UUID=b02e1934-12dd-418a ro  quiet splash vga800
	initrd	/boot/initrd.img-2.6.28-13-generic
}
menuentry "Ubuntu, linux 2.6.28-13-generic (single-user mode)" {
	linux	/boot/vmlinuz-2.6.28-13-generic root=UUID=b02e1934-12dd-418a ro single
	initrd	/boot/initrd.img-2.6.28-13-generic
}
menuentry "Ubuntu, linux 2.6.28-11-generic" {
	linux	/boot/vmlinuz-2.6.28-11-generic root=UUID=b02e1934-12dd-418a ro  quiet splash vga800
	initrd	/boot/initrd.img-2.6.28-11-generic
}
menuentry "Ubuntu, linux 2.6.28-11-generic (single-user mode)" {
	linux	/boot/vmlinuz-2.6.28-11-generic root=UUID=b02e1934-12dd-418a ro single
	initrd	/boot/initrd.img-2.6.28-11-generic
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
	linux	/boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
	linux	/boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" {
	set root=(hd0,1)
	chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file is an example on how to add custom entries

### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_srcd ###
menuentry "SystemRescue CD on hard drive" {
        set root=(hd0,10)
        linux   /sysrcd/rescuecd subdir=sysrcd setkmap=us
        initrd  /sysrcd/initram.igz
}
### END /etc/grub.d/41_srcd ###

-~

/etc/grub.d/ (složka)

Tyto soubory jsou čteny při vykonávání příkazu update-grub. Tyto skripty udržují a přenášejí informace, které se spolupodílí na vytváření souboru /boot/grub/grub.cfg.

Soubory jsou pro vytváření grub.cfg používány za sebou - nejprve s číslem na počátku (vzestupně) a poté abecedně. V tomto pořádku jsou pak i zapsány příslušné informace do souboru grub.cfg.

Uživatelem zcela přidané hodnoty by měly být umístěny v 40_custom souboru.

Všechny vytvořené soubory musí být (pro jejich zahrnutí do generovaní grub.cfg pomocí příkazu „update-grub“) spustitelné. Provede se příkazem „sudo chmod u+x /etc/grub.d/JmenoSouboru“.

  • 00_header
    • „Nasává informace ze souboru /etc/default/grub - např. grafiku, timeout atp a pokud soubor či jednotlivé údaje chybí či jsou nečitelné, nastaví se implicitní hodnoty. Doporučeno nezasahovat.
  • 05_debian_theme
    • Nastavuje pozadí, barvy textu, témata/profily.
    • pokud si přejete změnit barvy, pak doporučuji vaší pozornosti 8.-9. řádek (první nastavuje normální text, druhý vybraný řádek): ' set menu_color_normal=magenta/black

set menu_color_highlight=cyan/blue '

  • pro změnu pozadí (resp. přidání obrázku) upravte 16.řádek: for i in {/boot/grub,/usr/share/images/desktop-base}/jméno_obrázku.{png,tga} ;
    • buď do složené závorky přidejte absolutní cestu k vašemu obrázku
    • nebo zkopírujte váš obrázek do jednoho z těchto adresářů (sudo cp /home/UzivatelskeJmeno/Obrázky/JmenoVasehoObrazku /usr/share/images/desktop-base
    • :!: soubor musí mít příponu .png či .tga !!
    • pokud použijete menší obrázek, než je aktuální rozlišení, zůstane vpravo a dole černý pruh, pokud použijete větší obrázek , bude oříznut!
    • příklady {/boot/grub,/usr/share/images/desktop-base}/P1030084-macko_snecci-1024×768.png či {/boot/grub,/usr/share/images/desktop-base}/VytvořenáSložkaČiOdkaz/obrazek.{png,tga}
  • 10_hurd
    • určuje umístění jádra hurd.
  • 10_linux
    • určuje jádra založená na„lsb_release -i -s“ (distributorem přiřazený příznak („Ubuntu“)).
  • 20_memtest86+
    • pokud soubor /boot/memtest86+.bin existuje, je přidán do nabídky.
  • 30_os-prober
    • hledá ostatní operační systémy a zahrnuje je do nabídky.
  • 40_custom
    • Příklad pro přidávání vlastních nabídek následně vkládaných do grub.cfg (po spuštení „sudo update-grub“). Tento (i ostatní soubory) musí být spustitelný, aby bylo možno importovat data do souboru grub.cfg.

… následují další popisy a návody - originály najdete na https://wiki.ubuntu.com/Grub2

GRUB 2 testování a vývoj

Grub 2 je stále ještě ve vývojové verzi 1.98, takže uživatelé mají stále čas přispět k jeho rozvoji. Například zde testování GRUBu 2

Instalace / Upgrade

Instalace (Ubuntu 9.10)

GRUB 2 je instalován jako výchozí pro NOVÉ instalace 9.10 (Karmic). Pokud upgradujete z verze Jaunty 9.04 na Karmic 9.10, použijte prosím pro instalaci instrukce níže.

Upgrade (Ubuntu 9.04+)

Pokud máte jakékoliv problémy s upgrade Grub Legacy (původní verze „1“) na Grub 2, prozkoumejte prosím toto vlákno (bug post)… https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/386789

  • Otevřete Terminál
$ sudo apt-get install grub2

Po restartu počítače uvidíte tyto možnosti ve startovní nabídce.

  • vyberte OK z grub-pc konfigurace
  • vyberte Chainload from menu.lst YES
  • na příkazové řádce linuxu zmáčkněte ENTER

Upozornění: Toto je pouze dočasné, trvalé změny dosáhnete tímto: Po úspěšném rozběhu systému -

  • napište (opět v terminálu)
$ sudo upgrade-from-grub-legacy

GRUB 2 vám ukáže, odkud bude načítat (bootovat). :!:

Nováčci! Použijte zde mezerník pro označení své volby. Systém se nenačte bez vašeho výběru. Nastala by chyba číslo 15 a bootovací menu by se neobjevilo. Pokud máte duální boot například Ubuntu a zároveň Windows (XP, Vista či "7"), možná zde budete muset dodělat další změny pro hladký chod.

Jestliže se vám toto skutečně stalo, podívejte se prosím do tohoto vlákna (možnost nápravy): http://kubuntuforums.net/forums/index.php?topic=3106892.0

Na mém testovacím systému je zobrazeno (hd0) /dev/sda, ale toto se může lišit stroj od stroje. Pokud je toto špatně, musíte vstup opravit v souboru /boot/grub/device.map tak, aby to odpovídalo vašemu systému (nejčastěji stačí zaměnit sda za sdb a poté spustit

$ sudo grub-install

GRUB 2 bude plně nainstalován a předchozí verze zavaděče odstraněna (stará konfigurace bude zálohována v adresáři /boot/grub pod názvem menu.lst*).

Můžete kdykoli potvrdit verzi, kterou instalujete, pomocí příkazu:

grub-install -v

Odkazy

Poslední úprava: 2013/01/23 23:13, autor: Roman Vacho
Logo Ubuntu, Ubuntu a Canonical jsou registrované obchodní známky firmy Canonical Ltd.