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