ubuntuusers.de

RAM-Disk erstellen

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Wiki/Icons/Oxygen/media-flash.png 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.

Hinweis:

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).

Anwendungsgebiete

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.

Methode 1 - Mit tmpfs-Dateisystem

Die Verwendung vom tmpfs ist ein sehr einfacher Weg zur Erstellung einer RAM-Disk.

Hinweis:

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).

⚓︎

Methode 2

Mit ext2-Dateisystem - ältere Variante

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/beschrieben 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.

Größe einstellen

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.

Erstellen eines Skriptes

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 eine Systemd-Unit automatisiert werden.

Neue Variante mit ext4

Einzelschritt

Nicht sensible Daten

In dieser Variante werden folgende Dinge getätigt (Für alle Benutzer mit nicht sensibleren Daten)

  • die Gerätedatei ram0 mit einer Dateigröße von 2 GB mit ext4-Dateisystem im Ordner /dev erstellt

  • im Ordner /media wird ein neuer Ordner ramdisk angelegt, welcher später als Einhängepunkt dient

  • Berechtigung, damit alle Benutzer Zugriff haben

Im Terminal folgendes nach und nach eingeben:

  • Gerätedatei mit Bezeichnung und einer Dateigröße von 2 GB anlegen

    sudo mke2fs -t ext4 -O extents -L , RAMDISK,  -vm0 /dev/ram0 2G 
  • Ordner ramdisk anlegen:

    sudo mkdir /media/ramdisk 
  • Gerätedatei /dev/ram0 in /media/ramdisk einhängen:

    sudo mount /dev/ram0 /media/ramdisk 
  • Berechtigung für Lesen, Schreiben, Ausführen hinzufügen:

    sudo chmod --verbose a+rwx /media/ramdisk 

Sensible Daten

In dieser Variante werden folgende Dinge getätigt (Für einen Benutzer mit sensibleren Daten):

  • die Gerätedatei ram0 mit einer Dateigröße von 2 GB mit ext4 im Ordner /dev erstellt

  • Im Ordner /media wird ein neuer Ordner ramdisk angelegt, welcher später als Einhängepunkt dient

  • dem aktuelle Benutzer wird die Berechtigung des Ordners ramdisk gegeben

  • es wird eine weitere Berechtigung des Ordners gegeben

Im Terminal folgendes nach und nach eingeben - Hinweis dazu: BENUTZERNAME mit dem gewünschten Namen ändern. Der eigene Benutzer kann auch im Terminal mit echo $USER angezeigt werden.

  • Gerätedatei mit Bezeichnung und einer Dateigröße von 2 GB anlegen:

    sudo mke2fs -t ext4 -O extents -L , RAMDISK,  -vm0 /dev/ram0 2G 
  • Ordner ramdisk anlegen:

    sudo mkdir /media/ramdisk 
  • Gerätedatei /dev/ram0 in /media/ramdisk einhängen:

    sudo mount /dev/ram0 /media/ramdisk 
  • Benutzer und Gruppe von root nach BENUTZENAME ändern:

    sudo chown --verbose BENUTZENAME:BENUTZENAME /media/ramdisk 
  • Berechtigung für Lesen, Schreiben, Ausführen hinzufügen:

    sudo chmod --verbose a-rwx,u+rwx /media/ramdisk 

Skript-Datei

Nicht sensible Daten

Alle Benutzer dürfen auf die RAM-Disk zugreifen (benötigt keinen spezifischen Benutzernamen)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash +
RAMDISK_SIZE='2' # Größeneinstellung in Gigabyte…
if [ -d "/media/ramdisk/lost+found/" ]
then
    clear
    echo 'RAM-Disk „/media/ramdisk“ existiert bereits, das Script wird nun beendet!'
else
    clear
    mkdir /media/ramdisk
    mke2fs -t ext4 -O extents -vm0 /dev/ram0 ${RAMDISK_SIZE}G -L 'RAMDISK'
    mount /dev/ram0 /media/ramdisk
    chmod --verbose a+rwx /media/ramdisk
fi
Sensible Daten

Es darf nur ein Benutzer auf die RAM-Disk zugreifen (alle anderen Benutzer haben keinen keinerlei Zugriff)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash +
USERNAME='BENUTZERBAME'; # bitte nur einen Benutzernamen eingeben, welcher die RAM-Disk nutzen darf
RAMDISK_SIZE='2' # Größeneinstellung in Gigabyte…
if [ -d "/media/ramdisk/lost+found/" ]
then
    clear
    echo 'RAM-Disk „/media/ramdisk“ existiert bereits, das Script wird nun beendet!'
