Als eerste zal ik een aantal van de algemene grondbeginselen beschrijven die worden gebruikt bij het instellen van een loopback filesystem als het root-device.
Een loopback device onder Linux is een virtueel device dat net als ieder ander media-device kan worden gebruikt.
Voorbeelden van gewone media-devices zijn harddisk-partities zoals
/dev/hda1
, /dev/hda2
, /dev/sda1
, of gehele
disks zoals het diskettestation
/dev/fd0
enz. Het zijn allen devices die kunnen worden gebruikt om
bestanden en directory-structuren te bevatten. Ze kunnen met het benodigde
bestandssysteem (ext2fs, msdos, ntfs enz.) worden geformatteerd en
vervolgens worden gemount.
Het loopback filesystem associeert een bestand op een ander bestandssysteem
als een compleet device. Dit kan dan net als enig ander device worden
geformatteerd en gemount. Om dit te kunnen doen wordt het device genaamd
/dev/loop0
, /dev/loop1
, enz. geassocieerd met het bestand
en vervolgens wordt dit nieuwe virtuele device gemount.
Onder Linux is ook een ander type virtueel device gemount als bestandssysteem mogelijk, dit is het ramdisk device.
In dit geval refereert het device niet naar fysieke hardware, maar naar een deel van het geheugen dat voor dit doel is gereserveerd. Het in beslag genomen geheugen wordt nooit naar disk geswapt, maar blijft in de diskcache.
Een ramdisk kan ten alle tijden worden aangemaakt door naar het ramdisk-device
/dev/ram0
of /dev/ram1
enz. te schrijven. Dit kan vervolgens
op dezelfde manier worden geformatteerd en gemount als het loopback-device.
Wanneer een ramdisk wordt gebruikt om vanaf te booten (zoals vaak op Linux-installatiedisks of rescue-disks wordt gedaan), dan kan het disk-image (de gehele inhoud van de disk als een enkel bestand) op de bootdisk in gecomprimeerde vorm worden opgeslagen. Dit wordt automatisch door de kernel herkend wanneer het boot en het wordt voordat het wordt gemount naar ramdisk gedecomprimeerd.
Het initiële ramdisk device is onder Linux een ander belangrijk mechanisme dat we nodig hebben om een loopback-device als een root-bestandssysteem te kunnen gebruiken.
Wanneer de initiële ramdisk wordt gebruikt, wordt het bestandssysteem
image naar het geheugen kopieerd en gemount zodat de bestanden erop kunnen
worden benaderd. Een programma op deze ramdisk (genaamd
/linuxrc
) wordt uitgevoerd en wanneer het daarmee klaar is, wordt een
ander device als het root-bestandssysteem gemount.
De oude ramdisk is echter nog steeds aanwezig en is gemount op de directory
/initrd
als dat er is of beschikbaar via het device
/dev/initrd
.
Dit is ongebruikelijk gedrag aangezien de normale bootreeks vanaf de toegewezen root-partitie boot en het blijft draaien. Met de initiële ramdisk-optie is het mogelijk dat de root-partitie kan wijzigen voordat de hoofd-bootreeks is gestart.
Het root-bestandssysteem is het device dat als eerste wordt gemount zodat
het na het booten verschijnt als de directory genaamd /
.
Er zijn een aantal complicaties met het root-bestandssysteem die te wijten
zijn aan het feit dat het alle bestanden bevat.
Bij het booten worden de rc
scripts uitgevoerd, dit zijn óf
de bestanden in /etc/rc.d
of /etc/rc?.d
afhankelijk van
de versie van het programma /etc/init
.
Wanneer het systeem is geboot, is het niet mogelijk de root-partitie te unmounten of wijzigen, aangezien alle programma's het in zekere mate zullen gebruiken. Daarom is de initiële ramdisk zo nuttig, omdat het zo kan worden gebruikt dat de uiteindelijke root-partitie niet dezelfde is als die tijdens het booten wordt geladen.
Om te laten zien hoe de initiële ramdisk in de bootreeks opereert, is de volgorde van gebeurtenissen hieronder weergegeven.
LILO
of LOADLIN
. Je ziet de melding
Loading...
als dit gebeurt.LILO
of LOADLIN
uitgevoerd.
Je ziet de melding Loading...
als dit gebeurt./linuxrc
wordt op de initiële ramdisk
uitgevoerd./etc/init
wordt uitgevoerd wat de
gebruikersconfigurabele bootreeks uit zal voeren.Dit is slechts een vereenvoudigde versie van wat er plaatsvindt, maar het is voldoende om uit te leggen hoe de kernel opstart en waar de initiële ramdisk wordt gebruikt.