GRUB

A HupWiki-ből...

(Az oldal alapja a Suse DB GNU GRUB info volt.)

Tartalomjegyzék

GRand Unified Bootloader

Hasonlóan a LILO rendszertöltőhöz, a GRUB két részből áll: az első rész (512 byte méretű), amely az MBR-be vagy más boot-szektorba íródik és egy nagyobb második rész, amely a filerendszerek értelmezését és a tényleges OS betöltő, valamint egy egyszerű shell-t implementáló programkódot tartalmaz. A második rész mellett még létezik egy "másfeledik" rész is, amely egy közbenső loader, híd az első és a második rész között. Ez egy meghatározott filerendszert tud olvasni (pl. csak ReiserFS-t), és kis mérete miatt fix helyre is beágyazható, így pl. ReiserFS esetén az MBR után, lehetővé téve, hogy a viszonylag nagy második részt bárhova mozgassuk a filerendszeren belül.

Az alapvető különbség a LILO-val szemben az, hogy a GRUB a Multiboot Standardnak megfelelő OS-ek elindítására írták, ilyen pl. GNU/Hurd, de ezen felül természetesen tudja bootolni a Linux, FreeBSD, NetBSD és OpenBSD rendszereket, sőt a chainloader képességével, a LILO-hoz hasonlóan bármi más, a booteszközre már telepített OS-t, így pl. DOS-t, Windows-okat, SCO UnixWare-t, QNX-et, stb... Mindezeken felül direkt módon támogat néhány filerendszert és a LILO-val ellentétben a konfigurációs file-t (menüfile) minden induláskor a filerendszerről, file szinten olvassa fel. Éppen ezért legtöbbször nem szükséges újratelepíteni a GRUB-ot, miután a beállításait megváltoztattuk.
A GRUB nem igényli a kernel fizikai pozíciójának ismeretét. Éppen ezért a bootloadert nem kell újratelepíteni a kernel újrafordítása után sem.

A GRUB egy másik nagy előnye az, hogy az összes boot paramétert szerkeszthetjük módosíthatjuk, sőt más boot eszközre telepíthetjük is a GRUB-ot a rendszerindítás megkezdése előtt. Ez sokszor nagyon hasznos lehet, pl. ha hibák találhatók a menüfájlban, vagy csak egyszerűen más paraméterekkel akarjuk elindítani kedvenc rendszerünket.

A GRUB Linux esetén lehetővé teszi a kernel, valamint az initrd nevének és helyének megadását a rendszerindítást megelőzően.

Támogatott filerendszerek:

A GRUB működése

Amikor a számítógép elindul, a Grub két esetleg három komponense kerül egymás után betöltésre:

  • A GRUB első részének betöltése
A GRUB első része a merevlemez MBR-ébe vagy más indítószektorába kerül telepítésre, esetleg egy hajlékonylemez indítószektorába.
Az első rész nagyon kis méretű, mivel az MBR-ben korlátozott hely áll rendelkezésre (512 byte).
Éppen ezért ennek feladata csupán a GRUB következő részének betöltése. Ezt a részt a többi bootloaderhez hasonlóan, a számítógép BIOS-a tölti be.
  • Opcionálisan a GRUB másfeledik részének betöltése.
Ez a rész értelmezni képes egy filerendszert (minden értelmezett filerendszerhez külön létezik egy ilyen rész), és betölti a GRUB második részét, Lehetővé téve, hogy a második részt a későbbiek során elmozdítsuk, felülírjuk a filerendszeren belül.
  • A GRUB második részének betöltése
A Grub második része nyújtja a tulajdonképpeni rendszertöltő funkcionalitást, beleértve a menüt is (természetesen az ekkor nem látható GRUB shell-t is) és azt a programkódot, amely átadja az irányítást az operációs rendszer számára.
Amikor a rendszertöltőt telepítjük, a rendszertöltő második részének fizikai helye rögzítésre kerül az első, vagy a másfeledik részben.

Beállítás

Ha még nics fenn a rendszeredben, akkor telepítsd fel a 'grub' csomagot.

Ezután létre kell hozni a konfigurációs a /boot/grub/menu.lst állományt.

timeout 5
  • 5 másodpercet várjon mielőtt automatikusan indítja...
default 0
  • ... a 0. (tehát első) menüpontot. A sorszámba a Más operációs rendszerek: sort is bele kell számolni, azután egyet levonni belőle.
title Linux
  • a menüpont neve
