Verrückte Anwendungen für Raid, /dev/ram, und ramfs
ArticleCategory:
Kernel Corner
AuthorImage:
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