else
    clear
    mkdir /media/ramdisk
    mke2fs -t ext4 -O extents -vm0 /dev/ram0 ${RAMDISK_SIZE}G -L 'RAMDISK'
    mount /dev/ram0 /media/ramdisk
    chmod --verbose a-rwx,u+rwx /media/ramdisk
    chown --verbose $USERNAME:$USERNAME /media/ramdisk
fi

Permanente Einbindung

Crontab

Für Crontab wird der gesamte Code als Einzeiler verwendet. Crontab öffnen und ggf. Editor auswählen:

sudo crontab -e
Nicht sensible Daten

Am Ende der Datei folgendes hinzufügen und Größe in GB anpassen:

@reboot RAMDISK_SIZE='2'; if [ -d "/media/ramdisk/lost+found/" ]; then clear;echo 'RAM-Disk „/media/ramdisk“ existiert bereits, das Script wird nun beendet!'; else clear;mkdir /media/ramdisk;mke2fs -t ext4 -O extents -vm0 /dev/ram0 ${RAMDISK_SIZE}G -L 'RAMDISK';mount /dev/ram0 /media/ramdisk;chmod --verbose a+rwx /media/ramdisk;fi
SensibleDaten

Am Ende der Datei folgendes hinzufügen und BENUTZERNAME durch den aktuellen eintragen und Größe in GB anpassen:

@reboot USERNAME='BENUTZERNAME';RAMDISK_SIZE='2'; if [ -d "/media/ramdisk/lost+found/" ]; then clear;echo 'RAM-Disk „/media/ramdisk“ existiert bereits, das Script wird nun beendet!'; else clear;mkdir /media/ramdisk;mke2fs -t ext4 -O extents -vm0 /dev/ram0 ${RAMDISK_SIZE}G -L 'RAMDISK';mount /dev/ram0 /media/ramdisk;chmod --verbose a-rwx,u+rwx /media/ramdisk;chown --verbose $USERNAME:$USERNAME /media/ramdisk;fi
Status abfragen

sudo systemctl status cron.service
Aktivieren

sudo systemctl enable cron.service
Jobs Auflisten

sudo crontab -l

Nach einem Neustart steht die RAM-Disk zur Verfügung.

Job pausieren/löschen

Soll der erstellte Crontab wieder entfernt werden, einfach die Schritte erneut durchführen, entweder die gesamte Zeile mit den Einträgen löschen, oder mit dem Zeichen # auskommentieren, welches am Anfang steht.

Alternativ kann der gesamte Job mit crontab -r gelöscht werden.

Nach der Erstellung

  • In der Regel wird in einem Dateimanager wie Dolphin die eingehängte RAM-Disk mit der Bezeichnung „RAMDISK“ angezeigt…

  • Die aktuelle Größe mit weiteren Infos der erstellten RAM-Disk kann mittels lsblk | grep -i 'ramdisk' angezeigt werden…

  • Informationen aus mount kann mittels mount | grep -i 'ramdisk' angezeigt werden…

  • Informationen über noch verfügbaren Speicherplatz: df -h /media/ramdisk, mit Dateisystem: df -Th /media/ramdisk

  • Informationen über den belegten Speicherplatz: du -ach /media/ramdisk, in Byte: du -abc /media/ramdisk

  • Die UUID, Blockgröße und das Dateisystem kann mit blkid | grep -i 'ramdisk' angezeigt werden…

Aushängen

Manuelles Aushängen der RAM-Disk (alle Daten werden unwiderruflich gelöscht)

Vorgang: Aushängen, Gerätedatei ram0 und Ordner ramdisk löschen

Als Einzeiler

sudo umount /dev/ram0;sudo rm /dev/ram0;sudo rmdir /media/ramdisk 
Ausführlich

sudo umount /dev/ram0
sudo rm /dev/ram0
sudo rmdir /media/ramdisk 

⚓︎

Methode 3 - Mit ramfs-Dateisystem

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:

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 und fügt folgende Zeile in die /etc/fstab hinzu:

ramfs   /media/ramdisk     ramfs   defaults        0       0

Achtung!

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.

RAM-Disk-Größe vs. verfügbares RAM

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.

Diese Revision wurde am 24. März 2023 13:00 von DJKUhpisse erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System