tmpfs

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

tmpfs (englisch für temporary file system) ist ein Dateisystem, das in vielen Unix-artigen Betriebssystemen als verbesserter Ersatz für eine RAM-Disk eingesetzt wird. Im Gegensatz zur RAM-Disk, bei der realer Arbeitsspeicher verwendet wird, wird bei tmpfs virtueller Arbeitsspeicher statt der Festplatte als Speicher benutzt.

Funktion[Bearbeiten]

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:

Dateisystem          Größe  Benutzt Verf. Verw%  Eingehängt auf
tmpfs                 256M  688K    256M     1%  /tmp

Implementierungen[Bearbeiten]

SunOS / Solaris[Bearbeiten]

SunOS und später Solaris beinhalten eine der frühesten Implementierungen von tmpfs,[1] wo es ab Version 4.1 Verwendung fand, welche im März 1990 veröffentlicht wurde.[2] 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.

# df -k
Dateisystem  1K-Blöcke  Benutzt Verf.   Verw%   Eingehängt auf
swap         601592           0 601592     0%   /tmp/test

Linux[Bearbeiten]

Der Linux-Kernel stellt tmpfs seit Version 2.4 bereit.[3] 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[Bearbeiten]

Tmpfs wurde am 10. September 2005 in die offiziellen NetBSD-Quellen aufgenommen[4] und ist seit Version 4.0 verwendbar. Für FreeBSD wurde die Implementierung von NetBSD portiert und ist seit Version 7.0 verfügbar.[5]

Auf Systemen mit wenig Speicher kann die Verwendung großer temporärer Daten im Speicher zu Instabilitäten führen.[6]

Microsoft Windows[Bearbeiten]

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.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Peter Snyder: tmpfs: A Virtual Memory File System (PDF; 26 kB) Abgerufen am 7. Mai 2007.
  2. Hal L. Stern: SunOS 4.1 Performance Tuning (GZipped PostScript; 39 kB) Abgerufen am 15. Februar 2013.
  3. Daniel Robbins: Common threads: Advanced filesystem implementor's guide, Part 3. 1. September 2001. Abgerufen am 15. Februar 2013. Beschreibung der Implementierung in Linux
  4. Julio M. Merino Vidal: NetBSD-SoC: Efficient memory file-system. 24. Februar 2006. Abgerufen am 15. Februar 2013.
  5. Xin LI: FreeBSD tmpfs(5) manpage. 23. April 2012. Abgerufen am 15. Februar 2013.
  6. NetBSD team: mount_tmpfs(8) - NetBSD Manual Pages. 13. Februar 2008. Abgerufen am 15. Februar 2013. NetBSD mount_tmpfs man page