FreeBSD kézikönyv
Előző | Fejezet 12. A FreeBSD rendszerindítási folyamata | Következő

# 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 `index`et 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.

Előző | Tartalom | Következő
A rendszerindítás problémája | Fel | Kapcsolat a rendszermaggal a rendszerindítás folyamán

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>.