kernel (hd0,0)/vmlinuz root=/dev/hda1 ro
  • "kernel" = linux kernelt kell tölteni
  • "(hd0,0)" = első merevlemez első partíciójáról, ahol a "/vmlinuz" egy symlink a '/boot'ban található megfelelő kernel imagera (ha debian kernel csomag van fenn)
  • "root=/dev/hda1" = a rootfs helye
  • a merevlemez csak-olvasható módban ("ro") bootoljon (ha "rw"ben bootolsz, akkor nem tudja leellenőrizni az fsck a rootfst)
    • de, pld. XFSt rwben kell bootolni

Egy Windows betöltése így néz ki:

title Windows
chainloader (hd0,0)+1
  • "chainloader" átadja a boot folyamatot egy másik boot managernek, ami első merevlemez első partícióján van, az első sectorban (a "+1" csak a winre jellemző)

Megj.: a grub számára az a 0. merevlemez, amire fel van telepítve, utána a hda az 1. (persze ha nem ő a 0.), hdb a 2., stb.; a rendszert tartalmazó partíció kiderítéséhez indítsd a 'grub' parancsot, majd: 'find /vmlinuz"; win partíció: 'find /autoexec.bat'.

Megj.2: a winnek mindenképp a primary master merevlemezen kell lennie, ezért, ha nem ezen van a grub, akkor a "chainloader" rész előtt át kell mappolni a két merevlemez közt:

map (hd1) (hd0)
map (hd0) (hd1)


Grub, mint boot loader telepítése: grub-install /dev/hdX. (Megj.: a "/dev/hdX" annak a meghajtónak a '/dev'beli csatolási pontja, aminek mbrjébe akarod telepíteni a grubot; a lehetséges csatolási pontokat az 'fdisk -l' listázza ki. Megj.2.: mindig mbrbe menjen, ne partíció elejére, mert gubanc lesz; és ha megoldható ne a wint tartalmazó merevlemezre, biztonsági okokból.)

Reboot után már a grub menüje jelentkezik be, ha kivárjuk a visszaszámlálást, akkor a default menüpont töltődik be, de a fel/le gombbal választhatunk mást is; érdemes megjegyezni a "c" gombot, amivel a grub shellbe jutunk (az itt elérhető parancsokat a 'help' listázza ki) és az "e"t, amivel egy adott menüpontot szerkeszthetünk át ideiglenesen (részletek az on-line helpben). Ez utóbbi hasznos új kernel vagy boot paraméter kipróbálására (pld. acpinél), mielőtt véglegesítünk egy változást. (Megj.: ha a reiserfs típusú rootfs szabálytalanul lett leállítva, akkor drasztikusan megnőhet a grub betöltési ideje, amíg a napló nincs visszapörgetve.)

Rossz beállításból fakadó hibák:

1. hiba: "Error 15: File not found"
probléma: nem találja a kernelt a megadott partíción
megoldás: hívd elő a konzolt ("c"); majd keresd ki, hogy melyik meghajtón és hol van a kernel image ('find /vmlinuz' vagy 'find /boot/vmlinuz'); az eredményt (pld.: "(hd0,0)") írd fel és indítsd újra a gépet ('reboot'); újra a grub menüben a megfelelő opciót nyisd meg ideiglenes szerkesztésre ("e"), majd a kernel boot sorát szerkeszd ("e") át úgy, hogy megfeleljen az előző teszt eredményének (pld.: "kernel (hd0,0)/vmlinuz (...)"); itt végezhetsz egy gyorstesztet: közvetlenül a "/vmlinuz" után pozicionáld a kurzort és nyomj egy [TAB]ot, ha minden oké, akkor kiad egy "Possible files are:" listát; most lépj ki a szerkesztő módból ("enter") és próbálj meg az új beállításokkal bootolni ("b"); ha minden oké: írd át a '/boot/grub/menu.lst' állományt a helyes értékekre és telepítsd újra a grubot

2. hiba: "(... boot eleje rendesen fut ...)
pivot_root: No such file or directory
/sbin/init: 424: cannot open dev/console: No such file
kernel panic: Attempted to kill init"
probléma: rossz a rootfs beállítása ("kernel (...) root=/dev/hdxy" rész);
megoldás: fentebb leírt módon a grub konzoljában olvasd ki az fstabból a rootfs helyét (pld.: 'cat (hd0,0)/etc/fstab') és javítsd ki a boot paramétereit

