Verr�ckte Anwendungen f�r Raid, /dev/ram, und ramfs

ArticleCategory:

Kernel Corner

AuthorImage:

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Mark Nielsen

en to de Katja Socher 

AboutTheAuthor:

Mark arbeitet als unabh�ngiger Consultant und spendet seine Zeit f�r Dinge wie GNUJobs.com, Artikel schreiben, Schreiben freier Software und Arbeiten als Freiwilliger bei eastmont.net.

Abstract:

RamFs ist ein sehr einfaches Dateisystem mit einigen interessanten Aspekten. Es ist neu im 2.4 Kernel.

ArticleIllustration:[This is the title picture for your article]

[illustration]

ArticleBody:

Einf�hrung in RamDisk

Die etwas �lter "ramdisk" genannte implementation einer Ram Disk unter Linux ist in meinem urspr�nglichen Artikel beschrieben. Er befindet sich hier: linuxfocus/English/November1999/article124.html Ich werde auf die alte Methode von ramdisk in diesem Artikel nicht detailliert eingehen.

Was ist eine RamDisk? Eine RamDisk ist ein Teil des Speichers, den man alloziert, um ihn als pseudo Plattenpartition zu benutzen. Oder, in anderen Worten, man nimmt ein bi�chen Speicher und tut so als sei es ist die Festplatte, die man formatieren, mounten, worauf man Dateien speichern kann etc..

Es gibt zwei Typen von Ram Disks, �ber die wir reden werden. Das erste ist eine Ram Disk, die man formatieren und mounten kann. Das zweite ist eine Ram Disk, die man nicht formatieren kann, die aber einige nette Features hat. Hier ist eine Auflistung:

Die /dev/ram1 Methode:

  1. SCHLECHT: Die Gr��e der ramdisk ist auf das boot-up fixiert.
  2. GUT: Man kann die ramdisk so wie man will formatieren.
  3. SCHLECHT: Einmal formatiert (ich glaube nicht, da� man sie mounten mu�) belegt es einen Teil deines Speichers und ich wei� nicht, wie man das wieder r�ckg�ngig machen kann.
  4. GUT: Man kann mehr als eine ramdisk zur selben Zeit haben.
Die neue ramdisk "ramfs":
  1. SCHLECHT: Man kann ramfs nicht formatieren, da es direkt auf der VFS (virtual file system) Ebene in Linux aufsetzt.
  2. GUT: Man kann mehr als eine haben.
  3. GUT: Man kann die maximale Gr��e auf der Kommandozeile ver�ndern.
  4. SEHR GUT: Es benutzt nur soviel Speicher, wie es ben�tigt. In anderen Worten, man hat vielleicht 64 megs ram allokiert, aber wenn es nur 2k an Dateien hat, benutzt es auch nur 2k des Speichers. Sobald eine Datei gel�scht ist, hat man sofort mehr Speicher f�r seinen Computer.
  5. SCHLECHT: Nun, es ist nicht wirklich ihre eigene Schuld. Versuche nicht zwei ramfs zu f�llen oder du bl�st deinen ganzen Speicher weg. Mehr dazu sp�ter.

Wie man RamDisk auf die alte Weise benutzt

Bitte lies diesen Artikel: Wie man eine Ramdisk unter Linux benutzt.

Um deinen Kernel 2.0 und 2.2 ramdisks zu benutzen, tippe einfach die drei Befehle:

mkfs -t ext2 /dev/ram1
mkdir -p /RAM1
mount /dev/ram1 /RAM1
als root und du bist fertig. Auf den meisten Systemen ist die Gr��e auf 4 megs begrenzt. Dies kann zur Bootzeit ver�ndert werden oder wenn du den Kernel rekompilierst, aber lies meinen alten Artikel hierf�r. Du kannst auch noch mehr hinzuf�gen wie dies,
mkfs -t ext2 /dev/ram2
mkdir -p /RAM2
mount /dev/ram2 /RAM2

Wie man RamDisk mit ramfs f�r Kernel 2.4 benutzt

