Ramdisk

xGhost

OpenBSD Freack
Tach bzw. Abend oder Morgen ^^

Ich wollte mehr ueber ramdisks wissen,
also bin ich den lieben langen tag googlen gegangen.

Ich habe einiges herausgefunden. Aber auf zwei meiner fragen
fand ich keine antwort...

Kann mir jemand ein paar tipps geben?

1 Frage:

Ich fand diesen Code schnipzel (Quelle bsdforen)
Code:
rdroot|ramdiskroot|RAM-disk root FS image:\
        :ty=ramdisk:se#512:nt#2:ns#128:nc#16:\
        :pa#3510:oa#0:ta=4.2BSD:ba#4096:fa#512:\
        :pb#0:ob#0:tb=swap:\
        :pc#3510:oc#0:
zwar sollte dies so abgeaendert werden. Aber was genau hat man dann mehr?

2 Frage

Wie gross kann man so eine ramdisk machen?
Gibt es moeglichkeiten noch groesser zu machen,
was sollte man beachten...?


Danke fuer Tipps... und trics...
Ghost (Bins SO nicht an einem internet anschluss... also kann erst abend antwort geben)
 
Green_Ghost schrieb:
1 Frage:

Ich fand diesen Code schnipzel (Quelle bsdforen)
Code:
rdroot|ramdiskroot|RAM-disk root FS image:\
        :ty=ramdisk:se#512:nt#2:ns#128:nc#16:\
        :pa#3510:oa#0:ta=4.2BSD:ba#4096:fa#512:\
        :pb#0:ob#0:tb=swap:\
        :pc#3510:oc#0:
zwar sollte dies so abgeaendert werden. Aber was genau hat man dann mehr?

also pa und pc sind die größen für die a- bzw. c-parition in SEKTOREN. ein sektor ist 512 bytes groß (se 512), macht also ca. 1,7 mb; siehe man disktab. die max. anzahl an allokierbaren sektoren beträgt in diesem beispiel 16*128*2=4096, also 2 mb (nt*ns*nc).

Green_Ghost schrieb:
2 Frage

Wie gross kann man so eine ramdisk machen?
Gibt es moeglichkeiten noch groesser zu machen,
was sollte man beachten...?

also theoretisch sollte man eine ramdisk bis auf eine größe von 16 mb bekommen. meine erfahrung ist, daß die ramdisk+kernelgröße 14 mb nicht übersteigen sollte, sonst kann kein isadma-mapping mehr gemacht werden -> du könntest dann z.b. keine floppy mehr benutzen. die max. größe, die ich mit einem ramdisk-kernel hinbekommen habe, ist 11mb, also 22528 sektoren. bitte beachte: hier geht es um die in-kernel ramdisk, die z.b. für den install-kernel angelegt wird. wenn du einfach nur mal memory für eine ramdisk allokieren willst, geht das mit mount -t mfs oder mount_mfs, wobei du dort auch die größe in sektoren angibst. siehe man mount_mfs.
 
Code:
rdroot|ramdiskroot|RAM-disk root FS image:\
        :ty=ramdisk:se#512:nt#2:ns#128:nc#16:\
        :pa#3510:oa#0:ta=4.2BSD:ba#4096:fa#512:\
        :pb#0:ob#0:tb=swap:\
        :pc#3510:oc#0:


Also muss ich bei pc/pb den wert 22528 eintragen.
bei ns/nc/nt muss ich dann so berechnen, das es etwas mehr
als 22528 gibt...?


Wenn die werte fuer 11 MB noch hast, kannst du mir sie posten?
zur kontrolle.... Danke.
Aber nur wenn du sie noch hast...


Pascal
 
hallo pascal,

Green_Ghost schrieb:
Also muss ich bei pc/pb den wert 22528 eintragen.
bei ns/nc/nt muss ich dann so berechnen, das es etwas mehr
als 22528 gibt...?
nein, es kommt darauf an, daß das produkt stimmt. du könntest natürlich auch c größer machen, a kleiner und dafür zum beispiel noch eine slice d anlegen.

die korrekten werte wären z.b.:
Code:
rdroot11|ramdiskroot|RAM-disk root FS image:\
        :ty=ramdisk:se#512:nt#1:ns#22:nc#1024:\
        :pa#22528:oa#0:ta=4.2BSD:ba#4096:fa#512:\
        :pb#0:ob#0:tb=swap:\
        :pc#22528:oc#0:
Green_Ghost schrieb:
Wenn die werte fuer 11 MB noch hast, kannst du mir sie posten?
zur kontrolle.... Danke.
Aber nur wenn du sie noch hast...
Pascal
du kannst auch folgendes machen. ein gespeichertes label (PROTOFILE)...
Code:
# /dev/rsvnd0c:
type: vnd
disk: rdroot11
label: RAMDISK
flags:
bytes/sector: 512
sectors/track: 22
tracks/cylinder: 1
sectors/cylinder: 22
cylinders: 1024
total sectors: 22528
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

