Problem mit Ramdisk

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
za0
Beiträge: 816
Registriert: 09.07.2005 00:14:18
Wohnort: das 4. Reich der GEZ

Problem mit Ramdisk

Beitrag von za0 » 12.07.2008 18:10:50

Hi,

ich habe 8GB RAM, davon sollen jetzt 5GB als RAMDISK genutzt werden. Ich verwende Ubuntu 8.04 mit Kernel 2.6.xyz 64-Bit .

Ich bin wie folgt vorgegangen:

Kernelparameter hinzugefügt:

Code: Alles auswählen

ramdisk_size=5000000
Dann nach dem Reboot:

Code: Alles auswählen

 mke2fs /dev/ram0
mke2fs 1.40.8 (13-Mar-2008)
Dateisystem-Label=
OS-Typ: Linux
Blockgröße=4096 (log=2)
Fragmentgröße=4096 (log=2)
313248 Inodes, 1250000 Blöcke
62500 Blöcke (5.00%) reserviert für den Superuser
Erster Datenblock=0
Maximale Dateisystem-Blöcke=1283457024
39 Blockgruppen
32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
8032 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Schreibe Inode-Tabellen: erledigt                            
Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt

Das Dateisystem wird automatisch alle 36 Mounts bzw. alle 180 Tage überprüft,
je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t .
Anschliessend das Mounten:

Code: Alles auswählen

mount -t ext2 /dev/ram0 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/ram0,
       missing codepage or helper program, or other error
       Manchmal liefert das Syslog wertvolle Informationen – versuchen
       Sie  dmesg | tail  oder so

Dmesg sagt:

Code: Alles auswählen

[  371.499460] EXT2-fs: Magic mismatch, very weird !
[  934.356055] VFS: Can't find an ext2 filesystem on dev ram0.
Aber: Überprüfe ich die RAMDISK mit fdisk, so wird ausgegeben:

Code: Alles auswählen

fdisk /dev/ram0
Hinweis: Die Sektorgröße ist 1024 (nicht 512)
Das Gerät enthält weder eine gültige DOS-Partitionstabelle,
noch einen „Sun“, „SGI“ oder „OSF disklabel“
Building a new DOS disklabel with disk identifier 0xbb6acecc.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warnung: Schreiben wird ungültiges Flag 0x0000 in Part.-tabelle 4 korrigieren

Befehl (m für Hilfe): p

Platte /dev/ram0: 5120 MByte, 5120000000 Byte
255 Köpfe, 63 Sektoren/Spuren, 311 Zylinder
Einheiten = Zylinder von 16065 × 1024 = 16450560 Bytes
Disk identifier: 0xbb6acecc

     Gerät  boot.     Anfang        Ende     Blöcke   Id  System

Befehl (m für Hilfe):

Die Ramdisk ist also da. Die Größe stimmt auch.

Was mache ich falsch?

Danke.
PS: Dasselbe Problem habe ich auch, wenn die RAMDISK etwas kleiner ausfällt: 1GB. Weitere Größen habe ich nicht ausprobiert.

EDIT:

Code: Alles auswählen

fdisk /dev/ram0
Hinweis: Die Sektorgröße ist 1024 (nicht 512)
Das Gerät enthält weder eine gültige DOS-Partitionstabelle,
noch einen „Sun“, „SGI“ oder „OSF disklabel“
Building a new DOS disklabel with disk identifier 0xaf7be20a.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warnung: Schreiben wird ungültiges Flag 0x0000 in Part.-tabelle 4 korrigieren

Befehl (m für Hilfe): n
Befehl  Aktion
   e      Erweiterte
   p      Primäre Partition (1-4)
p
Partitionsnummer (1-4): 1
Erster Zylinder (1-311, Vorgabe: 1): 
Benutze den Standardwert 1
Letzter Zylinder oder +Größe, +GrößeK oder +GrößeM (1-311, Vorgabe: 311): 
Benutze den Standardwert 311

Befehl (m für Hilfe): p

Platte /dev/ram0: 5120 MByte, 5120000000 Byte
255 Köpfe, 63 Sektoren/Spuren, 311 Zylinder
Einheiten = Zylinder von 16065 × 1024 = 16450560 Bytes
Disk identifier: 0xaf7be20a

     Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/ram0p1               1         311     4996152   83  Linux

