Aanmaken van de Initiële Ramdisk DeviceDe initiële ramdisk wordt het eenvoudigst van het begin aangemaakt als een loopback-device. Je zal dit als root moeten doen. De commando's die je hiervoor uit zal moeten voeren, staan hieronder. Er wordt vanuit gegaan dat ze vanuit de home-directory van root (/root) worden opgestart.mkdir /root/initrd dd if=/dev/zero of=initrd.img bs=1k count=1024 mke2fs -i 1024 -b 1024 -m 5 -F -v initrd.img mount initrd.img /root/initrd -t ext2 -o loop cd initrd [maak de bestanden aan] cd .. umount /root/initrd gzip -c -9 initrd.img > initrdgz.imgHier zijn een aantal stappen voor, en die kunnen als volgt worden beschreven. Maak een mountpoint voor de initiële ramdisk (een lege directory).Maak een leeg bestand van de benodigde grootte aan. Hier heb ik 1024kB gebruikt, mogelijk heb je afhankelijk van de inhoud meer of minder nodig (de grootte is de laatste parameter).Maak in het lege bestand een ext2 bestandssysteem aan.Mount het bestand op het mountpoint, dit gebruikt het loopback-device.Ga naar het gemounte loopback-device.Maak de benodigde bestanden aan (zie hieronder voor details).Ga uit het gemounte loopback-device.Unmount het device.Maak een comprimeerde versie voor later gebruik.Inhoud Van De Initiële RamdiskDe bestanden die je op de ramdisk nodig zult hebben, zijn de minimum vereisten om commando's uit te kunnen voeren./linuxrc Het script dat wordt uitgevoerd om het msdos bestandssysteem uit te voeren (zie hieronder)./lib/* De dynamische linker en library's voor de programma's./etc/* De cache die door de dynamische linker wordt gebruikt (niet echt nodig, maar maakt dat het stopt foutmeldingen te produceren)./bin/* Een shell-interpreter (ash omdat het kleiner is dan bash. De mount en losetup programma's voor het afhandelen van de DOS-disk en het instellen van de loopback-devices./dev/* De devices die zullen worden gebruikt. Je hebt /dev/zero voor ld-linux.so nodig, /dev/hda* om de msdos-disk te mounten en /dev/loop* voor het loopback device./mntEen lege directory om de msdos-disk op te mounten.De initiële ramdisk die ik gebruikte, vind je hieronder. De inhoud kwam uit op 800kB waarbij de overhead van het bestandssysteem is inbegrepen.total 18 drwxr-xr-x 2 root root 1024 Jun 2 13:57 bin drwxr-xr-x 2 root root 1024 Jun 2 13:47 dev drwxr-xr-x 2 root root 1024 May 20 07:43 etc drwxr-xr-x 2 root root 1024 May 27 07:57 lib -rwxr-xr-x 1 root root 964 Jun 3 08:47 linuxrc drwxr-xr-x 2 root root 12288 May 27 08:08 lost+found drwxr-xr-x 2 root root 1024 Jun 2 14:16 mnt ./bin: total 168 -rwxr-xr-x 1 root root 60880 May 27 07:56 ash -rwxr-xr-x 1 root root 5484 May 27 07:56 losetup -rwsr-xr-x 1 root root 28216 May 27 07:56 mount lrwxrwxrwx 1 root root 3 May 27 08:08 sh -> ash ./dev: total 0 brw-r--r-- 1 root root 3, 0 May 20 07:43 hda brw-r--r-- 1 root root 3, 1 May 20 07:43 hda1 brw-r--r-- 1 root root 3, 2 Jun 2 13:46 hda2 brw-r--r-- 1 root root 3, 3 Jun 2 13:46 hda3 brw-r--r-- 1 root root 7, 0 May 20 07:43 loop0 brw-r--r-- 1 root root 7, 1 Jun 2 13:47 loop1 crw-r--r-- 1 root root 1, 3 May 20 07:42 null crw-r--r-- 1 root root 5, 0 May 20 07:43 tty crw-r--r-- 1 root root 4, 1 May 20 07:43 tty1 crw-r--r-- 1 root root 1, 5 May 20 07:42 zero ./etc: total 3 -rw-r--r-- 1 root root 2539 May 20 07:43 ld.so.cache ./lib: total 649 lrwxrwxrwx 1 root root 18 May 27 08:08 ld-linux.so.1 -> ld-linux.so.1.7.14 -rwxr-xr-x 1 root root 21367 May 20 07:44 ld-linux.so.1.7.14 lrwxrwxrwx 1 root root 14 May 27 08:08 libc.so.5 -> libc.so.5.3.12 -rwxr-xr-x 1 root root 583795 May 20 07:44 libc.so.5.3.12 ./lost+found: total 0 ./mnt: total 0De enige complexe stappen hierbij zijn de devices in dev. Gebruik het programma mknod om ze aan te maken, gebruik de bestaande devices in /dev als een template voor het verkrijgen van de benodigde parameters.Het bestand /linuxrcHet bestand /linuxrc op de initiële ramdisk is nodig voor alle voorbereidingen zodat het loopback-device voor de root-partitie kan worden gebruikt als 't beëindigt.Het voorbeeld hieronder probeert /dev/hda1 als een msdos-partitie te mounten en als het daarin slaagt stelt het de bestanden /linux/linuxdsk.img als /dev/loop0 en /linux/linuxswp.img als /dev/loop1 in.#!/bin/sh echo INITRD: Probeer /dev/hda1 als msdos te mounten if /bin/mount -n -t msdos /dev/hda1 /mnt; then echo INITRD: Mount OK /bin/losetup /dev/loop0 /mnt/linux/linuxdsk.img /bin/losetup /dev/loop1 /mnt/linux/linuxswp.img exit 0 else echo INITRD: Mount mislukt exit 1 fiHet eerste device /dev/loop0 zal het root-device worden en het tweede /dev/loop1 device de swap-space.Als je waneer je klaar bent als niet-root gebruiker naar de DOS-partitie wilt kunnen schrijven, dan kun je in plaats daarvan gebruik maken van mount -n -t msdos /dev/hda1 /mnt -o uid=0,gid=0,umask=000,quiet. Hiermee zal alle toegang tot de DOS-partitie naar root worden ingedeeld en zullen de permissies dienovereenkomstig worden ingesteld.