2 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  a:    22528        0    4.2BSD     1024  4096    24   # (Cyl.    0 - 1023)
  c:    22528        0    unused        0     0         # (Cyl.    0 - 1023)
...nehmen und auf die ramdisk anwenden. das ginge z.b. folgendermaßen:
Code:
1. ramdisk anlegen:
dd if=/dev/zero of=RAMDISK11 bs=512 count=22528
2. ramdisk als virtuelles device konfigurieren:
vnconfig -cv vnd0 RAMDISK11]
3. disklabel auf die RAMDISK11 anwenden:
disklabel -Rnrv vnd0 PROTOFILE
4. Filesystem anlegen:
newfs -m 0 -o space /dev/rsvnd0a
folgende optionen bräuchtest du dann noch im kernel:
Code:
option RAMDISK_HOOKS
option MINIROOTSIZE=22528

...und wenn du die root in die ramdisk legen willst:

config bsd root on rd0a swap on rd0b and wd0b and sd0b
diese ramdisk mußt du dann noch mit rdsetroot in den kernel "pusten"

lg uwe
 
hmm....

:confused:
eine frage.
Wie Kann ich dies nun auf ne Bootbare cd brennen?
mkisofs sagt immer:
Code:
mkisofs -U -R -b dbsd01.fs -o image.iso boot-cd/
Warning: creating filesystem that does not conform to ISO-9660.
Size of boot image is 22528 sectors -> mkisofs: Error - boot image 'boot-cd/dbsd01.fs' has not an allowable size.

Kennt jemand dieses Problem, und kann mir mit der loesung helfen?


Danke,
Pascal

/// Edit ///
Das dbsd01.fs ist 11mb, aber das wissen wohl alle :)
 
Ich hab glaube ich die loesung...
Fehler im Make ^^

Is noch am compilieren...
mal schauen

/////////////////////////////////////////////

Es ging.

Ich hab leider noch ein panic im kernel.
Ich poste mal die files, und wenn wer lust hat kann er
es ja mal anschauen. synchron baue ich selbst noch dran rum.

Den Anhang im /usr/src/distrib/i386 entpacken.
dann nach #cd /usr/src/distrib/i386/boot-cd/
und # make
Nach der installation ist es das obj/dbsd01.fs

Wer den Bugg finden, kann seinen namen in die credis schreiben lassen.
die anderen, die mir geholfen haben, werde ich auch in die credis schreiben,
wenn sie wollen. Als Dank ^^

Pascal

/// EDIT 2 ///

panic: init died ( ....0,....1)

/// EDIT 3 ///
er hat bei booten noch was wegen wskdb mux 1 und einer konsole geschwafelt.
...
 

Anhänge

Zuletzt bearbeitet:
hallo pascal,

du hast sozusagen ein floppy filesystem angelegt, was dafür gedacht ist, auf eine floppy kopiert zu werden oder als bootimage für eine cdrominstallation zu nehmen. allerdings überschreitet die größe ein wenig die mögliche von 2.88 mb.. ;-)

das einfachste ist, wenn du die ramdisk direkt in den kernel pustest und dann cd-iso nach el-torito anlegst.

dazu machst du einfach folgendes:

1. nimm deinen kernel und puste deine ramdisk rein:
Code:
/usr/src/distrib/common/rdsetroot $KERNEL < $IMAGE
das $IMAGE ist aber nicht dein floppy-fs (dbsd01.fs), sondern das filesystem, welches durch das Makefile angelegt wird und wo die binaries drin liegen (gucke mal nach $REALIMAGE im Makefile und kommentiere die Teile aus, die 'vnconfig -u' und ein 'rm' da drauf machen), $KERNEL ist dein kernel, also wahrscheinlich bsd.

2. lege eine directorystruktur für das cdiso an:
Code:
mkdir -p /tmp/ISO/3.7/i386
cp /usr/mdec/cdbr /tmp/ISO/3.7/i386
cp /usr/mdec/cdboot /tmp/ISO/3.7/i386
cp $KERNEL /tmp/ISO

3. erzeuge ein cd-iso:
Code:
mkhybrid -a -R -T -L -l -d -D -N -o /tmp/cd.iso -v -v -b 3.7/i386/cdbr -c boot.catalog /tmp/ISO

dein image liegt dann unter /tmp/cd.iso

mit welchen configfile für den kernel hast du gestartet?

good luck!

lg uwe
 
Zuletzt bearbeitet:
gut, danke.

Jetzt kommt nur noch ein
panic: bad dir
(und sowas wie) bad "/"

