tmpfs is a common name for a temporary file storage facility on many
Unix-like operating systems. It is intended to appear as a mounted
file system, but stored in
volatile memory instead of a persistent storage device. A similar construction is a
RAM disk, which appears as a virtual disk drive and hosts a
disk file system.
Semantics
Everything stored in tmpfs is temporary in the sense that no files will be created on the
hard drive; however, swap space is used as backing store in case of low memory situations. On
reboot, everything in tmpfs will be lost.
The memory used by tmpfs grows and shrinks to accommodate the files it contains and can be swapped out to swap space.
Many Unix distributions enable and use tmpfs by default for the /tmp branch of the file system or for shared memory. This can be observed with df as in this example:
Filesystem Size Used Avail Use% Mounted on
tmpfs 256M 688K 256M 1% /tmp
Implementations
SunOS/Solaris
SunOS 4 includes what is most likely the earliest implementation of tmpfs; it first appeared in SunOS 4.0 in late 1987, together with new orthogonal address space management that allowed any object to be memory mapped.
The Solaris /tmp directory was made a tmpfs file system by default starting with Solaris 2.1, released in November 1994. Output for the Solaris df
command will show swap as the filesystem type for any tmpfs volume:
# df -k
Filesystem kbytes used avail capacity Mounted on
swap 601592 0 601592 0% /tmp/test
Linux
tmpfs is supported by the
Linux kernel from version 2.4 and up. tmpfs (previously known as
shmfs) distinguishes itself from the Linux
ramdisk device by allocating memory dynamically and by allowing less-used pages to be moved onto
swap space. ramfs, in contrast, does not make use of swap (which can be an advantage or disadvantage). In addition,
MFS and some older versions of ramfs did not grow and shrink dynamically and instead used a fixed amount of memory at all times.
Usage of tmpfs for example is "mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0700 tmpfs /space" which will allow up to 1 GiB in RAM/swap with 10240 inodes and only accessible by the owner of /space. Owner can be overridden with the uid/gid mount options, and will otherwise default to root. The filesystem's maximum size can also be changed on-the-fly, like "mount -o remount,size=2G /space".
/var/run and /var/lock can be tmpfs filesystems, to alleviate having to clean them up at each reboot.
BSD
tmpfs was merged into the official
NetBSD source tree on September 10, 2005, and is available in 4.0 and later versions.
FreeBSD has ported NetBSD's implementation and is available in 7.0 and later versions.
DragonFly BSD has also ported NetBSD's implementation and is available in 2.5.1 and later.
Microsoft Windows
Windows systems have a rough analog to tmpfs in the form of "temporary files". Files created with both FILE_ATTRIBUTE_TEMPORARY and FILE_FLAG_DELETE_ON_CLOSE are held in memory and only written to disk if the system experiences low memory pressure. In this way they behave like tmpfs, except the files are written to the specified path during low memory situations rather than swap space. This technique is often used by servers along with TransmitFile to render content to a buffer before sending to the client.
References
External links
Documentation/filesystems/tmpfs.txt documentation in Linux source tree
tmpfs(7FS) Solaris 10 man page
mount_tmpfs(8) NetBSD man page
Category:Computer file systems
Category:Special purpose file systems
Category:Linux file systems