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.