12.3. A boot manager és az indulás fokozatai

12.3.1. A boot manager

Az MBR-ben található programkódot, avagy boot managert, sokszor csak a rendszerindítás nulladik fokozataként emlegetik. Ez az alfejezet a korábban említett két boot managert tárgyalja: a boot0-t és a LILO-t.

A boot0 boot manager: A FreeBSD telepítője vagy a boot0cfg(8) által kialakított MBR alapértelmezett állapotban a /boot/boot0 állományon alapszik. (A boot0 program nagyon egyszerű, hiszen az MBR-ben elhelyezhető kód csak 446 byte hosszúságú lehet, mert a végében még el kell férnie a slice-táblának és az 0x55AA azonosítónak.) Ha telepítettük a boot0-t és a lemezeinken több operációs rendszer is megtalálható, akkor a rendszerindítás során egy hasonló képet kell látnunk:

Példa 12-1. A boot0 munkában

F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1

Default: F2

Más operációs rendszerek, különösen a Windows®, telepítésük során felülírják a már meglevő MBR-t a sajátjukkal. Ha ez történne, vagy egyszerűen csak szeretnénk a meglevő MBR-t lecserélni a FreeBSD MBR-jével, adjuk ki a következő parancsot:

# fdisk -B -b /boot/boot0 eszköznév

ahol az eszköznév annak az eszköznek a neve, ahonnan a rendszert indítani szeretnénk, tehát például ad0 az első IDE-lemez esetén, vagy ad2 a második IDE-vezérlőn található első IDE-lemez esetén, illetve da0 az első SCSI-lemez esetén, és így tovább. Ha testre akarjuk szabni az MBR-t, használjuk a boot0cfg(8)-t.

A LILO boot manager: Ezen boot manager telepítéséhez és beállításához elsőként indítsuk el a Linuxot és vegyük hozzá az alábbi sort a rendszerünkben található /etc/lilo.conf konfigurációs állományhoz:

other=/dev/hdXY
table=/dev/hdX
loader=/boot/chain.b
label=FreeBSD

A fenti sablont kiegészítve, a linuxos konvenciók szerint adjuk meg a FreeBSD elsődleges partícióját és meghajtóját úgy, hogy az X-et átírjuk a linuxos meghajtó betűjelére és az Y-t átírjuk a Linux® elsődleges partíciójának számára. Ha SCSI-meghajtót használunk, a /dev/hd részt is át kell írnunk az előbbiek mellett /dev/sd-re. A loader=/boot/chain.b sor elhagyható abban az esetben, ha mind a két operációs rendszer ugyanazon a meghajtón található. Ha befejeztük a módosítást, futtassuk le a /sbin/lilo -v parancsot a változtatásaink életbe léptetéséhez. Ezt ellenőrizhetjük is a képernyőn megjelenő üzenetek alapján.

12.3.2. Az első fokozat (/boot/boot1) és a második fokozat (/boot/boot2)

Az első és a második fokozat fogalmilag ugyanannak a programnak a része, a lemezen ugyanott helyezkedik el. A tárbeli megszorítások miatt ugyan el kellett választani őket egymástól, de a telepítésük mindig egy helyre történik. A telepítő vagy a bsdlabel (lásd lentebb) használata során a /boot/boot nevű kombinált állományból másolódnak ki.

Az állományrendszereken kívül találhatóak, az aktív slice első sávjában, annak első szektorától kezdődően. Ez az a hely, ahol a boot0, illetve a többi boot manager is keresi a rendszerindítás folytatására alkalmas programot. A felhasznált szektorok száma könnyedén kideríthető a /boot/boot méretéből.

Legfeljebb 512 byte-os méreténél fogva a boot1 állomány nagyon egyszerű felépítésű, és éppen csak annyit tud a slice-ra vonatkozó információkat tároló FreeBSD bsdlabel-ről, hogy megtalálja a boot2-t és elindítsa.

A boot2 már egy kicsivel ügyesebb, és eléggé ismeri a FreeBSD állományrendszerét ahhoz, hogy megtaláljon rajta állományokat, valamint képes egy egyszerű felületet nyújtani a rendszermag vagy a betöltő megválasztásához.

