| 
 ![[Photo of the Author]](../../common/images/Mark-Nielsen.jpg)  von  Mark     Nielsen
 
 Über den Autor:
 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.
 Inhalt:
 | 
 
Verrückte Anwendungen für Raid, /dev/ram, und ramfs
 ![[illustration]](../../common/images/illustration210.jpg) 
Zusammenfassung:
RamFs ist ein sehr einfaches Dateisystem mit einigen interessanten
    Aspekten. Es ist neu im 2.4 Kernel.
    
     
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:
    
      - SCHLECHT: Die Größe der ramdisk ist auf das boot-up fixiert.
- GUT: Man kann die ramdisk so wie man will formatieren.
- 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.
- GUT: Man kann mehr als eine ramdisk zur selben Zeit haben.
Die neue ramdisk "ramfs":
      - SCHLECHT: Man kann ramfs nicht formatieren, da es direkt auf
der VFS (virtual file system) Ebene in Linux aufsetzt.
- GUT: Man kann mehr als eine haben.
- GUT: Man kann die maximale Größe auf der Kommandozeile verändern.
- 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.
- 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.
    
      - 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.
- 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.
- 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.
    
      - 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.
- 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.
- 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.
      - Ich werde sehen, ob ich ramfs mit einer Festplatte raiden kann.
- Wenn ich es so machen kann, möchte ich Lesezugriffe zu einem Raidsystem isoliert
      zu einer der Partitionen machen.
- 
        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:
        
          - daß ich das Raidsystem dazu bekomme, Lesezugriffe nur von der
	  ramdisk Partiton und nicht von den anderen aus zu machen.
- Lesedateien von einer Festplatte im Speicher gecacht sind. Nur
	  wenn sie sich ändern oder nicht mehr gecacht sind, wirst du den
	  Geschwindigkeitsunterschied bemerken. Auch der anfängliche
	  Startup ist beim ersten Lesen der Datei schneller.
- Man könnte den eingebauten Webserver benutzen,der in dem neuen
	  Kernel dabei ist. Sie sollten auch wirklich wirklich schnell gehen.
	  Vielleicht Verbinden des eingebauten Webservers mit einer ramdisk?
 
- 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
    
      - 
      http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
- http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
- Beschleunigung kleiner
      Datenbanken unter Linux
- Wie man eine Ramdisk
      unter Linux benutzt
- 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
  
 
Talkback für diesen Artikel
Jeder Artikel hat seine eigene Seite für Kommentare und Rückmeldungen. Auf dieser Seite kann jeder eigene Kommentare abgeben und die Kommentare anderer Leser sehen:
2001-06-27, generated by lfparser version 2.16