GRUB

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

GRUB

Je zavaděč, který umožňuje spouštění více než jednoho operačního systému na jednom počítači. Jeho jméno vychází z počátečních písmen popisu GRand Unified Bootloader ( Hlavní unifikovaný zavaděč ).

Jak probíhá proces zavedení OS přes GRUB

Při spuštění počítače hledá BIOS zařízení ze kterého lze spustit nějaký OS. Většinou jde o aktivní diskový oddíl na pevném disku počítače, ale může jít i o síťovou kartu. Odtud načte vlastní zavaděč OS.

První stupeň zavádění

V případě GRUB legacy se načte jako první tzv. "first stage" (první stupeň). Ta se musí vejít do prvních 512 bajtů pevného disku (tzv. MBR sektor), proto je v něm obsažena pouze informace o tom, na kterém offsetu pevného disku se nachází další část, která je nezbytná pro zavedení tzv. "second stage" (druhý stupeň).

Ta může zabrat až 30 kilobajtů a lze ji umístit buď hned za "first stage", nebo na některý jiný diskový oddíl. Protože ještě nejde o samotný "second stage", tak se o ní hovoří jako o stupni 1.5.

Obsahuje ovladače, které zpřístupní souborový systém kde je uložena samotná "second stage". Např. aby bylo možné zavést systém ze sítě, musí tato část obsahovat příslušný ovladač síťové karty.

Představovalo do budoucna vzhledem k široké škále dostupných síťových velký problém, proto se síťové zavádění u GRUB2 řeší přes PXE, při kterém si síťovou komunikaci přes tftp řeší sám firmware síťové karty.

Druhý stupeň zavádění

Když převezme otěže zavádění druhý stupeň zavaděče, načte konfigurační soubor s vlastním výběrem možností spuštění operačního systému. Ohromné plus, které má GRUB je integrovaný příkazový řádek, do kterého se dá z grafického menu kdykoliv přepnout a operativně podle potřeby volby pro zavedení systému pozměnit. To je asi jeho nejvýznamnější výhoda, neboť lze řešit běžné problémy se zavedením systému, aniž by bylo nutné používat při chybném nastavení zavaděče pro zavedení nainstalovaného systému nějaké další záchranné médium.

Kdy nám ani editace nepomůže..

Řešit problémy se zavedením OS lze pouze do té chvíle než dojde k poškození primary stage (oblasti kde je první stupeň), která zajišťuje natažení zbytku zavaděče, nebo diskový oddílu na kterém je secondary stage (druhý stupeň).

V případě poškození primary stage lze provést reinstalaci GRUBu kupř. z nějakého LiveCD, které obsahuje GRUB. S oblibou přepisují MBR sektor při instalaci zvláště systémy MS Windows.

Ve druhém případě není jiná možnost, než GRUB nainstalovat kompletně znovu. Výhodou je, že GRUB nevyžaduje nějaké speciální závislosti, takže to nemusí být nutně ten distribuční, ale klidně i ten z liveCD.

Rozdíl mezi GRUB a GRUB2

V současné době nahrazuje v distribucích původní GRUB verze 0.97 (který je přejmenován na GRUB Legacy a dále se již nevyvíjí) GRUB2 verze 1.97.

GRUB2 je výsledkem projektu PUPA, jehož cílem bylo vytvořit novou, lepší, bezpečnější a robustnější verzi zavaděče než jakým byl původní GRUB. Ve svých možnostech pokročil ještě dál, protože na rozdíl od GRUB legacy nabízí také možnosti skriptování.

Další rozdíly:

  • Na rozdíl od původního GRUBu nepoužívá GRUB2 mezistupeň 1.5
  • Obsahuje podporu pro dynamické zavádění modulů během zaváděcího procesu (Původní GRUB umožňoval přidat další ovladače pouze během kompilace)
  • Podporuje skriptování - práci s podmínkami, smyčkami, proměnnými a funkcemi.
  • Podporuje internacionalizaci

Kompilace GRUB2 na Debianu

  • GCC 4.1.3 or later
  • GNU Make
  • GNU Bison 2.3 or later
  • GNU binutils 2.9.1.0.23 or later
  • Other standard GNU/Unix tools
  • Ruby 1.6 or later
  • Autoconf 2.59 or later

autoconf automake autotools-dev binutils binutils-multiarch bison cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev m4 make liblzo2-dev libruby1.8 ruby ruby1.8

aby bylo možné vytvářet deb balíčky..