Mivel a betöltő pedig már ennél is okosabb, és egy könnyen használható rendszerindítási konfigurációt tud a felhasználó számára nyújtani, ezért a boot2 általában ezt indítja el, de előtte közvetlenül a rendszermag futtatását végzi el.

Példa 12-2. A boot2 működés közben

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:

Ha le kellene váltani a korábban telepített boot1 és boot2 fokozatokat, használjuk a bsdlabel(8)-t:

# bsdlabel -B lemezslice

ahol a lemezslice annak a lemeznek és slice-nak a kombinációja, ahonnan indítjuk a rendszerünket, például az első IDE-lemez első slice-a esetén ez az ad0s1.

A veszélyesen dedikált mód (Dangerously Dedicated Mode): Amikor a bsdlabel(8) meghívásakor csak a lemez nevét használjuk, például ad0-t, a parancs egy veszélyesen dedikált lemezt hoz létre, slice-ok nélkül! Szinte biztos, hogy nem ez az, amire szükségünk lenne, ezért mindig ellenőrizzük kiadása előtt a bsdlabel(8) parancsot!

12.3.3. A harmadik fokozat (/boot/loader)

A betöltő a három fokozatú rendszertöltés utolsó állomása. Az állományrendszerben /boot/loader néven találhatjuk meg.

A rendszertöltőt az egyszerű konfigurálhatóságot támogató, felhasználóbarát eszköznek tervezték, és könnyen megtanulható, beépített parancsokat használ, melyek mögött egy összetettebb parancsokat ismerő, erősebb értelmező áll.

12.3.3.1. A rendszertöltő működése

Az inicializálás során a rendszertöltő megpróbálja megkeresni a konzolt, és a lemezek közül igyekszik megtalálni azt, amelyikről elindult a rendszer. A keresések eredményének megfelelően beállítja a változókat, majd elindul egy értelmező, ahol vagy szkriptből olvasva, vagy pedig interaktívan feldolgozásra kerülnek a parancsok.

A rendszertöltő ezt követően beolvassa a /boot/loader.rc állományt, az pedig alapértelmezés szerint feldolgozza a /boot/defaults/loader.conf állományt, ahol a változók értelmes kezdőértéket kapnak, valamint feldolgozza még a /boot/loader.conf állományt is, ahol a változók értékeit változtathatjuk meg. Miután ez lezajlott, a loader.rc a változók értékeinek megfelelően cselekszik, betöltve az ily módon kiválasztott rendszermagot és a hozzá választott modulokat.

Végezetül, a rendszertöltő beiktat egy, alapértelmezés szerint 10 másodperces várakozási szünetet, majd elindítja a rendszermagot, ha azt meg nem szakítjuk egy billentyű lenyomásával. Ha megszakítjuk ezt a várakozást, a rendszertöltő egy parancssort ad, amelyen keresztül egyszerű parancsokat adhatunk ki neki: állíthatjuk a változók értékeit, modulokat távolíthatunk el a memóriából, modulokat töltethetünk be, elindíthatjuk a rendszert vagy újraindíthatjuk a számítógépet.

12.3.3.2. A rendszertöltő beépített parancsai

Következzenek a leggyakrabban használt parancsok a rendszertöltőben. Az összes itt elérhető parancsot a loader(8) man oldalon találjuk meg.

autoboot másodperc

Megkezdi a rendszermag betöltését, ha nem szakítjuk meg a várakozást másodpercekben megadott időtartam alatt. Ekkor egy visszaszámlálást láthatunk, ami az alapértelmezés szerint 10 másodperctől indul.

boot [-opciók] [rendszermag]

Amennyiben léteznek, a megadott opciókkal azonnal megkezdi a megadott rendszermag betöltését. A rendszermag paraméter csak abban az esetben adható meg, ha előtte kiadtunk egy unload parancsot, máskülönben a korábban betöltött rendszermaggal indul a rendszer.

boot-conf

Végigmegy a modulok ugyanazon automatikus konfigurációján, ahogy az a normális rendszerindítás során is történik. Ezen parancs használatának csak akkor van értelme, ha előtte az unload parancsot használjuk, megváltoztatunk egy-két változót, általában a kernel-t.

help [témakör]

A /boot/loader.help állományban fellelhető súgóüzeneteket mutatja meg. Ha témakörnek indexet adunk meg, akkor az elérhető témakörök listáját kapjuk meg.

