https://inasa.dev/blog/rss.xml

Linux | tmpfs & tmpdir

2023-02-26

tmpfs

Temporary File System的简称,数据存储在易失性内存中,而不是一个持久的存储设备。一个类似的结构是RAM磁盘,它显示为一个虚拟磁盘驱动器,并承载一个磁盘文件系统。

存储在tmpfs中的所有内容都是临时性的,即不会在非易失性存储器如硬盘上直接创建文件(尽管根据操作系统的页面替换策略,交换空间被用作备份存储)。重启时,tmpfs中的所有内容都会丢失。

临时文件所使用的内存会随着它所包含的文件而增长和缩小。

许多 Unix 发行版默认为文件系统的 /tmp 分支或共享内存启用和使用 tmpfs。可以通过 df 观察到。

而在几乎所有的Linux发行版上,都会在/run/或/var/run/上挂载一个tmpfs,以存储临时的运行时文件,如PID文件和Unix域套接字。临时的系统文件,如固件变量,存放在/sys。

由于RAM的速度比磁盘存储的速度高,tmpfs允许缓存在其中时速度更快,导致整个系统的效率更高,尽管带有页面缓存的操作系统看到的好处较少,因为如果可用内存足够,最近使用的文件页面会保留在内存中。由于RAM在重启时被清除,tmpfs防止系统变得过于杂乱,而不需要用户手动删除临时文件。此外,在RAM中存储文件可以防止磁盘过快填充,并通过减少写入量延长固态硬盘的寿命。

使用RAM来存储文件,而不是物理磁盘,这可以提高性能,减少由于磁盘故障造成的数据丢失风险。与物理磁盘相比,tmpfs的一个优点是速度更快,因为读写是在内存中进行的,而不是在较慢的物理磁盘上。然而,需要注意的是,tmpfs受到系统可用内存数量的限制,文件系统可能需要定期调整大小或清除,以避免内存耗尽。

┌───────────┬──────────────┬────────────────┐
│ /dev/shm  │ always tmpfs │ Linux specific │
├───────────┼──────────────┼────────────────┤
│ /tmp      │ can be tmpfs │ FHS 1.0        │
├───────────┼──────────────┼────────────────┤
│ /var/tmp  │ never tmpfs  │ FHS 1.0        │
└───────────┴──────────────┴────────────────┘

/tmp

/tmp是一个目录,被系统和应用程序用来存储只在短时间内需要的临时文件。这些文件通常在系统重新启动时被删除。正因为如此,/tmp经常被用来存储运行中的应用程序需要的文件,如日志文件或临时数据。

/var/tmp

/var/tmp用于长期存储临时文件,这些文件应在重启后持续存在。

一般来说,存储在/var/tmp中的文件不会被自动删除,而且它们的目的是在重启后仍然存在。然而,在某些情况下,/var/tmp中的文件可能会被删除,例如,当系统管理员进行系统维护或磁盘空间变满时。

值得注意的是,Linux文件系统层次标准(FHS)建议不要自动删除/var/tmp中的文件。然而,一些系统管理员可能会选择配置他们的系统来删除/var/tmp中一定时间内没有被访问或修改的文件。

/dev/shm

/dev/shm是基于Unix的操作系统中的一个特殊目录,用于创建和访问共享内存段。共享内存是一种技术,它允许多个进程访问一个共同的内存区域,该区域可用于在它们之间共享数据。

在基于Unix的系统中,/dev/shm是一个虚拟文件系统,它提供了一个使用RAM磁盘的共享内存实现。当一个进程在/dev/shm中创建一个共享内存段时,操作系统会在RAM盘中创建一个新的文件,该文件有一个代表共享内存段的唯一名称。然后,这个文件可以被其他有必要权限的进程作为共享内存段使用,以访问它。

通过/dev/shm使用共享内存的好处是,它比其他进程间的通信方法(如管道或套接字)更快,因为数据不在进程间复制。相反,进程可以直接访问同一区域的内存,这可以提高性能并减少开销。

需要注意的是,/dev/shm中的共享内存段的内容是不稳定的,当系统重启或创建共享内存段的进程明确删除这些内存段时,这些内容就会丢失。因此,确保使用/dev/shm中的共享内存段的进程正确管理它们的创建和删除,以避免任何数据丢失或系统不稳定是很重要的。


  1. https://en.wikipedia.org/wiki/Tmpfs
  2. https://superuser.com/questions/45342/when-should-i-use-dev-shm-and-when-should-i-use-tmp
  3. https://en.wikipedia.org/wiki/Temporary_folder
  4. chatGPT