Kdysi dávno jsme měli legacy GRUB, Grand Unified Linux Bootloader verze 0.97. Legacy GRUB měl mnoho ctností, ale stal se Starý a jeho vývojáři toužili po více funkčnosti, a tak GRUB 2 přišel na svět.
GRUB 2 je hlavní přepis s několika významnými rozdíly. Zavádí vyměnitelné médium a lze jej nakonfigurovat s možností zadání systému BIOS. Je to složitější konfigurace se všemi druhy skriptů prokousat, a místo toho mít pěkný docela jednoduché /boot/grub/menu.lst
soubor s konfigurací na jednom místě, výchozí hodnota je /boot/grub/grub.cfg
. Které neupravujete přímo, Ach ne, protože to není pro pouhé lidi, aby se dotkli, ale pouze jiné skripty. My pokorní lidé můžeme editovat /etc/default/grub
, který řídí hlavně vzhled menu GRUB. Můžeme také upravovat skripty v /etc/grub.d/
. Jsou to skripty, které spustit operační systémy, ovládání externích aplikací, jako je memtest
os_prober
a motivů./boot/grub/grub.cfg
je vyrobena z /etc/default/grub
/etc/grub.d/*
při spuštění update-grub
příkaz, který je nutné spustit pokaždé, když provedete změny.
dobrou zprávou je, že skript update-grub
je spolehlivý pro nalezení jader, spouštěcích souborů a přidání všech operačních systémů do zaváděcího menu GRUB, takže to nemusíte dělat ručně.
naučíme se, jak opravit dvě častější selhání. Když spustíte systém a zastaví se na řádku grub>
, jedná se o úplný příkazový shell GRUB 2. To znamená, že GRUB 2 normálně spustit a načíst normal.mod
modul (a dalších modulů, které jsou umístěny v /boot/grub//
), ale nenašel své grub.cfg
soubor. Pokud vidíte grub rescue>
to znamená, že nemohl najít normal.mod
, takže pravděpodobně nemohl najít žádný z vašich spouštěcích souborů.
Jak se to děje? Jádro mohlo změnit přiřazení jednotky nebo jste přesunuli pevné disky, změnili jste některé oddíly nebo nainstalovali nový operační systém a přesunuli věci. V těchto scénářích jsou vaše spouštěcí soubory stále tam, ale GRUB je nemůže najít. Takže můžete hledat spouštěcí soubory na řádku GRUB, nastavit jejich umístění a poté spustit systém a opravit konfiguraci GRUB.
příkazový Shell GRUB 2
příkazový shell GRUB 2 je stejně silný jako shell v legacy GRUB. Můžete jej použít k objevování zaváděcích obrázků, jader a kořenových souborových systémů. Ve skutečnosti vám poskytuje úplný přístup ke všem souborovým systémům na místním počítači bez ohledu na oprávnění nebo jiné ochrany. Což někteří mohou považovat za bezpečnostní díru, ale znáte staré unixové diktum: ten, kdo má fyzický přístup k počítači, ho vlastní.
Když jste na řádku grub>
, máte mnoho funkcí podobných jakémukoli příkazovému shellu, jako je historie a dokončení karty. Režim grub rescue>
je omezenější, bez historie a bez dokončení karty.
pokud cvičíte na fungujícím systému, stiskněte C, když se zobrazí nabídka zavádění GRUB, abyste otevřeli shell příkazu GRUB. Odpočítávání spouštění můžete zastavit posouváním položek nabídky nahoru a dolů pomocí kláves se šipkami. Je bezpečné experimentovat na příkazovém řádku GRUB, protože nic, co tam děláte, není trvalé. Pokud již zíráte na výzvu grub>
nebo grub rescue>
, jste připraveni na rock.
několik následujících příkazů pracuje jak s grub>
, tak s grub rescue>
. První příkaz, který byste měli spustit, vyvolá pager, pro stránkování dlouhých výstupů příkazu:
grub> set pager=1
na obou stranách znaménka equals nesmí být žádné mezery. Nyní pojďme trochu prozkoumat. Typ ls
seznam všech oddílů, které GRUB vidí:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
Co je to msdos stuff
? To znamená, že tento systém má tabulku oddílů MS-DOS ve starém stylu, spíše než novou lesklou tabulku oddílů globálně jedinečných identifikátorů (GPT). (Viz Použití nové tabulky oddílů GUID v Linuxu (sbohem starověké MBR). Pokud používáte GPT, řekne (hd0,gpt1)
. Teď slídíme. Pomocí ls
příkaz, aby vidět, jaké soubory jsou na vašem systému:
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
Hurá, našli jsme kořen souborového systému. Můžete vynechat msdos
a gpt
štítky. Pokud necháte lomítko, vytiskne informace o oddílu. Můžete si přečíst libovolný soubor v systému pomocí příkazu cat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
Čtení /etc/issue
mohl by být užitečný na multi-boot systém pro identifikaci různých Linuxes.
nabootovat Z grubu>
Toto je, jak nastavit spouštěcí soubory a boot systému z grub>
řádek. Víme, že od spuštění ls
příkaz, že tam je Linux kořenový souborový systém na (hd0,1)
, a vy můžete pokračovat v hledání, dokud si ověřit, kde /boot/grub
. Poté spusťte tyto příkazy pomocí vlastního kořenového oddílu, jádra a obrázku initrd:
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
první řádek nastaví oddíl, na kterém je kořenový souborový systém zapnutý. Druhý řádek říká GRUB umístění jádra, které chcete použít. Začněte psát /boot/vmli
a zbytek vyplňte pomocí tab-completion. Zadejte root=/dev/sdX
pro nastavení umístění kořenového souborového systému. Ano, zdá se to nadbytečné, ale pokud to vynecháte, dostanete paniku jádra. Jak znáte správný oddíl? hd0, 1 = /dev/sda1. hd1, 1 = /dev/sdb1. hd3, 2 = /dev/sdd2. Myslím, že zbytek můžete extrapolovat.
třetí řádek nastaví soubor initrd
, který musí mít stejné číslo verze jako jádro.
čtvrtý řádek spustí váš systém.
Na některých systémech Linux aktuální jádra a initrd jsou symlinked na nejvyšší úrovni kořenový souborový systém:
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
Takže jste mohli spustit z grub>
:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
Zavedení Z grub rescue>
Pokud jste v GRUB rescue shellu příkazy jsou různé, a budete muset načíst normal.mod
linux.mod
moduly:
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
Tab-dokončení by měla začít pracovat po načtení obou modulů.
provádění trvalých oprav
po úspěšném spuštění systému spusťte tyto příkazy k trvalé opravě grubu:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
Při spuštění grub-install
pamatujte si, že jste instalaci do spouštěcího sektoru pevného disku a nikoli na oddíl, takže se nemusíte používat oddíl číslo jako /dev/sda1
.
ale stále nefunguje
Pokud je váš systém tak zmatený, že nic z toho nefunguje, zkuste Super grub2 live rescue disk. Oficiální příručka GNU GRUB 2.00 by měla být také užitečná.