Zuerst nehme ich an, da� du einen Kernel 2.4 laufen hast, der ramfs in sich kompiliert hat. Die meisten gr��eren Distributionen, die den neuen Kernel 2.4 benutzen, sollten ramfs darin kompiliert haben. Ich habe RedHat 7.1 f�r diesen Artikel benutzt.

Sehr einfach. Erstelle ein Verzeichnis und mounte ramfs dort.

mkdir -p /RAM1
mount -t ramfs none /RAM1
Wenn du eine zweite haben willst, sehr einfach. Erstelle ein Verzeichnis und mounte ramfs dort.
mkdir -p /RAM2
mount -t ramfs none /RAM2

Ver�ndern der Gr��e von ramdisks und andere Optionen.

Hier ist ein Beispiel, um eine 10 meg ramdisk zu erstellen.

mkdir -p /RAM1
mount -t ramfs none /RAM1 -o maxsize=10000
direkt �bernommen von: http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
+       ramfs - An automatically resizing memory based filesystem
+
+
+  Ramfs is a file system which keeps all files in RAM. It allows read
+  and write access. In contrast to RAM disks, which get allocated a
+  fixed amount of RAM, ramfs grows and shrinks to accommodate the
+  files it contains.
+
+  You can mount the ramfs with:
+      mount -t ramfs none /mnt/wherever
+
+  Then just create and use files. When the filesystem is unmounted, all
+  its contents are lost.
+
+  NOTE! This filesystem is probably most useful not as a real
+  filesystem, but as an example of how virtual filesystems can be
+  written.
+
+Resource limits:
+
+By default a ramfs will be limited to using half of (physical) memory
+for storing file contents, a bit over that when the metadata is
+included. The resource usage limits of ramfs can be controlled with
+the following mount options:
+
+       maxsize=NNN
+               Sets the maximum allowed memory usage of the
+filesystem to NNN kilobytes. This will be rounded down to a multiple
+of the page size. The default is half of physical memory. NB.  unlike
+most of the other limits, setting this to zero does *not* mean no
+limit, but will actually limit the size of the filesystem data to zero
+pages. There might be a use for this in some perverse situation.
+       
+       maxfilesize=NNN
+               Sets the maximum size of a single file on the
+filesystem to NNN kilobytes. This will be rounded down to a multiple
+of the page size. If NNN=0 there is no limit. The default is no limit.
+
+       maxdentries=NNN
+               Sets the maximum number of directory entries (hard
+links) on the filesystem to NNN. If NNN=0 there is no limit. By
+default this is set to maxsize/4.
+
+       maxinodes=NNN
+               Sets the maximum number of inodes (i.e. distinct
+files) on the filesystem to NNN. If NNN=0 there is no limit. The
+default is no limit (but there can never be more inodes than dentries).

Laufende Dienste in RamDisk

Ich habe einen Gedanken. Also h�re genau zu. W�re es nicht cool, wenn du deine Dienste (wie einen Webserver, einen Datenbankserver oder einen DNS Server) auf einer ramdisk laufen lassen k�nntest? Normalerweise hat ein Standardwebserver keine riesigen Dateien in sich. Normalerweise hat ein DNS Server nicht viele Dateien in sich. Du k�nntest sogar einen Datenbankserver in den Speicher stellen, wo du nur tempor�re Daten abspeichern mu�t.

Ram ist heutzutage billig. Ich bekam k�rzlich 128 megs ram f�r $120 und ich gehe davon aus, da� der Preis weiter fallen wird. F�r 128 megs ram kann ich sehr leicht jeden meiner Webserver in ihn stellen. Wenn mein Webserver riesige Daten hat, kann ich httpd.conf so konfigurieren, da� es in einem anderen Verzeichnis schaut, nicht in der ram disk. Mein DNSserver ist sehr klein. Mein gr��ter Datenbankserver hat nur 28 megs. In Anbetracht der Tatsache, da� man einen 1 gig memory computer heutzutage wirklich billig bekommt, denke ich, es w�re cool, alles, was ich habe, im ram laufen zu lassen. Der einzige trickreiche Teil mit dem Datenbankserver ist, da� du zuerst alle deine Eintr�ge in einem getrennten Datenbankserver speichern mu�t, bevor du sie in deinen Datenbankserver im ram schreibst. Dies ist langsam, aber wenn man bedenkt, da� man die meiste Zeit liest und nicht schreibt, sollte es die Performance erh�hen. Vielleicht, wenn wir eine ram disk auf eine Festplatte spiegeln k�nnten

