GRUB
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 druhý stupeň zavaděče řízení, načte konfigurační soubor s vlastním výběrem možností spuštění operačního systému. Výhodou GRUBu je, že obsahuje také příkazový řádek, do kterého se lze z grafického menu přepnout a operativně podle potřeby pozměnit volby pro zavedení systému.
Výhoda GRUB
Asi nejvýznamnější výhodou je možnost editovat konfigurační soubor zavaděče přes příkazovou řádku před vlastním zavedením OS. Lze tak vyřešit běžné problémy se zavedením systému, aniž by bylo nutné použít nějaké záchranné médium. To však platí pouze do té míry než je poškozen zaváděcí sektor pro GRUB, což činí s oblibou zvláště systémy MS Windows. V takové případě je třeba provést reinstalaci GRUBu kupř. z nějakého LiveCD.
Reinstalace GRUB
Rozdíl mezi GRUB a GRUB2
V současné době nahrazuje v distribucích původní GRUB (který je přejmenován na GRUB Legacy a dále se již nevyvíjí) GRUB2. Ten je výsledkem projektu PUPA, jehož cílem bylo vytvořit novou, lepší, bezpečnější, robustnější verzi GRUBu.
- 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 internacionalizaci
- Podporuje skriptování - práci s podmínkami, smyčkami, proměnnými a funkcemi.
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 | . | . | . |