Befehl (m für Hilfe): w!
Die Partitionstabelle wurde verändert!

Rufe ioctl() um Partitionstabelle neu einzulesen.

WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 22: Invalid argument.
Der Kernel benutzt noch die alte Tabelle.
Die neue Tabelle wird beim nächsten Neustart verwendet.
Synchronisiere Platten.

Viele Grüße
za0


Nieder mit der Pauschal-Abzocke der GEZ! :twisted:

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Problem mit Ramdisk

Beitrag von cosmac » 12.07.2008 21:44:14

hi,

leicht OT: nimm halt einfach tmpfs, ein Beispiel ist /lib/init/rw
Beware of programmers who carry screwdrivers.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Problem mit Ramdisk

Beitrag von gms » 12.07.2008 21:46:26

Hi,
also partitionieren mußt du die Ramdisk sicherlich nicht, aber den Grund warum das Mounten nicht funktioniert, sehe ich auch nicht wirklich.
probier einmal ob du mit "dd if=/dev/zero bs=1024 of=/dev/ram0" auch wirklich die 5000000k schreiben kannst.

Andere Frage: Wäre Ramfs bzw tmpfs nicht eine bessere Alternative für dich ? Bei der Ramdisk gehen alle Lese und Schreiboperationen über den Page-Cache, die Ramdisk "nimmt" daher eigentlich mehr Platz in Anspruch als nötig wäre. Außerdem braucht die Ramdisk einen Filesystem-Treiber, der auch noch zusätzlich Overhead erzeugt. Diese Nachteile hättest du mit Ramfs nicht.
RamFs hat allerdings den Nachteil, daß es von der Größe nicht limitiert werden kann und daher auch entsprechende Vorsicht geboten ist, wenn auf diese geschrieben werden soll ( z.B nur root erlauben). TmpFs hat diesen Nachteil nicht, allerdings kann TmpFs dafür in den Swap ausgelagert werden, was auch nicht immer erwünscht ist.

Gruß
gms

Benutzeravatar
za0
Beiträge: 816
Registriert: 09.07.2005 00:14:18
Wohnort: das 4. Reich der GEZ

Re: Problem mit Ramdisk

Beitrag von za0 » 12.07.2008 22:44:40

Hi,

ich habe ramfs ausprobiert - es funktioniert. (mount -t ramfs /dev/ram0 /mnt)

Danke Euch beiden.

Schreiben funktioniert auch:

Code: Alles auswählen

 dd if=/dev/zero bs=1024 of=/dev/ram0
dd: Schreiben von „/dev/ram0“: No space left on device
5000001+0 Datensätze ein
5000000+0 Datensätze aus
5120000000 Bytes (5,1 GB) kopiert, 8,22663 s, 622 MB/s
GMS, soll das etwa heißen, dass mit RAMFS gemountete RAMDISKs trotz Limit der RAMDISK im Kernel über das Limit hinaus geschrieben werden können? Oder habe ich etwas missverstanden?
Zuletzt geändert von za0 am 12.07.2008 23:24:55, insgesamt 2-mal geändert.

Viele Grüße
za0


Nieder mit der Pauschal-Abzocke der GEZ! :twisted:

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Problem mit Ramdisk

Beitrag von gms » 12.07.2008 22:54:35

za0 hat geschrieben:GMS, soll das etwa heißen, dass mit RAMFS gemountete RAMDISKs trotz Limit der RAMDISK im Kernel über das Limit hinaus geschrieben werden können? Oder habe ich etwas missverstanden?
dieses Limit zieht nur bei den alten, auf Blockdevices beruhenden Ramdisks, Ramfs braucht aber kein Blockdevice. Hier könntest du also in der Tat dieses Filesystem solange auffüllen, bis alles was geswapt werden kann, ausgelagert wurde ( das Ramfs kann nicht ausgelagert werden ) und dem System kein Speicher mehr zur Verfügung steht.
Bei Tmpfs könntest du eine Mountoption,z.B "size=5g" mitgeben.

Antworten