This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

A boot manager és az indulás fokozatai

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 a 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 ismeri eléggé 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, ami 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, amin 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.

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, amiket mi magunk tennénk akkor, amikor a rendszermagot indítjuk) betöltése:

    load -t userconfig_script /boot/kernel.conf

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