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