Verr�ckte Anwendungen f�r Raid, /dev/ram, und ramfs
ArticleCategory:
Kernel Corner
AuthorImage:
![[Photo of the Author]](../../common/images/Mark-Nielsen.jpg)
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]
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:
- 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