Wie man eine Ramdisk unter Linux benutzt

ArticleCategory: [Choose a category for your article]

Applications

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Mark Nielsen 

en to de Christian Leber 

AboutTheAuthor:[A small biography about the author]

Der Autor (Hier ist seine Homepage) arbeitet für The Computer Underground, Inc. als Linux-Profi, freut sich über alberne Dinge und denkt sich sinnlose Projekte aus. Warum? Weil Computer Spaß machen sollen. Mark arbeitet außerdem für ZING, www.genericbooks.com as freiwilliger Mitarbeiter um freie software und freie Literatur zu unterstützen.

Abstract:[Here you write a little summary]

Dieser Artikel zeigt wie man RAM als virtuelle Festplatte benutzen kann.

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

[Illustration]

ArticleBody:[The article body]

Einführung zum Thema RamDisk

Dieser kurze Artikel beschreibt, wie man eine RamDisk auf einem RedHat 6.0 System einrichtet. Bei anderen Linux Distributionen sollte es sich sehr ähnlich verhalten.

Was ist eine RamDisk? Eine RamDisk ist ein Speicherabschnitt den man so zuweist, dass er wie eine Festplattenpartition verwendet werden kann. Oder in anderen Worten, man nimmt Speicher und täuscht vor, dass es eine Festplatte sei und speichert seine Dateien drauf. Warum sollte man eine RamDisk benutzen wollen? Gut, also es gibt einige Dateien die ständig benutzt werden, wenn man diese Dateien in den Speicher steckt, dann steigt die Performance des Computers, da der Speicher schneller als die Festplatte ist. Dinge wie Web-Server mit vielen Daten koennen auf diese Weise beschleunigt werden. Man kann auch, wenn man des Wahnsinns ist, und einen PIII 550 Mhz Computer mit 1 GB Speicher so wie einer alten 500 MB Festplatte hat, den Festplattenplatz ganz einfach auf diese Weise vergroeßern. Wenn man eine komplett festplattenlose Machine hat, scheint diese Idee nicht mehr ganz so verrückt.

Hier sind eine paar zusätzliche Resourcen die hilfreich sein könnten:

  1. http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html
  2. http://metalab.unc.edu/LDP/HOWTO/mini/LILO.html
  3. /usr/src/linux/Documentation/ramdisk.txt

Wie benutzt man eine RamDisk ?

Also, es ist sehr einfach eine RamDisk zu benutzen. Zunächst kommt die Standardinstallation von RedHat 6.0 schon mit RamDisk Unterstützung. Alles was man machen muss ist eine RamDisk zu formatieren und an einem Verzeichnis zu mounten. Um alle RamDisks die zur Verfügung stehen, zu sehen tippt man "ls -al /dev/ram*". Dies zeigt die voreingestellten RamDisks, die zu Verfügung stehen an. Diese RamDisks benutzen nichtmal Speicher bis man sie auf irgendeine Weise benutzt (also, wenn man sie zB. formatiert). Jetzt folgt ein sehr einfaches Beispiel, welches zeigt wie man eine RamDisk benutzt:
# Einen Verzeichnis zum mounten der RamDisk erstellen:
mkdir /tmp/ramdisk0
# Ein Dateisystem erstellen:
mke2fs /dev/ram0
# Die RamDisk mounten:
mount /dev/ram0 /tmp/ramdisk0
Diese drei Kommandos erstellen ein Verzeichnis für die RamDisk, formatieren die RamDisk (ein Dateisystem erstellen) und mounten die Ramdisk in das Verzeichnis "/tmp/ramdisk0". Jetzt kann man das Verzeichnis so benutzen als sei es auf einer normalen Partition!
Wenn das formatieren der RamDisk schief geht, dann fehlt dem Kernel wahrscheinlich die Unterstützung für RamDisks. (d.h. sie ist weder fest im Kernel noch als Modul vorhanden, oder nicht geladen) Die Konfiguartionsoption für RamDisks sind: CONFIG_BLK_DEV_RAM .

Die voreingestellte Grösse der RamDisk liegt bei 4 MB, also 4096 Blöcke. Man sah welche RamDisk-Grösse man erhält, während man mke2fs laufen lies. mke2fs /dev/ram0 sollte eine Meldung erzeugt haben, die ungefähr so aussieht:

mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Linux ext2 filesystem format
Filesystem label=
1024 inodes, 4096 blocks
204 blocks (4.98%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group
df -k /dev/ram0 sagt einem wieviel Speicher man davon wirklich benutzen kann: (das Dateisystem braucht schließlich auch Platz)
>df -k /dev/ram0
Filesystem  1k-blocks  Used Available Use% Mounted on
/dev/ram0        3963    13      3746   0% /tmp/ramdisk0

Also wo ist der Harken bei der Sache? Wenn der Computer neu gestartet wird, dann ist die RamDisk natürlich leer. Also sollte man dort keine Daten lagern, die man nicht woanders hat. Wenn man Änderungen an dem Verzeichnis macht und die Änderungen behalten muss, dan muss man eine Möglichkeit finden um ein Backup von ihnen zu machen.  

Das ändern der Grösse einer RamDisk

Um eine RamDisk zu benutzen muss man entweder den RamDisk Support in den Kernel kompiliert haben oder man muss ihn als Modul kopilieren. Die Kernel Konfigurationsoption istCONFIG_BLK_DEV_RAM . Den RamDisk Support als Modul zu compiliern hat den Vorteil, dass man zu Laufzeit entscheiden kann wie gross die RamDisk sein soll.

Also zunächst der komplizierte Weg. Man fügt diese Zeile der lilo.conf hinzu:
   ramdisk_size=10000 (or ramdisk=10000 for old kernels)
Damit wird, nachdem man "lilo" eingegeben hat und neu gestartet hat, eine Standardramdisk mit einer Grösse von 10 MB erstellt.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
	label=linux
	root=/dev/hda2
	read-only
	ramdisk_size=10000
Letztendlich, bekommt man etwas über 9 MB benutzbarer Speicherplatz, da das Dateisystem auch etwas Platz in Anspruch nimmt.

Wenn man den Ramdisk Support als Modul kompiliert, dann kann man zur Laufzeit entscheiden wie groß die Ramdisk sein soll. Dies macht man entweder mit einer Zeile in der /etc/conf.modules:

options rd rd_size=10000
oder einem Parameter für insmod:
insmod rd rd_size=10000
Das folgende Beispiel zeigt wie man das Modul benutzt:
  1. Die Ramdisk unmounten, welche im vorherigen Kapitel gemountet wurde: umount /tmp/ramdisk0 .
  2. Das Modul entladen (es war im vorherigen Kapitel automatisch geladen worden): rmmod rd
  3. Das Ramdisk Modul laden und die Grösse auf 20 MB setzen: insmod rd rd_size=20000
  4. Ein Dateisystem erstellen: mke2fs /dev/ram0
  5. Die Ramdisk mounten: mount /dev/ram0 /tmp/ramdisk0

Ein Beispiel wie man eine RamDisk für einen Webserver benutzt

Ok, also jetzt folgt ein Beispiel wie man 3 Ramdisks für einen Webserver benutzt Wenn man sich zu 99% sicher ist, dass ihre Standardinstallation von Apache unter RedHat 6.0 nicht mehr als 9 MB für die CGI-Skripte, die HTML Dateien und die Bilder braucht, dann wird ihnen im folgenden vorgeführt wie man so eine Lösung installiert.
Das erste was man machen muss, ist die richtigen Verzeichnisse des Webservers an einer andere Stelle zu kopieren. Ausserdem sollte man die Verzeichnisse zum mounten der Ramdisks erstellen.
mv /home/httpd/ /home/httpd_real
mkdir /home/httpd
mkdir /home/httpd/cgi-bin
mkdir /home/httpd/html
mkdir /home/httpd/icons
Dann sollte man die Folgenden Kommandos zu dem Skript der den httpd startet hinzufügen (also zB: /etc/rc.d/init.d/httpd.init) :

	### Erstelle der Dateisysteme auf den Ramdisks
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2

	### Die Ramdisks an einem geeigneten Platz in den
	### Verzeichnisbaum einhängen

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

	### Die "richtigen" Verzeichnisse (die Ramdisks verlieren ihre Daten
	### schliesslich bei einem Reboot) auf die Ramdisks kopieren
tar -C /home/httpd_real -c . | tar -C /home/httpd -x

	### Danach kann man den web-server neu starten.

Ergänzungen

  1. Man muss sich eine Sache unbedingt merken, ein Backup der Daten ist wichtig, wenn man sie verändert und diese Veränderungen braucht. Wenn der Computer neu startet, dann sind alle Änderungen verloren.
    Hierfür könnte man Cron benutzen, also einen Skript das alle 10 Minuten überprüft ob und welche Dateien geändert wurden und diese dann sichert. Eine andere Möglichkeit wäre es die Änderungen am richtigen Verzeichnis vorzunehmen und dann die Änderungen zur Ramdisk kopieren, dies wäre viel sicherer.
  2. Eine gute Möglichkeit eine Ramdisk zu nutzen wäre es einen Computer mit 1 GB Ram zu besitzen und dann 256 MB davon für "/tmp" zu benutzen. Wenn man viele Prozesse laufen hat die "/tmp" benutzen sollte dies helfen das System zu beschleunigen. Weiterhin würde bei einem Reboot alles in /tmp verloren gehen, was eine gute Sache sein kann.
  3. Linux benutzt quasi den ganzen Speicher der nicht von Programmen benutzt wird als einen einzigen Cache, aber meine Erfahrung ist, dass man durch Ramdisks trotzdem einen Geschwindigkeitsvorteil bekommt.