include állománynév

Feldolgozza a megnevezett állományt: beolvassa, majd sorról sorra értelmezi. Hiba esetén azonnal megállítja a feldolgozást.

load [-t típus] állománynév

A név alapján betölti a rendszermagot, modult vagy az adott típusú állományt. Az állománynév után megadott további paraméterek az állománynak adódnak át.

ls [-l] [elérési útvonal]

Kilistázza a megadott elérési útvonalon található állományokat, vagy ennek hiányában a gyökér tartalmát. Ha hozzátesszük a -l kapcsolót, az állományok mérete is látható válik.

lsdev [-v]

Kilistázza az összes olyan eszközt, ahonnan modulokat tölthetünk be. Amennyiben a -v kapcsolót is megadjuk, további részleteket tudhatunk meg róluk.

lsmod [-v]

Kilistázza a betöltött modulokat. Ha többet szeretnénk megtudni róluk, adjuk meg a -v kapcsolót.

more állománynév

Megmutatja a megadott állomány tartalmát, minden LINES számú sor után szünetet tartva.

reboot

Azonnal újraindítja a számítógépet.

set változó, set változó=érték

Beállítja a rendszertöltő környezeti változójának értékét.

unload

Eltávolítja a memóriából az összes betöltött modult.

12.3.3.3. Rendszertöltő példák

Íme néhány konkrét példa a rendszertöltő használatára:

  • Így indíthatjuk egyfelhasználós módban az általunk használt rendszermagot:

    boot -s
  • Távolítsuk el a betöltött rendszermagot és a moduljait, és töltsük be helyettük a korábbi (vagy egy másik) rendszermagot:

    unload
    load kernel.old

    Itt használhatjuk a kernel.GENERIC nevet is, amely a telepítőlemezen található általános rendszermagra utal, vagy a kernel.old nevet, amely a korábban használt rendszermagot rejti (például amikor rendszermagot frissítettünk vagy készítettünk magunknak).

    Megjegyzés: A következőképpen lehet betölteni a szokásos moduljainkat egy másik rendszermaggal:

    unload
    set kernel="kernel.old"
    boot-conf
  • Egy rendszermag-konfigurációs szkript (automatizált szkript, amely ugyanazokat a beállításokat végzi el, amelyeket mi magunk tennénk akkor, amikor a rendszermagot indítjuk) betöltése:

    load -t userconfig_script /boot/kernel.conf

12.3.3.4. Rendszerbetöltő képernyők

Készítette: Joseph J. Barbish.

A rendszertöltés során megjelenő rendszerüzenetek megjelenítése helyett egy sokkal megnyerőbb, látványosabb rendszerindítást tudunk elérni betöltő képernyők használatával. Egy ilyen képet egészen a konzolos bejelentkezésig, vagy az X felett futó valamelyik bejelentkező képernyő megjelenéséig láthatunk.

FreeBSD alatt alapvetően két típusú környezet létezik. Ezek közül az egyik a hagyományos virtuális konzolos parancssoros felület. Ekkor a rendszertöltés befejeződésekor egy szöveges parancssori bejelentkező promptot kapunk. A másik környezet az X11 által felkínált grafikus felület. Miután telepítettük az X11 szervert és valamelyik munkakörnyezetet, tehát például a GNOME, a KDE vagy az XFce környezetek valamelyikét, a startx paranccsal indíthatjuk el a grafikus felületet.

Némely felhasználók a megszokott szöveges bejelentkezés helyett is inkább valamelyik X11 alapú grafikus bejelentkezést szeretnék használni. A különböző bejelentkező képernyők, mint amilyen az Xorg esetén az XDM, a GNOME esetén a gdm, vagy a KDE esetén a kdm (illetve a Portgyűjteményből származó egyéb megoldások) alapvetően a konzolos bejelentkezés helyett nyújtanak egy grafikus bejelentkező felületet. Ilyenkor a sikeres bejelentkezést követően a felhasználó közvetlenül egy grafikus környezetbe kerül.

A parancssoros felület esetén a rendszertöltő képernyő elrejti az összes rendszerüzenetet és a rendszer indításakor futtatott programok üzeneteit. Az X11 használata esetén azonban a felhasználók ezzel együtt már a többi, alapértelmezés szerint grafikus felülettel rendelkező rendszerhez (Microsoft® Windows vagy más nem-UNIX operációs rendszer) hasonló élményt nyernek.

