# Tmpfs

tmpfs (englisch für temporary file system) ist ein Dateisystem, das in vielen Unix-artigen Betriebssystemen, als verbesserter Ersatz für ramfs, zum Anlegen einer RAM-Disk eingesetzt wird. Wie auch mit ramfs, können mit tmpfs Teile des realen Arbeitsspeichers wie eine Festplatte eingebunden und beschrieben werden. Allerdings verwendet tmpfs dazu den virtuellen Speicher und kann daher, im Gegensatz zu ramfs, auch ausgelagert werden wenn kein freier Arbeitsspeicher mehr verfügbar ist; Mit ramfs hingegen kann es zu einem Überlauf in den noch regulär verwendeten Arbeitsspeicher und somit zum Systemabsturz kommen. Zusätzlich bietet tmpfs POSIX ACLs und erweiterte Dateiattribute, außerdem sind manche Einbindungsparameter im laufenden Betrieb veränderbar, wie beispielsweise die Größe des Dateisystems, die erhöht werden kann (aber nicht verkleinert).

## Funktion

Alles, was in tmpfs gespeichert wird, ist nur temporär, da es nicht auf der Festplatte gespeichert wird, und ist nach einem Neustart nicht mehr verfügbar. Der Vorteil von tmpfs liegt in seiner Geschwindigkeit: Aus dem Arbeitsspeicher kann viel schneller als von der Festplatte gelesen und geschrieben werden. Aus diesem Grund wird das temporäre Verzeichnis /tmp häufig damit realisiert. Auch die Verzeichnisse /var/run und /var/lock werden häufig mittels dieser Systeme erzeugt.
Der von tmpfs genutzte Speicher wächst und schrumpft, abhängig von den darin enthaltenen Dateien, und kann in einen Swap-Bereich ausgelagert werden.
Viele Unix-Distributionen verwenden tmpfs standardmäßig für den /tmp Zweig des Dateisystems oder für Shared Memory. Dies kann durch den Befehl df nachvollzogen werden:

## Implementierungen
### SunOS / Solaris

SunOS und später Solaris beinhalten eine der frühesten Implementierungen von tmpfs, wo es ab Version 4.1 Verwendung fand, welche im März 1990 veröffentlicht wurde. Seit Solaris 2.1 ist /tmp standardmäßig ein tmpfs-Dateisystem. Der Befehl df zeigt als Hintergrundspeicher korrekt „swap“, unabhängig davon, was beim mount-Befehl als Hintergrundspeicher angegeben wurde, da dieser Parameter von mount_tmpfs ignoriert wird.

### Linux

Der Linux-Kernel stellt tmpfs ab Version 2.4 bereit. Tmpfs (ehemals auch als shmfs bekannt) unterscheidet sich von einer Linux RAM-Disk insofern, als Speicher dynamisch alloziert wird und weniger genutzte Seiten in einen Swap-Bereich ausgelagert werden können. Ramfs nutzt dagegen keinerlei virtuellen Speicher (was sowohl Vor- als auch Nachteil sein kann). Tmpfs kann dynamisch bis zu einer vorgegebenen Maximalgröße (auf die Hälfte des vorhandenen RAMs voreingestellt) wachsen und belegt immer nur so viel Speicher, wie benötigt wird. Das Limit kann geändert werden durch Verwendung von Optionen oder z. B. durch den Befehl mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0700 tmpfs /space, welcher eine maximale Größe von 1 GiB mit maximal 10240 Inodes und einen exklusiven Zugriff für den Besitzer des Dateisystems /space erlaubt. Das Limit kann im Betrieb etwa durch den Befehl mount -o remount,size=2G /space geändert werden. Wenn das Limit zu groß gewählt wird und nicht genug Swap-Speicher vorhanden ist, kommt es zu Problemen.

### BSD

Tmpfs wurde am 10. September 2005 in die offiziellen NetBSD-Quellen aufgenommen und ist ab Version 4.0 verwendbar. Für FreeBSD wurde die Implementierung von NetBSD portiert und ist ab Version 7.0 verfügbar.
Auf Systemen mit wenig Speicher kann die Verwendung großer temporärer Daten im Speicher zu Instabilitäten führen.

### Microsoft Windows

Windows besitzt mit „Temporären Dateien“ ein ähnliches Konzept. Dateien, welche mit den Flags FILE_ATTRIBUTE_TEMPORARY sowie FILE_FLAG_DELETE_ON_CLOSE angelegt wurden, werden im Speicher gehalten und nur auf die Festplatte geschrieben, wenn das System wenig Speicher verfügbar hat. So verhält es sich wie tmpfs, mit dem Unterschied, dass die Dateien in einen speziellen Ordner statt in den Swap-Bereich geschrieben werden.