Ich habe das schon in meinem anderen Artikel erkl�rt, deshalb lies es bitte hier: http://www.gnujobs.com/mark/articles/Ramdisk.html#Example. Ersetzt einfach nur diese Befehle

        ### Make the ramdisk partitions
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2

        ### Mount the ramdisks to their appropriate places

mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html

durch diese Befehle (erh�he die Anzahl, wenn 10 megs nicht ausreichend sind):
mount -t ramfs none /home/httpd/cgi-bin -o maxsize=10000
mount -t ramfs none /home/httpd/icons -o maxsize=10000
mount -t ramfs none /home/httpd/html -o maxsize=10000

Ramdisk und Raid

Warum sollte man eine Festplattenpartition und eine ram disk in einer raid partition kombinieren wollen? Ich wei� es nicht. Aber es gibt vielleicht eine Anwendung daf�r auf lange Sicht. Intelligente Betriebssysteme implementieren etwas nicht, nur weil es keinen sofortigen Nutzen hat. Dies ist der Grund, warum viele kommerzielle Betriebssysteme unpopul�r werden und warum freie Softwareapplikationen Applikationen, die von Idioten, die nur am Geld und nicht an der Technologie interessiert sind, ersetzen.

Es gibt drei Probleme beim Verbinden einer ramdisk mit einer Festplattenpartition.

  1. Ich wei� nicht, wie man es mit ramfs macht, aber ich kann es mit, /dev/ram machen. Vielleicht k�nnte man es machen, wenn man eine Festplattenpartition mit den Dateisystem ramfs Anwendungen formatieren k�nnte. Ich habe keine Idee, was die VFS Ebene ist, weshalb ich es mir sp�ter genauer ansehen werde.
  2. Wenn das gespiegelte Raidsystem wirklich parallel l�uft, dann hilft die zus�tzliche Gewschwindigkeit der Memory nichts. Ich wei� nicht, ob es m�glich ist, ein gespiegeltes Raidsystem dazuzubringen, nur von der ramdisk zu lesen. In diesem Fall, wenn das m�glich w�re, w�rde es einen Nutzen bringen.
  3. Bei einem reboot mu� man die ramdisk neu konstruieren.
Um das Raidsystem aufzusetzen, habe ich mein /etc/raidtab wie folgt konfiguriert.
  raiddev /dev/md3
          raid-level      1
          nr-raid-disks   2
          nr-spare-disks  0
          chunk-size     4
          persistent-superblock 1
          device          /dev/hdb6
          raid-disk       1
          device          /dev/ram3
          raid-disk       0
Dann habe ich das folgende ausgef�hrt
mkraid /dev/md3
mkfs -t ext2 /dev/md3
mkdir -p /RAID1
mount /dev/md3 /RAID1
Problem beim Reboot, die ramdisk ger�t durcheinander. Daher beim Reboot
raidstart /dev/md3
raidhotadd /dev/md3 /dev/ram3
mount /dev/md3 /RAID1
Erinnere dich jetzt, wenn du die alten ramdisks nicht rekonfigurierst, damit sie gr��er als 4 megs sind, ist es nutzlos f�r deine Festplattenpartition gr��er als 4 megs zu sein.

Es w�re wirklich cool, ein gespiegeltes Raidsystem mit 3 Partitionen zu haben. 1 davon die ramdisk und 2 davon Festplattenpartitionen und es auch so zu machen, da� die ramdisk nur f�r Lesezyklen gelesen wird. Ich wei� nicht, ob es m�glich ist, Lesezugriffe auf nur eine der Partitionen in einem Raidsystem zu isolieren, aber es w�re cool, wenn man das k�nnte.