Grub tuning 1.: boot védelem
régen könnyen lehetett root jogokat szerezni azzal, ha a boot paraméterezésekor hozzáillesztettünk egy "single" (vagy egyszerűen "1" vagy "S") kifejezést: ennek hatására single mód init scriptjei futottak le (minimális karbantartó felület) és hipp-hopp root jogok; ma már ennek kivédésére szolgál az 'sulogin' beléptető (a 'sysvinit' csomag része)
de létezik még egy módszer: szintén a boot paraméterezésekor az "init=/bin/sh", mert ekkor a kernel - miután a rendszer legalapvetőbb feladatokkal végzett - ennek a programnak adja át a boot további lebonyolítását (az 'init' program helyett) és így az alapértelmezett shell töltődik be jelszó nélkül, root jogokkal;
még egy érdekesség: a grub command line állománykezelési része természetesen nem tudja a jogi beállításokat érvénybe léptetni, így pld. 'cat (hdx,y)/etc/ppp/pap-secrets';
az ilyen rosszindulatú lépések megakadályozására érdemes az interaktív módokat (console, menü szerkesztés) jelszóval védeni:
1. indítsd el a 'grub-md5-crypt' programot, majd kódold le a leendő jelszót (lehetne sima szöveg is a jelszó, de az a 'menu.list'ből könnyen kiolvasható);
2. '/boot/grub/menu.lst' elejére copy&paste (az uj_grub_jelszo helyett): password --md5 uj_grub_jelszo
3. reboot és ezentúl a "p" gombbal és a jelszó megadásával lehet elérni a interaktív módokat;

Grub tuning 2: grafikus grub
az eredeti grubból még hiányzik ez a feature, de a debian változatban már benne van; egyenlőre korlátozott a tudása: képes az alap vga (640x480x16) módban betölteni egy háttérképet (csak 14 szín használható, mivel két szín le van foglalva a fontnak);
1. a kép konvertálása: convert leendo_hatter.formatum -colors 14 -geometry 640x480! grub_backg.xpm
2. ezt még betömöríteni: gzip grub_backg.xpm
3. a 'menu.lst' szerkesztése: az elejére tedd be ezt a sort: splashimage=(hdx,y)/boot/grub/grub_backg.xpm.gz
4. ha kell változtasd meg a karakterek színét a jobb olvashatóság érdekében (hex, RRGGBB):
foreground = ffffff
background = 000000
5. reboot

update-grub

Debian alatt használható eszköz a menu.lst automatikus kezelésére. A /bootban található vmlinuz (és a hozzájuk tartozó initrd) állományok és a menu.lst statikus beállításai alapján generálja le a boot menüpontokat és a beállításokat (minden kernel image csomag telepítés, frissítés vagy eltávolítás alkalmával automatikusan lefut). Csak a menu.lst-et kezeli, ha friss grubot akarsz telepíteni, akkor a fentebb ismertetett grub-installt használd.

Az automatikusan generált lista szerkesztése úgy valósítható meg, hogy a BEGIN AUTOMATIC KERNEL LIST utáni rész opcióit átszerkeszted, de arra figyelj, hogy a #t soha ne töröld ki az adott opció elől (mert érvénytelennek veszi az adott sort és alapállapotra újragenerálja).

Pár tipp:

  • "kopt=root=/dev/hdXY ro" (így read-only módban bootol a roofs)
  • groot=(hdx,y) (ha megcseréled a merevlemzeket, stb. akkor hasznos átírni)
  • memtest86=true (a memtest is megjelenik a menüpontok közt, ehhez telepítsd a memtest86+ csomagot)
  • ha pld. ACPIt akarsz beüzemelni, akkor a #kopt=root= sort told meg egy acpi=force résszel, majd update-grub

Windows kompatibilitás

Előfordulhat az a kellemetlen helyzet, hogy a Windows boot managerét felülírod a Grubbal.

Lehetséges gyógyír:

  1. előrelátó vagy és lemented: az adott merevlemez (pld. hda) első 512byteja tartalmazza az MBRt és a partíciós táblát
    • mentése: dd if=/dev/hda of=/boot/windowsmbr bs=512 count=1
    • visszatöltés: dd if=/boot/windowsmbr of=/dev/hda bs=512 count=1 (csak 446 byteot írj vissza, ha a partíciós táblát nem akarod bolygatni)
  2. megjavítod
    • Windowx 4.x (95, 98, me)
      1. boot diskről boot
      2. fdisk /mbr
    • Windows 5.x (NT, 2000, XP)
      1. telepítő cdről boot
      2. helyreállító konzol
      3. fixboot, majd fixmbr (megj.: ha FATnek látja a FAT32es partíciót, akkor "javítás" során 8gbra vágja...)

Linkek