RAM-Disk (tmpfs) unter Linux erstellen

Datum

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.

Unterschied zwischen tmpfs und ramfs

ramfs

Bei ramfs handelt es sich um das ältere Format, welches heutzutage durch tmpfs abgelöst wird.
ramfs erstellt ein In-Memory-Dateisystem, das den gleichen Mechanismus und Speicherplatz wie der Linux-Dateisystemcache verwendet.
Wenn man den Befehl free unter Linux ausführt, wird angezeigt, wie viel RAM auf Ihrem System vorhanden ist, einschließlich der Größe des verwendeten Dateisystemcaches.
Dieser Speicher wird normalerweise von Linux verwendet, um kürzlich aufgerufene Dateien zwischenzuspeichern, so dass sie beim nächsten Mal sehr schnell aus dem RAM abgerufen werden können. ramfs verwendet denselben Speicher und genau denselben Mechanismus, der bewirkt, dass Linux Dateien zwischenspeichert, mit der Ausnahme, dass es nicht entfernt wird, wenn der verwendete Speicher den vom System festgelegten Schwellenwert überschreitet.

ramfs -Dateisysteme können nicht in der Größe begrenzt werden wie ein reguläres Dateisystem, hierbei wird soviel RAM verwendet bis das System nicht mehr genügend RAM hat und wahrscheinlich abstürzt oder nicht mehr reagiert.

tmpfs

tmpfs ist ein neueres RAM Dateisystem welches viele der Nachteile von ramfs überwindet.
Man kann tmpfs in der Größe beschränken, wodurch beim Erreichen des Limits einen ‚Datenträger voll‘ -Fehler ausgegeben wird. Dieses Verhalten entspricht genau dem einer Partition einer physischen Festplatte.
Das tmpfs-Dateisystem ist kein reines RAM-Dateisystem, sondern schreibt Daten in den Festplatten-Swap, sobald der Speicherplatz im RAM knapp wird.
Die Größe und die verwendete Menge an Speicherplatz auf einer tmpfs-Partition wird in df angezeigt.

$ df -h /mnt/ramdisk
Filesystem Size Used Avail Use% Mounted on
tmpfs      512M 0    512M  0%   /mnt/ramdisk

Erstellen einer RAM-Disk

Als erstes erstellen wir einen Mountpunkt zum Einhängen der RAM-Disk.
mkdir /mnt/ramdisk
und vergeben noch entsprechende Rechte:
chmod 777 /mnt/ramdisk

Nun wird der mount-Befel zum erstellen der eigentlichen RAM-Disk verwendet:
mount -t [TYPE] -o size=[SIZE] [FSTYPE] [MOUNTPOINT]

  • [TYPE] gibt den Typ der RAM-Disk an; entweder tmpfs oder ramfs.
  • [SIZE] legt die Größe der RAM-Disk fest.
  • [FSTYPE] legt den Dateisystem-Typ fest.
  • [MOUNTPOINT] der Einhängepunkt im System

Um eine 512 MB große RAM-Disk zu erstellen verwendet man den Befehl:
mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk

Um die RAM-Disk bei jedem Start des Systems automatisch einzubinden kann man folgenden Eintrag in die Datei /etc/fstab eintragen:
tmpfs /mnt/ramdisk tmpfs nodev,nosuid,noexec,nodiratime,size=1024M 0 0

Alternativ dazu kann man auch die relative Nutzung des Arbeitsspeichers bei der Erstellung angeben, beim folgenden Beispiel 20%:
mount -t tmpfs -o size=20% none /mnt/ramdisk

tmpfs mit Systemd

Systemd bietet einen eigenen Service, welcher sich um die Erstellung, Entfernen und bereinigen von temporären Dateien kümmert.
Dieser Service nennt sich systemd-tmpfiles, die entsprechende man-Page findet man unter man tmpfiles.d und es werden die folgenden Konfigurationsdateien verwendet:

  • /etc/tmpfiles.d/*.conf
  • /run/tmpfiles.d/*.conf
  • /usr/lib/tmpfiles.d/*.conf

Um nun beim booten ein tmpfs-Verzeichnis oder Datei erstellen zu lassen legt man eine entsprechende Konfigurationsdatei unter /etc/tmpfiles.d/ ab, welche folgenden Aufbau hat:

           #Type Path        Mode UID  GID  Age Argument
           d     /run/user   0755 root root 10d -
           L     /tmp/foobar -    -    -    -   /dev/null

Eine Übersicht über die möglichen Typen findet man auf der entsprechenden man-Page. Bei diesem Beispiel wird als erstes ein Verzeichnis (d) mit dem Pfad /run/user erstellt, dem Benutzer root gehört und alles was älter ist als 10 Tage wird bereinigt.
Als zweites wird ein Link (L) von /tmp/foobar nach /dev/null erstellt.

Die Größe eines solchen tmpfs-Verzeichnisses lässt sich per Eintrag in die /etc/fstab festlegen, wobei dieses dann als entsprechende Partition im System auftaucht.
Ein Beispiel:

$ cat /etc/tmpfiles.d/test.conf 
d /run/test 1777 root root - - 

Hier erstellen wir ein einfachen Verzeichnis, welches wir durch folgenden Eintrag in die /etc/fstab beim booten automatisch einhängen lassen und die Größe wird dabei auf 500 MB festgelegt:
tmpfs /run/test tmpfs defaults,size=500M 0 0

Nach einem Reboot oder mount -a sollten wir nun folgendes sehen:

Filesystem     Type   Size  Used Avail Use% Mounted on
tmpfs          tmpfs  500M     0  500M   0% /run/test

Autor
Kategorien Linux, Dateisysteme

PRTG Map