Az indítólemez tulajdonképpen egy pici, saját magát egyetlen floppy lemezen tartalmazó Linux rendszer. Sok -a teljes méretű Linux rendszerben lévő funkcióhoz hasonló- funkciót kell ellátnia. Mielőtt nekikezdenél egy ilyen rendszer készítésének, meg kell értened az alap Linux rendszer betöltési folyamatát. Azokkal az alapokkal foglalkozunk itt, amikre a dokumentáció további részének megértéséhez szükséged lesz. Több esetben a részleteket és az alternatív lehetőségeket kihagytuk.
Minden PC rendszer az indítási folyamatot a ROM-ban lévő kód végrehajtásával
(pontosabban a BIOS-ban) kezdi, hogy betöltse az indító meghajtó
0. szektor, 0. cylinderén található szektort. Az indító meghajtó
általában az első floppy lemez meghajtó (DOS alatt A:
-val
jelölik, Linuxban /dev/fd0). A BIOS ezután megpróbálja
végrehajtani ezt a szektort. A legtöbb indítható lemez 0. szektora,
0. cylindere a következők valamelyikét tartalmazza:
Ha a Linux kernel nyers-másolással kerül át egy lemezre, a lemez első szektora magának a kernelnek az első szektorát fogja tartalmazni. Az első szektor fogja folytatni a betöltési folyamatot a kernel többi részének indító eszközről való betöltésével.
Amint a kernel teljes egészében betöltődött, néhány alapvető eszköz-inicializálást hajt végre. Ezután megpróbálja betölteni és beilleszteni a gyökér állományrendszert néhány eszközről. A gyökér állományrendszer egyszerűen az az állományrendszer, amit ``/''-ként illesztünk be. A kernelnek meg kell mondani, hogy hol keresse a gyökér állományrendszert; ha nem talál betölthető állományrendszert itt, megáll.
Néhány esetben az induláskor -- gyakran, amikor lemezről indítunk -- a gyökér állományrendszert memórialemezre töltjük be, amit a rendszer a RAM-ból olvas úgy, mintha lemez lenne. Két indok lehet, ami miatt a rendszert memórialemezre töltjük. Az első, hogy a RAM lényegesen gyorsabb bármely floppy lemeznél, így a rendszer működése nagyon gyors, a második, hogy a kernelt tömörített állományrendszerről töltjük be a lemezről, majd memórialemezre kitömörítjük, ezzel lehetővé téve több állomány lemezre másolását.
Ha a gyökér állományrendszer betöltődött, és beillesztődött, a következőhöz hasonló üzenetet kapsz:
VFS: Mounted root (ext2 filesystem) readonly.
Ennél a pontnál a renszer megkeresi az gyökér állományrendszeren az
init
programot (a /bin
vagy az /sbin
alkönyvtárban),
és végrehajtja. Az init
az /etc/inittab állományból
olvassa a konfigurációt, megkeresi a megfelelő sysinit
sort, és
végrehajtja a named szkriptet. A sysinit
szkript általában valami
olyasmi, mint az /etc/rc vagy az /etc/init.d/boot.
Ez a szkript parancsértelmező parancsok halmaza, amik az olyan alap
rendszer szolgáltatásokat állítják be, mint:
fsck
futtatása minden lemezen,fstab
-ban felsorolt lemezek beillesztése.
Ez a szkript gyakran meghív más szkripteket, hogy moduláris inicializálást tegyen lehetővé. Például a közös SysVinit szerkezet, az /etc/rc.d/ alkönyvtár olyan alkönyvtárak teljes rendszerét tartalmazza, amelyek állományai megadják, hogy hogy kell engedélyezni és leállítani a legtöbb rendszerszolgáltatást. Mindazonáltal az indítólemezek sysinit szkriptje gyakran nagyon egyszerű.
Amikor a sysinit szkript végez, visszaadja a vezérlést az init
-nek,
ami ezután az inittab
initdefault
kulcsszavával megadott
alapértelmezett futásszintre lép. A futásszint sor általában
meghatároz egy getty
-hez hasonló programot, ami a
konzolon és tty-ken keresztüli kommunikációért felelős. A getty
az a program, ami a már ismerős ``login:
'' promptot írja ki. A
getty
program hívja meg a login
programot, hogy
a bejelentkezéseket lekezelje, és beállítsa a felhasználói környezetet.
Miután átnéztük az alap indulási folyamatot, definiálhatjuk a különböző lemeztípusokat. Négy típusba sorolhatjuk a lemezeket. A dokumentációban szereplő ``lemez'' szó alatt a továbbiakban a floppy lemezt értjük, ha másként nem rendelkezünk, bár a legtöbb dolog, amiről szó lesz, érvényes merevlemezre is.
A lemez a betöltendő kernelt tartalmazza. A lemez a kernel betöltésére használható, ami utána másik lemezen levő gyökér állományrendszert töltene be. A betöltőlemezen levő kernelnek meg kell mondani, hogy hol találja a gyökér állományrendszert.
Gyakran a betöltőlemez másik lemezen levő gyökér állományrendszert
tölt be, de az is megoldható, hogy merevlemez gyökér állományrendszerét
töltse be inkább. Ezt általában új kernel tesztelésére használjuk.
(tulajdonképpen a ``make zdisk
'' parancs automatikusan készít
ilyen betöltő lemezt a kernel forráskódjából).
A Linux rendszer működéséhez szükséges állományokat tartalmazó állományrendszer. Az ilyen lemez nem szükségszerűen tartalmaz kernelt, vagy indító betöltőt (boot loader).
Egy gyökér lemezt használhatunk más lemezen lévő rendszertől függetlenül, ha a kernel már betöltődött. A gyökérlemez gyakran automatikusan memórialemezre másolódik. Ez sokkal gyorsabbá teszi a gyökérlemez használatát, és felszabadítja a lemez meghajtót az eszközlemez számára.
Olyan lemez, ami a kernelt és a gyökér állományrendszert is tartalmazza. Más szavakkal, mindent tartalmaz, amire egy Linux rendszer merevlemez nélküli működéséhez szükség van. Ennek a lemeztípusnak a tömörsége az előnye -- minden szükséges dolgot egyetlen lemezen tartalmaz. Mindazonáltal mivel minden folyamatosan növekszik, egyre nehezebb mindent egy lemezre zsúfolni, még tömörítéssel is.
Olyan lemez, ami nem gyökérként beillesztendő állományrendszert tartalmaz, hanem kiegészítő adatokat. Egyéb eszközök szállítására használhatsz ilyen lemezt a gyökér lemezed kiegészítéseként, ha arra már nem fér más.
Általában amikor ``betöltőlemez készítéséről'' beszélünk, ezalatt egyaránt értjük a betöltő (kernel) és a gyökér (állományok) részek elkészítését. Ezek lehetnek együtt (egylemezes betöltő/gyökér lemez), vagy külön (betöltő+gyökér lemezek). A legrugalmasabb megoldás helyreállító lemezek esetén valószínűleg a különválasztott betöltő és gyökér lemezek használata, és egy vagy több eszköz lemez a többlet kezelésére.