Az initrd az "initial ramdisk" (kezdeti RAM-lemez) rövidítése. Egy RAM-lemezen elegendő fájl fér el a szükséges eszközmeghajtók tárolásához. Ezek a meghajtók kellenek ahhoz, hogy a rendszermag fel tudja csatolni a / könyvtárat, és el tudja indítani az init-et. Az initrd-t tipikusan a hardver átmeneti "beindítására" használjuk, ezután a valódi rendszermag (vmlinuz) folytatja a betöltési folyamatot. Például, ha a rendszermag nem tudja olvasni az scsi merevlemezt az scsi eszközmeghajtó betöltése előtt. (Megoldás: tölts be egy initrd rendszermagot, amely majd betölti az igazi rendszermagot és használd az initrd-t az scsi betöltési problémájának megoldására.)
Megszabadulhatsz az "initrd.img" fájltól és nem szükséges akkor, ha az SCSI eszközvezérlőket fixen a rendszermagba fordítod, nem pedig modulba rakod. (Sokan ajánlják ezt).
Az mkinitrd segédprogram készíti el az initrd fájlt, egyetlen paranccsal. Ez a parancs a RedHat jellegzetessége. A Linux többi terjesztéseinél hasonló parancsok létezhetnek. Nagyon kényelmes program.
Olvasd el az mkinitrd kézikönyv oldalát.
/sbin/mkinitrd --help # vagy egyszerűen: "mkinitrd --help" usage: mkinitrd [--version] [-v] [-f] [--preload <module>] [--omit-scsi-modules] [--omit-raid-modules] [--omit-lvm-modules] [--with=<module>] [--image-version] [--fstab=<fstab>] [--nocompress] [--builtin=<module>] [--nopivot] <initrd-image> <kernel-version> (example: mkinitrd /boot/initrd-2.2.5-15.img 2.2.5-15) # olvasd el a kezikonyv oldalt ..... man mkinitrd su - root # Az alábbi parancs elkészíti az initrd fájlt mkinitrd ./initrd-2.4.18-19.8.0custom.img 2.4.18-19.8.0custom ls -l initrd-2.4.18-19.8.0custom.img -rw-r--r-- 1 root root 127314 Mar 19 21:54 initrd-2.4.18-19.8.0custom.img cp ./initrd-2.4.18-19.8.0custom.img /boot |
A következő fejezetekben olvashatsz arról, hogyan kell kézzel elkészíteni az initrd fájlt.
A /boot/initrd.img elkészítéséről szól az /usr/src/linux/Documentation/initrd.txt leírás, valamint a Loopback-Root-mini-HOWTO .
Egy részlet a "http://www.linuxman.com.cy/rute/node1.html" 31.7. fejezetéből.
Az SCSI telepítésének buktatói és az initrd
A következő leírás némelyike nehezen lesz érthető anélkül, hogy tudnál valamit a rendszermag-modulokról, amiket a 42. fejezetben mutat be. Később térj vissza erre a fejezetre.
Képzeljünk el egy rendszert, amiben egyetlen IDE lemez sincs, csak egy SCSI lemez tartalmazza a telepített Linuxot. Vannak az SCSI lemezt olvasó BIOS megszakítások, ugyanúgy, mint az IDE-hez, tehát a LILO vígan hozzá tud férni egy SCSI partíción lévő rendszermaghoz. Azonban a rendszermag "el fog veszni" a rendszermag-modulok nélkül [lásd 42. fejezet. A rendszermag magától nem tudja az összes létező hardver elemet támogatni. Ez általában egy fő részre (a rendszermag fájlra, amit ebben a fejezetben tárgyalunk) és modulok százaira (betölthető részek, amik a /lib/modules alatt találhatók) tagolható szét [ amik támogatják a sokféle típusú SCSI, hálózati, hangeszközt stb. ], amely képes vezérelni azt a bizonyos SCSI meghajtót. Így bár a rendszermag be tud töltődni és el tud indulni, de nem tudja felcsatolni a gyökér fájlrendszert az SCSI modul előzetes betöltése nélkül. Viszont a modul maga a gyökér fájlrendszeren foglal helyet a /lib/modules-ban. Ez egy trükkös helyzet, és kétféle módon lehet megoldani: (a) vagy előre engedélyezett (preenabled) SCSI támogatású rendszermagot, vagy (b) egy initrd előzetes gyökér fájlrendszernek nevezett fájlt használunk.
Az első módszert ajánlom. Magától értetődő (bár időigényes) folyamat egy olyan rendszermag elkészítése, ami beépített támogatást nyújt az SCSI kártyádhoz (és nem egy külön modulban). A beépített SCSI és hálózati meghajtók legtöbbször automatikus detektálást is végeznek, lehetővé téve az eszközhöz való időközbeni hozzáférést - mindenféle kapcsoló megadása nélkül működnek. [lsqb ] A 42. fejezet tárgyalja.] és ami még fontosabb, anélkül, hogy olvasnod kéne a beállításukról. Ennek befordított hardvertámogatás a neve (a modulos támogatással szemben). Az így készült rendszermag a modul méretével lesz nagyobb. A 42. fejezet taglalja az ilyen fajta programfordítást.
A második módszer gyorsabb, de trükkösebb. A Linux támogat egy olyan dolgot, amit initrd (initial RAM disk) néven ismernek. Ez egy kicsi, +1.5 MB méretű fájlrendszer, amit a LILO tölt be, és a rendszermag a valódi gyökér fájlrendszer helyett csatol fel. A rendszermag RAM-lemezként csatolja fel ezt a fájlrendszert, végrehajtja a /linuxrc fájlt, majd felcsatolja a valódi fájlrendszert.
31.6 fejezet initrd fájl készítése
Kezdjük egy kis fájlrendszer elkészítésével. Készíts egy könyvtárat [nbsp ]/initrd néven és másold át a következő fájlokat oda:
drwxr-xr-x 7 root root 1024 Sep 14 20:12 initrd/ drwxr-xr-x 2 root root 1024 Sep 14 20:12 initrd/bin/ -rwxr-xr-x 1 root root 436328 Sep 14 20:12 initrd/bin/insmod -rwxr-xr-x 1 root root 424680 Sep 14 20:12 initrd/bin/sash drwxr-xr-x 2 root root 1024 Sep 14 20:12 initrd/dev/ crw-r--r-- 1 root root 5, 1 Sep 14 20:12 initrd/dev/console crw-r--r-- 1 root root 1, 3 Sep 14 20:12 initrd/dev/null brw-r--r-- 1 root root 1, 1 Sep 14 20:12 initrd/dev/ram crw-r--r-- 1 root root 4, 0 Sep 14 20:12 initrd/dev/systty crw-r--r-- 1 root root 4, 1 Sep 14 20:12 initrd/dev/tty1 crw-r--r-- 1 root root 4, 1 Sep 14 20:12 initrd/dev/tty2 crw-r--r-- 1 root root 4, 1 Sep 14 20:12 initrd/dev/tty3 crw-r--r-- 1 root root 4, 1 Sep 14 20:12 initrd/dev/tty4 drwxr-xr-x 2 root root 1024 Sep 14 20:12 initrd/etc/ drwxr-xr-x 2 root root 1024 Sep 14 20:12 initrd/lib/ -rwxr-xr-x 1 root root 76 Sep 14 20:12 initrd/linuxrc drwxr-xr-x 2 root root 1024 Sep 14 20:12 initrd/loopfs/ |
Az én rendszeremen, a initrd/bin/insmod fájl statikusan linkelt [ami azt jelenti, hogy nem igényel megosztott könyvtárakat ], a /sbin/insmod.static fájlból - ez a modutils-2.3.13 csomag része. Az initrd/bin/sash egy statikusan linkelt parancsértelmező a sash-3.4 csomagból. Az insmod-ot újra is fordíthatod forrásból, ha nincs statikus verziód. Esetleg másold be a szükséges DLL-eket a /lib-ből az initrd/lib könyvtárba. (A szükséges DLL-ek listáját megkapod, ha az "ldd /sbin/insmod" parancsot kiadod. Ne felejtsd el átmásolni a szimbolikus linkeket sem, valamint futtatni a "strip -s {lib}" parancsot, a DLL-ek méretének csökkentéséhez.
Most másold át az initrd/lib/ könyvtárba a szükséges SCSI modulokat. Például, ha egy Adaptec AIC-7850 SCSI adaptered van, akkor az aic7xxx.o modul kell a /lib/modules/{version}/scsi/aic7xxx.o fájlokból. Ezek után rakd be ezt a initrd/lib/ könyvtárba.
-rw-r--r-- 1 root root 129448 Sep 27 1999 initrd/lib/aic7xxx.o |
Az initrd/linuxrc fájlnak egy szkriptet kell tartalmaznia, hogy betöltse az összes modult a rendszermag számára, hogy hozzáférhessen az SCSI partícióhoz. Ebben az esetben, csak az aic7xxx modul kell [ az insmod az eszköz IRQ-ira és IO-címeire vonatkozó paramétereket is megkaphat, lásd a 42. fejezetet.]:
#!/bin/sash aliasall echo "Loading aic7xxx module" insmod /lib/aic7xxx.o |
Alaposan ellenőrizd az összes jogosultságot, majd futtasd a chroot parancsot a fájlrendszer teszteléséhez.
chroot ~/initrd /bin/sash /linuxrc |
Ezután készíts egy "fájlrendszer-fájlt" (file system image), hasonlóan a 19.9 fejezetben leírtakhoz:
dd if=/dev/zero of=~/file-inird count=2500 bs=1024 losetup /dev/loop0 ~/file-inird mke2fs /dev/loop0 mkdir ~/mnt mount /dev/loop0 ~/mnt cp -a initrd/* ~/mnt/ umount ~/mnt losetup -d /dev/loop0 |
Végül tömörítsd össze a fájlrendszert a gzip programmal, valamilyen néven:
gzip -c ~/file-inird > initrd-<kernel-version> |
31.7 fejezet A lilo.conf módosítása az initrd használatához
A lilo.conf fájlt annak megfelelően kell megváltoztatni, hogy az initrd fájlrendszert töltse be. Egyszerűen add hozzá az initrd kapcsolót. Például:
boot=/dev/sda prompt timeout = 50 compact vga = extended linear image = /boot/vmlinuz-2.2.17 initrd = /boot/initrd-2.2.17 label = linux root = /dev/sda1 read-only |
Figyeld meg a "linear" kapcsoló használatát. Ez egy BIOS trükk, amiről a lilo(5) kézikönyv oldalán olvashatsz. Ez gyakran szükséges, viszont azt eredményezheti, hogy az SCSI lemezek nem lesznek átvihetők különböző BIOS-al rendelkező gépekre (azt jelenti, hogy újra le kell futtatni a lilo-t, ha egy másik gépbe rakod át a lemezt).
Előző | Tartalomjegyzék | Következő |
Eme dokumentum más formátumai | "B" függelék - lilo.conf mintafájl |