Kommentare

Die ist wahrscheinlich der wichtigste Abschnitt in diesem Artikel. Ich liebe Linux, weil es dir erlaubt, dir selber in den Fu� zu schie�en. Es gibt nichts wie diesen Schmerz, denn er bringt dich zum Lernen.
  1. Per default belegt Ramfs die H�lfte deines physikalischen Speichers (kein swap space). Daher, wenn du 2 von diesen Dingen erstellst und sie f�llst, hat dein Computer nicht mehr gen�gend Speicher und setzt aus, so wie es meiner gemacht hat. BITTE spezifiziere den maximalen Betrag an Speicher, den die ramdisk haben sollte, wie oben beschrieben.
  2. Ich glaube, ramfs ist sein eigenen Dateisystem und nicht ext2, deshalb, wenn du dort Dateien hin- und herkopierst und rsync oder tar benutzt, erwarte nicht, da� die Dateien exakt identisch sind oder die gleiche Gr��e haben. Du wirst sehr wahrscheinlich keine gro�en Unterschiede beim Benutzen von ihnen finden, aber da es nicht ext2 ist, k�nnen die Eigenschaften auf einer bestimmten Ebene unterschiedlich sein.
  3. Ich habe die docs f�r ramfs im Kernel gelesen und es scheint nicht so zu sein, da� ramfs f�r den weiten Gebrauch vorgesehen war, aber ich verstehe nicht warum. Es hat so funktioniert, wie ich es wollte.
Ich bin mit ramdisks noch nicht fertig.
  1. Ich werde sehen, ob ich ramfs mit einer Festplatte raiden kann.
  2. Wenn ich es so machen kann, m�chte ich Lesezugriffe zu einem Raidsystem isoliert zu einer der Partitionen machen.
  3. Einen Dienst, wie einen Webserver in die ramdisk mit Raidsystem stellen. Der Trick hier ist, das Raidsystem so zu benutzen, da�, wenn �nderungen auftreten, man sie nicht verliert. Dies ist der Grund, warum das Raidsystem so schrecklich wichtig f�r mich ist ---- Ich werde in der Lage sein, Dienste SICHER in den Ram zu stellen und gewinne die gesamte Performancegeschwindigkeit �ber die Festplatte, angenommen:
  4. Aufsetzen eines Computers, um von cdrom zu booten, einen Dienst zu starten, �nderungen aus dem Netzwerk runterzuladen. Keine Festplatte erforderlich. Das w�re cool. Da k�nnte man einen Webserver (oder etwas anderes) auf einem Computer laufen haben ohne Festplatte und nur einer CDRom mit Speicher. Wenn du deinen Speicher auf 1 gig aufr�stest, sehe ich nicht, warum du dein System nicht v�llig aus einer Cd heraus laufen k�nnen lassen kannst. Dies w�re aus Sicherheitsgr�nden gut. Reboote einfach nur den Rechner, la� ihn irgendwelche �nderungen (Sicherheitsfixes) von einer sicheren Quelle laden, dann starte die Dienste und dein Computer ist nett und sauber und l�uft hackfrei. Der Webserver sollte niemals irgendetwas auf dem lokalen Computer speichern, au�er sicheren logs, und Informationen zu einem getrennten Computer �ber eine sichere Verbindung oder internes Netzwerk �bertragen. Ich habe in der Vergangenheit bootbare vernetzte CDRoms mit ramdisks gemacht. Es w�re nett, meine fr�heren Projekte miteinzubeziehen, um dies zu erreichen.

Quellen

  1. http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
  2. http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
  3. Beschleunigung kleiner Datenbanken unter Linux
  4. Wie man eine Ramdisk unter Linux benutzt
  5. Wenn sich dieser Artikel �ndert, ist er hier verf�gbar: http://www.gnujobs.com/Articles/21/Ramdisk2.html

Dank an Katja f�r einige Hilfe!

Copyright © 4/2001 Mark Nielsen
Article Version 1.3 : Date Last Changed Sat May 19 06:04:06 2001