build-essential debian-keyring dpkg-dev g++ g++-4.3 g++-4.3-multilib g++-multilib gcc-4.3-multilib gcc-multilib lib32gcc1 lib32gomp1 lib32stdc++6 libc6-dev-i386 libc6-i386 libstdc++6-4.3-dev libtimedate-perl

instalace file - pro detekci souborů... file libmagic1

aby bylo možné instalovat grub-emu... libncurses5-dev

aby bylo možné mít usb podporu... libusb-dev

Pro podporu freetype2...

defoma libfreetype6 libfreetype6-dev libice-dev libice6 libkpathsea-dev libkpathsea4 liblzo2-dev libpthread-stubs0 libpthread-stubs0-dev libsm-dev libsm6 libt1-5 libt1-dev libt1-doc libx11-dev libxaw7 libxaw7-dev libxcb-xlib0-dev libxcb1-dev libxext-dev libxmu-dev libxmu-headers libxmu6 libxpm-dev libxt-dev libxt6 vflib3 vflib3-dev

A jdeme na vlastní kompilaci..

./configure --enable-mm-debug

Srovnávací tabulka GRUB shellu

Pozn:

  • Při zavolání nápovědy se modul do GRUB2 automaticky natáhne.
  • Při zadání několika počátečních znaků příkazu při volání nápovědy, vypíše GRUB nápovědu pro vše, co svým začátkem vyhovuje hledanému řetězci