12.3.3.4.1. A rendszerbetöltő képek támogatása

A FreeBSD csak BMP (.bmp) vagy ZSoft PCX formátumú, 256 színű rendszerbetöltő képek megjelenítését támogatja. Emellett szabványos VGA kártyákon csak akkor fog működni, ha a kép 320x200 vagy annál kisebb felbontású.

Nagyobb méretű képek esetén, egészen az 1024x768-as felbontásig, a FreeBSD VESA támogatására lesz szükségünk. Ezt vagy a rendszer indításakor a VESA modul betöltésével engedélyezhetjük, vagy ha a rendszermag konfigurációs állományában megadjuk a VESA sort és készítünk egy saját rendszermagot (lásd 8 fejezet). A VESA támogatáson keresztül a felhasználók a teljes képernyőt betöltő rendszerbetöltő képeket is meg tudnak így jeleníteni.

A rendszerbetöltő képernyő a rendszer indítása közben bármikor tetszőlegesen kikapcsolható egy tetszőleges billentyű lenyomásával.

A megadott betöltőképernyő alapértelmezés szerint a képernyővédő szerepét is betölti az X11 felületén kívül. Ha tehát egy ideig nem használjuk a számítógépünket, akkor a képernyő átvált a betöltőképre és folyamatosan változtatni kezdi az intenzitását, a nagyon világosból a nagyon sötétbe, majd újrakezdi. Az alapértelmezett képernyővédő az /etc/rc.conf állományban a saver= sor megadásával állítható át. Ehhez a beállításhoz több különböző beépített képernyővédő tartozik, ezek teljes listáját a splash(4) man oldalon olvashatjuk. Ezek közül az alapértelmezett a “warp”. Az /etc/rc.conf állományban megadható saver= csak a virtuális konzolokra vonatkozik, az X11 bejelentkező képernyőire semmilyen hatással sincs.

A rendszerbetöltő néhány üzenete, valamint a rendszerindítási opciókat tartalmazó menü és a hozzá tartozó visszaszámlálás még a rendszerbetöltő képernyő használata során is meg fog jelenni.

A http://artwork.freebsdgr.org címen találhatunk néhány ilyen betöltőképernyőt. A sysutils/bsd-splash-changer port telepítésével pedig a rendszer egyes indításakor egy előre megadott gyűjteményből tudunk véletlenszerűen választani egyet.

12.3.3.4.2. A rendszerbetöltő képek használata

A betöltőképet tartalmazó (.bmp vagy .pcx kiterjesztésű) állományt a rendszerindító partícióra, például a /boot könyvtárba kell tennünk.

A normál (256 szín, legfeljebb 320x200-as felbontású) képek esetén a következő sorokat adjuk hozzá a /boot/loader.conf állományhoz:

splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/betöltőkép.bmp"

Nagyobb felbontás esetén (legfeljebb 1024x768-as méretig) pedig a /boot/loader.conf állománynak a következőket kell tartalmaznia:

vesa_load="YES"
splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/betöltőkép.bmp"

Az iménti példában feltételeztük, hogy a /boot/betöltőkép.bmp állományt használjuk betöltőképként. Amikor azonban PCX állományokat akarunk használni, a következő sorokat kell megadnunk, a felbontástól függően a vesa_load="YES" sorral kiegészítve:

splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/betöltőkép.pcx"

Természetesen a kép neve sem csak “betöltőkép” lehet. Tetszőlegesen elnevezhetjük, egyedül csak arra kell ügyelünk, hogy BMP vagy PCX formátumú legyen: splash_640x400.bmp vagy például blue_wave.pcx.

További érdekes beállítások a loader.conf állományból:

beastie_disable="YES"

Ennek megadásakor nem jelenik meg a rendszerindítási lehetőségeket felkínáló menü, de a visszaszámlálás megmarad. Hiába tiltjuk le a menüt, ilyenkor továbbra is választanunk kell a lehetőségek közül.

loader_logo="beastie"

Ezzel a beállítással a menüben látható “FreeBSD” feliratot cserélhetjük le a korábbi kiadásokban szereplő színes démonos emblémára.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.