Verder Terug Inhoud

2. Grondbeginselen van Loopback Devices en Ramdisks

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.

2.1 Loopback Devices

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.

2.2 Ramdisk Devices

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.

2.3 Het Initiële Ramdisk Device

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.

2.4 Het Root Bestandssysteem

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.

2.5 De Linux Boot Reeks

Om te laten zien hoe de initiële ramdisk in de bootreeks opereert, is de volgorde van gebeurtenissen hieronder weergegeven.

  1. De kernel wordt in het geheugen geladen, dit wordt bewerkstelligd door LILO of LOADLIN. Je ziet de melding Loading... als dit gebeurt.
  2. De ramdisk-image wordt in het geheugen geladen, weer wordt dit door LILO of LOADLIN uitgevoerd. Je ziet de melding Loading... als dit gebeurt.
  3. De kernel wordt genitialiseerd, inclusief de ontleding van de commandoregel-opties en het instellen van de ramdisk als het root-device.
  4. Het programma /linuxrc wordt op de initiële ramdisk uitgevoerd.
  5. Het root-device wordt gewijzigd zoals gespecificeerd in de kernelparameter.
  6. Het init-programma /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.


Verder Terug Inhoud