|
A boot folyamat közelebbről
A Linux floppiról és merevlemezről is betölthető. Az ''Installation
and Getting Started'' könyv telepítésről szóló része
([Wel]) elmondja, hogyan telepítsük a Linuxot úgy,
hogy az általunk kívánt módon boot-oljon.
Amikor egy PC elindul, a BIOS különféle teszeteket végez annak
ellenőrzésére, hogy minden rendben van-e. (Ezt szokás power on
self test-nek vagy röviden POST-nak nevezni.) Ezután indul a
tényleges rendszerindítás. Először egy lemezmeghajtó kerül
kiválasztásra, az ebben levő lemez legelső szektorát, a boot
szektort olvassa be a rendszer. (Az, hogy mely lemezmeghajtókon,
illetve milyen sorrendben keresi a gép a megfelelő boot szektort, a
számítógép beállítása mondja meg, de tipikus, hogy először az első
floppimeghajtóval, majd az első merevlemezzel próbálkozik a BIOS.)
Merevlemezeknél mindezt pontosítnai kell: a master boot record
(MBR) kerül beolvasásra, ugyanis egy merevlemez több partíciót
is tartalmazhat, mindegyiken saját boot szektorral.
A boot szektor egy kis (egy szektorba elférő) programot tartalmaz,
melynek a feladata az aktuális operációs rendszer beolvasása és
elindítása. Amikor floppiról indítjuk a Linuxot, a boot szektor csak
egy olyan kódot tartalmaz, mely beolvassa az első pár száz blokkot (a
kernelmérettől függően) a memória egy előre meghatározott helyére. Egy
Linux boot floppin nincs fájlrendszer, a kernel egyszerűen egymást
követő szektorokban található, mivel ez egyszerűsíti a boot
folyamatát. Igaz, lehet fájlrendszerrel rendelkező floppiról is
boot-olni, pl. a LILO (LInux LOader) segítségével.
Amikor merevlemezről boot-olunk, a master boot record-beli (MBR) kód
megvizsgálja a partíciós táblát (az MBR-belit is), hogy azonosítsa az
aktív partíciót (azaz amelyik boot-olhatóvá lett téve), beolvassa
annak boot szektorát, és elindítja az itteni kódot. A partíció boot
szektorában található kód ugyanazt csinálja, mint egy floppi boot
szektora: beolvassa a kernelt és elindítja. A részletek ugyan egy kicsit
változatosak, mivel általában nem célszerű egy külön partíciót
fenntartani a kernel képmásának (kernel image), ezért a boot
szektorban található kód nem olvashatja egyszerűen sorban a lemez
blokkjait, hanem meg kell talalni azokat a blokkokat, ahova a
fájlrendszer lerakta a kernel képmását. Több megoldás is létezik erre
a problémára, de a szokásos a LILO használata. (A részletes tárgyalás
nem lényeges az itteni tárgyalás szempontjából. A LILO dokumentációja
részletes felvilágosítással szolgál.)
A LILO-val való boot során először általában az alapértelmezett kernel
töltődik be. A LILO beállítható úgy is, hogy több operációs rendszer,
vagy egy operációs rendszer több kernelje közt választást biztosítson,
és azt töltse be a rendszerindításkor. Beállítható úgy is, hogy
induláskor ha valaki lenyomja a alt, shift, vagy
ctrl billentyűk egyikét, akkor ne az alapértelmezett módon
boot-oljon, hanem a felhasználó választása szerint. Alternatív módon,
a LILO úgy is beállítható, hogy mindig kérdezzen, de egy megadott
várakozás után, ha nem történt kernel választás, magától töltse be az
alapértelmezett rendszert.
A LILO lehetővé teszi egy kernel parancsssori argumentum
megadását a kernel vagy operációs rendszer neve után.
Megjegyzendő, hogy léteznek más boot loader programok is, mint a
LILO. (Pl. a loadlin.) Egy későbbi változatban lesz ezekről
szó.
A floppiról illetve merevlemezről való rendszerindításnak egyaránt
vannak előnyei és hátrányai, de a merevlemezről való boot-olás
többnyire kellemesebb, mert ekkor egyrészt nem kell a floppi
lemezekkel babrálni, és gyorsabb is. Igaz az is, hogy több
hibalehetőséget rejt a merevlemezről való boot-olás, ezért sokan
eleinte floppiról indítják a rendszert, majd amikor a rendszer már
kipróbáltan jól működik, akkor telepítik a LILO-t a merevlemezről való
boot-oláshoz.
Miután a LInux kernel bekerült a memóriába valamilyen értelemben, és
valóban elindult, körülbelül a következők történnek:
- A Linux kernel a lemezen tömörítve van, ezért először kicsomagolja
önmagát. A kernel képmás eleje egy kis programot tartalmaz e célból.
Ha olyan SVGA kártyád van, melyet a Linux felismer, és annak vannak
speciális szöveges módjai (mint pl. 100 oszlop, 40 sor), a Linux
megkérdezi melyik módban akarod használni. A kernelfordítás közben,
vagy az után az rdev parancs segítségével a video mód előre
beállítható a kernelnek, és az ilyen kernel nem kérdez rá az
üzemmódra.
- Ezután a kernel ellenőrzi, milyen hardver elemek (merevlemezek, floppi
meghajtók, hálózati kártyák, stb.) léteznek a gépben, és megpróbálja
ezek eszközmeghajtóit megfelelően konfigurálni. A hardverelemek
megtalálásáról üzenetet is ad. Pl. amikor az én gépem boot-ol,
ilyesmi látszik.
LILO boot:
Loading linux.
Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lp_init: lp1 exists (0), using polling driver
Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback device init
Warning WD8013 board not found at i/o = 280.
Math coprocessor using irq13 error reporting.
Partition check:
hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem).
Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20
A pontos szöveg természetesen más lesz más rendszerek esetén, annak
függvényében, hogy milyen hardverelemek vannak a gépben, a kernel
hányas változatát használjuk, és az hogy van konfigurálva.
- Ezután a kernel csatlakoztatja (mount) a gyökér fájlrendszert. Ennek
helye fordítási időben is megmondható, vagy később az rdev
parancs segítségével, esetleg a LILO-val. A fájlrendszer típusát
automatikus felismeri a rendszer. Ha a gyökér fájlrendszer
csatlakoztatása nem sikerül, mert pl. elfelejtetted a megfelelő
fájlrendszert belefordítani a kernelbe, a kernel ''pánikba esik'', és
megállítja a rendszert. (Ilyenkor már nincs mit tenni.)
A gyökér fájlrendszer általában csak olvasható (read-only) módban
csatlakozik először (ez is beállítható), ami lehetővé teszi az
ellenőrzését a csatlakoztatás közben. (A lemezekről szóló részben
írtak szerint nem szabad írható fájlrendszert ellenőrizni.)
Ezután a kernel elindítja az init programot (amelynek teljes
elérési útja: /sbin/init ) a háttérben. (Értelemszeríen az
init processzazonosítója mindenképpen 1 lesz.) Az init
különféle indító tennivalókat végez el, melyek pontos listája
konfigurációfüggő. (Lásd a 7. fejezetet.) Az biztos, hogy
legalább néhány démon elindul ekkor a háttérben.
Az init ezután többfelhasználós üzemmódba kapcsol, és elindítja
a getty programot a virtuális konzolokra és a soros vonalakra,
így lehetővé teszi a bejelentkezést a felhasználók számára. Az init
elindíthat még más programokat is a konfigurációjától függően.
- Ezzel a rendszerindítás kész van, és a rendszer normálisan fut tovább.
*main::open_tags*main::open_tags*main::open_tags |