Příkaz GRUB legacy GRUB2 GRUB2 rescue Popis příkazu Příklad
acpi . ano . Příkazem acpi lze podstrčit zaváděnému OS jiné, resp. další informace o ACPI , než ty které dodal BIOS
background ano . . Nastaví barvu pozadí menu zavaděče. grub > background FFFFFF
Interpretace: Příkaz background nastaví pozadí menu na bílou barvu (#FFFFFF)
background_image . ano . Natáhne obrázek na pozadí menu zavaděče sh:grub> background_image (hd0,1)⁄grub⁄obrazek_na_pozadi.png
Interpretace: Pokud příkaz background_image najde na prvním diskovém oddíle disku hd0 v adresáři grub obrázek s názvem obrazek_na_pozadi.png, použije jej jako pozadí pro menu.
badram . ano . . .
blocklist ano ano ano Vypíše obsah blocklisty blocklist /grub/soubor
boot ano ano ano Spustí proces zavádění OS .
bootp ano . . Pouze při bootu po síti .
cat ano ano ano Vypíše obsah souboru cat (hd0,1)/grub/grub.cfg
chainloader ano ano ano Přepnutí na jiný zavaděč .
clear ano . . . .
cmp . ano . . .
color ano ano . . .
configfile ano ano . Natáhne jiný konfigurační soubor .
cpuid . ano . Měl by vypisovat flags pro procesor (nefachá?) .
crc . ano . Výpočet kontrolního součtu souboru .
date . ano . Příkaz kterým lze vypsat či nastavit aktuální čas .
drivemap . ano . Umožňuje přemapování disků v BIOSu, je-li k dispozici více zařízení .
dump . ano . Vypisuje obsah adresované paměti .
displayapm ano . . Vypíše informace o APM BIOSu .
displaymem ano Nahrazeno lsmmap . Vypisuje co GRUB ví o mapování systémové paměti stroje .
echo . ano . Vypisuje obsah adresované paměti .
efiemu_loadcore . ano . Vypisuje obsah adresované paměti .
efiemu_pnvram . ano . Vypisuje obsah adresované paměti .
efiemu_prepare . ano . Vypisuje obsah adresované paměti .
efiemu_unload . ano . Vypisuje obsah adresované paměti .
exit . ano . Ukončí GRUB (má význam jen v GRUB shellu v systému) .
export . ano . Exportuje proměnnou .
false . ano . Exportuje proměnnou .
find ano Nahrazen příkazem search . Měl by vyhledávat soubory, ale nějak nefungoval... .
foreground ano ano . . .
freebsd . ano . Exportuje proměnnou .
freebsd_loadenv . ano . Natahuje proměnné pro nastavení prostředí FreeBSD .
freebsd_module . ano . Natahuje jaderné moduly FreeBSD .
freebsd_elf . ano . Natahuje jádro FreeBSD .
geometry ano Nahrazeno příkazem ls . . .
gptsync . ano . Cpe hybridní MBR na GPT zařízení. K čemu je to dobré zatím netuším... .
halt ano ano . Nekompromisně stroj zastaví .
handler . ano . Bez parametrů vypisuje seznam tříd handlerů. Je-li jako parametr uvedena třída, vypíše co je aktivní a k dispozici, a umožní je za chodu přepnout .
hdparm . ano . Vypisuje a nastavuje parametry pro přístup k fyzickému disku .
hello . ano . Příkaz hello řekne hello .
help ano ano . Nápověda pro GRUB .
hexdump . ano . Vypíše v hexadecimálním kódu obsah souboru či zařízení určený délkou a offsetem .
hide ano nahrazuje příkaz parttool . Nastavuje diskový oddíl jako skrytý .
initrd ano ano . Natahuje ramdisk .
initrd16 . ano ano Natahuje ramdisk pro 16 bitové OS .
insmod . ano ano Natahuje další moduly do GRUB2 .
kernel ano Nahrazují jej příkazy multiboot, linux, aj. . . .
keystatus . ano ano Příkaz kontroluje aktuální stav kláves CTRL, ALT a SHIFT .
loadenv . ano . Vypisuje dostupná zařízení a soubory .
loadfont . ano . Vypisuje dostupná zařízení a soubory .
loopback . ano . Vypisuje dostupná zařízení a soubory .
ls . ano . Vypisuje dostupná zařízení a soubory .
lsfonts . ano . Vypisuje dostupná zařízení a soubory .
lsmmap . ano . Vypisuje dostupná zařízení a soubory .
lsmod . ano . Vypisuje dostupná zařízení a soubory .
lspci . ano . Vypisuje dostupná zařízení a soubory .
makeactive ano ano . . .
map ano . . . .
md5crypt ano . . Generuje heslo v MD5 formátu .
module ano ano . . .
modulenounzip ano ano . . .
pager ano ano . . .
partnew ano ano . . .
parttype ano parttool . . .
parttool . ano ano . .
password ano ano ano . .
pause ano . . Bylo použito u starého grubu .
play . ano ano . .
probe ano ano . . .
pxe . ano ano . .
quit ano Nahrazeno příkazem exit . Ukončí GRUB (má význam jen v GRUB shellu v systému) .
rarp ano . . ? .
read ano dump . . .
read_byte . ano ano . .
read_dword . ano . . .
read_word . ano . . .
reader.normal . ano ano Přepne na normální GRUB shell
reader.rescue . ano ano Přepne na záchranný GRUB shell
reboot ano ano ano Spustí restart .
rescue ano . . . .
rmmod ano ano . . .
root ano ano . . .
rootnoverify ano . . . .
save_env ano ano . . .
search . ano ano Prohledá dostupná zařízení a vypíše to, které bude vyhovovat hledanému parametru jako první. Tento příkaz lze využít kupř. pro identifikaci určitého disku podle jeho uuid nebo návěští ( label) disku. (Pozor! Příkaz je citlivý na malá a velká písmena) sh:grub> search −l WINXPsp3 −s root Interpretace: Pokud najde příkaz search diskový oddíl, s návěštím odpovídajícím řetězci WINXPsp3, nastaví jej do proměnné root.
serial ano ano ano .
set . ano ano .
setkey ano . . . .
setup ano . . . .
shade ano . . . .
sleep . ano ano .
source . ano ano .
splashimage ano Nahrazuje background_image . . .
terminal ano . . . .
terminal_input . ano . . .
terminal_input.at_keyboard . ano . . .
terminal_input.console . ano . . .
terminal_input.serial . ano . . .
terminal_input.usb_keyboard . ano . . .
terminal_output . ano . . .
terminal_output.console . ano . . .
terminal_output.gfxterm . ano . . .
terminal_output.serial . ano . . .
terminal_output.vga . ano . . .
terminal_output.vga_text . ano . . .
terminfo ano ano . Vypíše aktuální nastavení terminálu pro GRUB shell .
test . ano . . .
testvbe ano ano . . .
true . ano . . .
unhide ano ano . . .
unset . ano . . .
uppermem ano ano . . .
usb . ano . . .
vbeinfo . ano . . .
vbeprobe ano ano . . .
vbetest . ano . . .
videotest . ano . . .
viewport ano ano . . .
write_byte . ano . . .
write_dword . ano . . .
write_word . ano . . .
xnu_devtree . ano . . .
xnu_kernel . ano . . .
xnu_kext . ano . . .
xnu_kextdir . ano . . .
xnu_mkext . ano . . .
xnu_ramdisk . ano . . .
xnu_resume . ano . . .
xnu_splash . ano . . .
xnu_uuid . ano . . .
zfs_bootfs . ano . . .
zfsinfo . ano . . .