Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Als RAM-Disk wird ein virtuelles Laufwerk bezeichnet, welches aus einem Teil des im System befindlichen Arbeitsspeichers (RAM) besteht. Dabei wird statisch oder auch dynamisch Speicherplatz im RAM belegt, mit einem Dateisystem formatiert und schließlich eingehängt. Der abgezweigte Speicherplatz steht dem System logischerweise nicht mehr zur Verfügung.
Wenn eine SSD zum Einsatz kommt, sind weitere Hinweise im Artikel SSD/Auslagerung zu finden.
Zu bedenken ist, dass RAM bekanntlich zu den flüchtigen Speichermedien zählt und somit die sich auf der RAM-Disk befindlichen Dateien, ebenso wie der restliche RAM-Inhalt, bei Unterbrechung der Stromzufuhr verschwinden. Daher sollten auf der RAM-Disk keine wichtigen Daten abgelegt werden, sofern nicht die unterbrechungsfreie Stromversorgung des Computers gewährleistet ist. Weiterhin sollten vor dem Ausschalten des Computers evtl. noch benötigte Dateien gesichert werden (z.B. automatisiert per Skript).
Der Arbeitsspeicher ist hinsichtlich der Lese- und Schreibvorgänge wesentlich schneller, und weniger von Verschleiß betroffen als konventionelle Festplatten und erst recht als Flash-Speicher. Ein Paradebeispiel ist hier der Betrieb eines "RAM-Servers", der Dank der schnelleren Zugriffe besonders geschwind anfragende Clients bedienen kann. Die schnelleren Reaktionszeiten nützen natürlich nichts, wenn der Flaschenhals gar nicht von einem langsamen Speichermedium ausgeht, sondern z.B. von einer ausgelasteten CPU oder einer langsamen Netzwerkverbindung. Dies sollte also festgestellt werden, bevor man sich die Mühe macht.
Eine RAM-Disk kann auch ein Weg sein, das Löschproblem unter journalisierenden Dateisystemen wie ext3 oder 4 zu umgehen. Prekäre Dateien werden also nicht auf die mit ext3/4 formatierte Festplatte kopiert, sondern in das nicht-journalisierende Dateisystem der ohnehin vergänglichen RAM-Disk. In diesem Szenario muss natürlich darauf geachtet werden, dass die Dateien nicht versehentlich doch auf die Festplatte gelangen, z.B. weil das System swapt oder die Dateien mit einem Programm geöffnet werden, welches auf der Festplatte ungefragt zwischenspeichert oder Sicherungen anlegt.
Die Verwendung vom tmpfs ist ein sehr einfacher Weg zur Erstellung einer RAM-Disk.
Das tmpfs-Dateisystem ist kein reines RAM-Dateisystem, sondern schreibt Daten in den Festplatten-Swap, sobald der Speicherplatz im RAM knapp wird. Diese Eigenschaft könnte eventuell die oben genannten Vorteile zunichte machen.
Die folgenden Befehle [1][4] richten eine RAM-Disk ein:
Standardeinstellung (max. 50% des Arbeitsspeichers):
sudo mount -t tmpfs none /PFAD/ZUM/EINHÄNGEPUNKT
Relativ (20% des Arbeitsspeichers):
sudo mount -t tmpfs -o size=20% none /PFAD/ZUM/EINHÄNGEPUNKT
Absolut (200 MiB):
sudo mount -t tmpfs -o size=200M none /PFAD/ZUM/EINHÄNGEPUNKT
erstellen ohne weiteren Aufwand eine direkt nutzbare RAM-Disk. Dabei werden dynamisch immer so viele Ressourcen abgezweigt, wie gerade benötigt werden. Ist das Laufwerk also leer, belegt es auch keinen Platz im RAM. Es ist möglich, diese Partition standardmäßig beim Systemstart einzubinden, wenn man dauerhaften Zugriff darauf haben möchte. Hierzu muss man lediglich eine Zeile in die /etc/fstab einfügen [2]. Diese kann zum Beispiel so aussehen:
tmpfs /media/ramdisk tmpfs defaults,size=20% 0 0
Hierzu muss natürlich das Verzeichnis /media/ramdisk/ zuvor erstellt und ihm Rechte [3] zugewiesen werden:
sudo mkdir /media/ramdisk sudo chmod 777 /media/ramdisk
Jetzt sollte die Platte beim Systemstart automatisch eingebunden werden. Manuell [4] erfolgt dies mit dem Befehl:
sudo mount tmpfs
Anstatt /media/ramdisk kann auch ein beliebiger anderer Ort eingefügt werden, an dem die Partition eingebunden werden soll. Die Option size=X%
legt den maximal abgezweigten Anteil des RAMs fest, den man belegen darf und kann individuell angepasst werden. Anstatt Prozent kann man auch eine absolute Zahl angeben (z.B. size=50m
). Man sollte bedenken, nicht zu viel RAM freizugeben, da man ansonsten Gefahr läuft, ein System sehr stark auszubremsen (und zu viel auf die SWAP-Partition ausgelagert werden muss).
Die Vorgehensweise entspricht der bei der Formatierung einer Festplatte, mit dem einzigen Unterschied, dass als Ziel ein Bereich des RAMs ausgewählt wird. Man öffnet zunächst ein Terminal [1]. Mit dem Befehl
sudo mke2fs -m 0 /dev/ram0
bewirkt man, dass der Teil des RAMs, der vom System mit ram0 angesprochen wird, mit dem ext2-Dateisystem formatiert wird. Die Option -m 0
stellt sicher, dass auf der Partition kein Speicherplatz für den Root-Benutzer reserviert wird, was ansonsten unnötig Platz kosten würde. Zu beachten ist, dass der erstellte Teil damit effektiv den Systemressourcen entzogen wird, der verfügbare Arbeitsspeicher also, solange die Partition besteht, kleiner wird.
Als Ergebnis existiert jetzt eine beschreibbare Partition im RAM, die ganz normal eingebunden [4] werden kann:
sudo mount /dev/ram0 /PFAD/ZUM/EINHÄNGEPUNKT
Also beispielsweise:
sudo mkdir /media/ramdisk sudo mount /dev/ram0 /media/ramdisk
erstellt werden. Falls die RAM-Disk zwar korrekt eingebunden wird, aber nicht gelesen/geschrieben werden kann, sollte man überprüfen, ob man die erforderlichen Berechtigungen [3] hat. Diese müssen gegebenenfalls mit
sudo chown BENUTZERNAME /media/ramdisk sudo chmod u+rwx /media/ramdisk
erteilt werden. Damit sollte man eine funktionierende RAM-Disk erstellt haben.
Mit
dmesg | grep RAMDISK
kann man sich die momentane Größe der so erstellten RAM-Disk ausgeben lassen. Ist diese unpassend, kann diese mit der Option GRUB_CMDLINE_LINUX=ramdisk_size=x
des Boot-Managers GRUB_2 bzw. in der Datei /etc/default/grub angepasst werden.
Falls noch der Vorgänger GRUB verwendet wird, erfolgt der Eintrag in der Datei menu.lst (in der Zeile kernel ...
).
Da die RAM-Disk bei jedem Neustart verschwindet, ist es unter Umständen praktisch, ein Skript für die obigen Befehle zu erstellen, was einem die Arbeit abnimmt, alles jedes mal von Neuem eintippen zu müssen.
Hierzu wird zunächst mit einem Editor [2] eine Datei erstellt und folgender Inhalt eingefügt:
#!/bin/sh sudo mke2fs /dev/ram0 sudo mount /dev/ram0 /media/ramdisk sudo chown BENUTZERNAME /media/ramdisk sudo chmod u+rwx /media/ramdisk
Dann speichert man die Datei ab und gibt ihr noch Ausführrechte [3]. Beim Ausführen dieses Skriptes wird nun automatisch eine RAM-Disk erstellt und benutzbar gemacht. Das Erstellen der RAM-Disk kann über einen Eintrag in der Datei /etc/rc.local automatisiert werden.
Das ramfs-Dateisystem unterscheidet sich vom tmpfs-Dateisystem vor allem dadurch, dass es keine Daten in den Swap auslagert, also ein reines RAM-Dateisystem ist. Die Vorgehensweise ist hier noch simpler [1][4]:
sudo mkdir /media/ramdisk sudo mount -t ramfs ramfs /media/ramdisk
Damit erhält man eine RAM-Disk, die sich (wie tmpfs) dynamisch der benötigten Größe anpasst. Um die Partition beim Systemstart automatisch einzuhängen, öffnet man einen Editor mit Root-Rechten [2] und fügt folgende Zeile in die /etc/fstab hinzu:
ramfs /media/ramdisk ramfs defaults 0 0
Das ramfs-Dateisystem hat im Gegensatz zu tmpfs leider keine Mountoptionen und bietet somit auch keine Möglichkeit, die Größe zu limitieren. Das bedeutet, dass im Extremfall das System keinen freien Hauptspeicher mehr zur Verfügung hat und nur noch auf die Festplatte auslagern kann.
Grundsätzlich kann man die RAM-Disk - egal nach welcher Methode erstellt - beliebig groß halten. Zu beachten ist jedoch, dass dem System noch ausreichend "normaler" Arbeitsspeicher zu Verfügung steht, da ansonsten zu oft auf den Auslagerungsspeicher (Swap) zugegriffen werden muss, was den Geschwindigkeitsvorteil der RAM-Disk komplett wieder zunichte macht. Für Ubuntu sollte z.B. mindestens 1 GiB "normales" RAM verfügbar sein.
Overview of RAMFS and TMPFS on Linux - Blogbeitrag, 11/2008
Dateisystem und Datenträger - Artikelübersicht
Diese Revision wurde am 5. November 2014 20:42 von jakon erstellt.