linux tmpfs文件系统
一、tmpfs 是什么?
tmpfs (Temporary File System)是许多类Unix操作系统中实现的临时文件存储范例。它旨在显示为已安装的文件系统,但数据存储在易失性内存中,而不是持久存储设备中。类似的结构是RAM 磁盘,它显示为虚拟磁盘驱动器并托管磁盘文件系统。
存储在 tmpfs 中的所有内容都是临时的,因为不会在硬盘等非易失性存储上直接创建任何文件(尽管根据操作系统的页面替换策略,交换空间被用作后备存储)。重新启动时,tmpfs 中的所有内容都将丢失。
某些 Linux 发行版(例如 Debian)默认没有在/tmp上挂载 tmpfs;在这种情况下, /tmp下的文件将存储在与/相同的文件系统中。
并且在几乎所有的 Linux 发行版上,都会在/run/或/var/run/上挂载一个 tmpfs,用于存储临时运行时文件,例如PID 文件和Unix 域套接字。固件变量等临时系统文件存储在/sys 。
Linux 内核从 2.4 版本开始支持 tmpfs 。Linux tmpfs(以前称为shmfs)基于启动期间使用的 ramfs 代码,并且还使用页面缓存,但与 ramfs 不同的是,它支持将较少使用的页面交换到交换空间,以及文件系统大小和 inode 限制以防止出现内存不足的情况(分别默认为物理 RAM 的一半和 RAM 页数的一半)。
二、tmpfs 优点
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 128K 1.6G 1% /run/user/1000
由于 RAM 的速度比磁盘存储更高,tmpfs 允许缓存在存储在 RAM 中时速度更快,从而实现更高效的整体系统,尽管具有页面缓存的操作系统将获得较少的好处,因为最近使用的文件页面将如果可用内存足够,则保留在内存中。由于 RAM 在重新启动时会被清除,因此 tmpfs 可以防止系统变得过于混乱,而无需用户手动删除临时文件。此外,将文件存储在 RAM 中可以防止磁盘过快填满,并通过减少写入次数 来延长固态硬盘的使用寿命。
三、tmpfs 缺点
在没有交换空间或交换空间不足的 系统上,tmpfs 可能会消耗大量内存。
如果缓存文件存储在 tmpfs 中,则程序在重新启动后将丢失其缓存数据。
四、tmpfs 使用场景
tmpfs 适合存储socket、session等,对于高io的临时数据也可以选择进行存储;对于高io并且还需要持久化到磁盘的,需要通过其他手段,tmpfs可以提高linux系统的性能。
tmpfs 常将以下目录挂载进行分析:
/dev/
: 这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。它实际上是一个访问这些外部设备的端口。/dev/shm
:在CentOS和RedHat下,/dev/shm目录是一个链接,指向/run/shm目录,在Ubuntu系统下tmpfs文件系统对应的是/run/shm目录。/run/
: /run 中的文件和目录没有存储在磁盘上,而只存储在内存中。/sys/fs/cgroup
: 将任意进程进行分组化管理的Linux内核功能。/run/user/0
: root用户或显示管理器 gdm 相关
临时挂载,会将/tmp目录下原有的文件覆盖掉。
$ sudo mount -t tmpfs -o size=40m tmpfs /tmp
$ df -h
tmpfs 1.6G 128K 1.6G 1% /run/user/1000
tmpfs 40M 4.0K 40M 1% /tmp
$ mount /tmp/ # 取消挂载
在 /ets/fstab
文件中进行系统配置挂载,重启后生效:
$ sudo vi /etc/fstab # 新增系统挂载配置
tmpfs /tmp tmpfs defaults,size=40M 0 0
$ reboot # 重启生效
$ df -h # 重启后,查看挂载信息
# 当想取消tmpfs系统挂载时
$ sudo vi /etc/fstab # 删除tmpfs系统挂载配置
$ mount -a # 测试/etc/fstab无错误
$ reboot # 重启生效
总结
本文介绍了linux tmpfs 文件系统的概念和使用场景。