ist wohl meine ramdisk image, welches ich in den kernel lade nicht gut.
wohl heute abend noch etwas mit dem spielen.

kann das sein, dass wenn ich das image mit rdsetroot in den kernel pusche,
das kernel file nicht grösser wird...?

mit /etc/boot.conf kann man dann wohl noch die feineinstellungen machen.

/// edit ///
rdsetroot bsd < mr.fd (rootdisk)
das mr.fd ist bei mir weder gemounted noch noch mit vnconf geladen.
das ist richtig so?


gruss,
Pascal
 
Green_Ghost schrieb:
gut, danke.
kann das sein, dass wenn ich das image mit rdsetroot in den kernel pusche,
das kernel file nicht grösser wird...?
nein, denn der kernel hat ja vorher schon die entsprechende größe und damit den entsprechenden platz reserviert.
mit /etc/boot.conf kann man dann wohl noch die feineinstellungen machen.
welche feineinstellungen meinst du? siehe man boot.conf.
/// edit ///
rdsetroot bsd < mr.fd (rootdisk)
das mr.fd ist bei mir weder gemounted noch noch mit vnconf geladen.
das ist richtig so?
ja, weil das script/makefile das erzeugt, mountet, unmountet und in den kernel bläst und dann löscht. siehe makefile:
im makefile unter /usr/src/distrib/i386/common/Makefile.inc steht z.b.
Code:
rd_setup: ${CBIN}
        dd if=/dev/zero of=${REALIMAGE} bs=512 count=${NBLKS}
        vnconfig -v -c ${VND} ${REALIMAGE}
        disklabel -w -r ${VND} ${DISKTYPE}
        newfs ${NEWFSARGS} ${VND_RDEV}
        fsck ${VND_RDEV}
        mount ${VND_DEV} ${MOUNT_POINT}
damit wird das image erzeugt, als svnd0a gemounted, das filesystem erzeugt...
Code:
do_files:
        mtree -def ${MTREE} -p ${MOUNT_POINT}/ -u
        TOPDIR=${TOP} CURDIR=${.CURDIR} OBJDIR=${.OBJDIR} \
            REV=${REV} TARGDIR=${MOUNT_POINT} UTILS=${UTILS} \
            sh ${UTILS}/runlist.sh ${LISTS}
        rm ${MOUNT_POINT}/${CBIN}
das erzeugt die directories und setzt die links auf das crunched binary instbin (guck mal in das script runlist.sh bzw. makeconf.awk unter /usr/src/distrib/miniroot/)
Code:
rd_teardown:
        @df -i ${MOUNT_POINT}
        -umount ${MOUNT_POINT}
        -vnconfig -u ${VND}
        cp ${REALIMAGE} ${IMAGE}
        rm ${REALIMAGE}
das unmounted das image und verschiebt es nach ${IMAGE}, welches dann in den kernel geblasen wird. damit das gemounted bleibt, brauchst du in dieser section nur -umount ${MOUNT_POINT} und -vnconfig -u ${VND} mal auskommentieren.

lg uwe
 
Das ist schon klar...

Aber aus irgend einem grund gibt es bei mir ein panic: bad dir[\b]

Ich glaube langsam, das mein crunch ned gut funct...
Ich mach mir mal eines von hand...
Oder ich muss wohl mal meine list ueberpruefen.
Ich hab gemerkt, das er mit dem Termcap probleme hat.

Ich hab mir jetzt einen neuen kernel gemacht, und
der lauft gut. mit dem alten hatte ich das panic: init died.
aber das bad dir panic fehler auf kernel ebene ist ich, glaube ich ned.


Gruss und Dank,
Pascal
 
Die Meldung:

Code:
rootdev=0x1100 rrootdev=0x2f00 rawdev=0x2f02
First bad
/: bad dir ino 2 at offset 0: mangled entry
panic: bad dir

ich enttar mal die src neu, dann lade ich nur den Kernel rein,
und nimm die rd groesse vor. Danach versuche ich es nochmals.

wer weiss, wie viel ich veraendert habe :rolleyes:


Pascal
 
Ich hatte recht.

ich hab mir mein cruch verpeilt.
er bekommt immerhin eine neue meldung XD

Code:
warning: /dev/console error 20
exec       /sbin/init
exec       /sbin/oinit
exec       /sbin/init.back
init: not found
panic: no init

soviel ich weiss, ist console error 20, dass er nur /dev/ sieht.

mal schauen... vl. liegt es jetzt am termcap...


Pascal
 
Durch das viele Spielen (in der Nacht)
Hab ich mir den crunch verhauen.

Jetzt hab ich mir die src neu entpackt, und dann ist es gegangen.
2) hab ich den Kernel nochmals neu "geschrieben"

geht jetzt super ^^


Pascal
 
Zurück
Oben