====== 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 ====== {{.:tip.png}} 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=640x480// * 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=640x480 (výchozí hodnota, pokud systém nenalezne odkomentovanou žádnou hodnotu zde, použije právě tuto ) * GRUB_GFXMODE=800x600 * GRUB_GFXMODE=1024x768 * GRUB_GFXMODE=1600×1200 * hodnoty rozlišení najdete třeba[[http://cs.wikipedia.org/wiki/Rozli%C5%A1en%C3%AD|zde]] 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=640x400 * GRUB_GFXMODE=800x500 * GRUB_GFXMODE=1024x640 * GRUB_GFXMODE=1280x800 * GRUB_GFXMODE=1680x1050 * //#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/sda**1**. * 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: [[http://www.ubuntu.com/getubuntu/download|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ál|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 ### -~ * [[http://forum.ubuntu.cz/index.php/topic,49050.0.html|Návod na českém fóru, jak přidat do boot menu GRUB2 načítání .ISO souboru]] ===== /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-1024x768.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]]{{.:en.png}} ...'' ===== 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 [[https://wiki.ubuntu.com/KernelTeam/Grub2Testing|testování GRUBu 2]] {{.:en.png}} ===== 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]] {{.:en.png}} * 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 ====== * [[http://wiki.ubuntu.com/Grub2|Anglický originál návodu]] {{.:en.png}} * [[http://grub.enbug.org/|HomePage zavadeče GRUB]] {{.:en.png}} * [[https://wiki.ubuntu.com/KernelTeam/Grub2Testing|Doplňovaný seznam otestovaného hardwaru]] {{.:en.png}} * [[http://forum.ubuntu.cz/index.php/topic,42267.0.html|Podobný návod na českém fóru, možná srozumitelnější]] * [[http://forum.ubuntu.cz/index.php/topic,49050.0.html|Návod na českém fóru, jak přidat do boot menu GRUB2 načítání .ISO souboru]] * [[http://www.abclinuxu.cz/clanky/grub-2-nova-generace-zavadece-linuxu|Možnosti jeho nastavení na Abclinuxu.cz]]