Linux特种文件系统--tmpfs文件系统

tmpfs类似于RamDisk(只能使用物理内存),使用虚拟内存(简称VM)子系统的页面存储文件。tmpfs完全依赖VM,遵循子系统的整体调度策略。说白了tmpfs跟普通进程差不多,使用的都是某种形式的虚拟内存,至于数据存储在物理内存中还是在交换分区中,全权交由VM子系统。

tmpfs 文件系统

  • 定义 :tmpfs 是一个基于内存的文件系统,它在 RAM 中存储数据,因此访问速度非常快。

  • 用途 :tmpfs 通常用于存储临时文件,这些文件不需要永久保存,而且频繁读写。使用 tmpfs 可以减少对物理磁盘的磨损,并提高性能。

  • 示例路径 :常见的 tmpfs 挂载点包括 /dev/shm、/run、/tmp 等。

  • 持久性 :系统重启后,tmpfs 中的数据会被清空。

devtmpfs 文件系统

  • 定义 :devtmpfs 也是一种基于内存的文件系统,主要用于动态创建设备节点。

  • 用途 :devtmpfs 在系统启动时自动创建,用来存放动态设备文件。它减少了手动创建设备节点的需要,并且可以根据当前硬件自动创建所需的设备文件。

  • 示例路径 :devtmpfs 通常挂载在 /dev 目录下。

  • 持久性 :与 tmpfs 类似,系统重启后,devtmpfs 中的设备文件也会重新创建

查看tmpfs文件系统挂载情况

使用mount或df命令来查看tmpfs挂载情况,mount可以看到挂在点的一些属性信息;df可以查看挂载点大小以及使用率等。

bash 复制代码
 mount | grep tmpfs
 devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930460k,nr_inodes=232615,mode=755)
 tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
 tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
 tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
 tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188216k,mode=700)
 ​
 df -hT
 Filesystem     Type     Size Used Avail Use% Mounted on
 devtmpfs       devtmpfs 909M     0 909M   0% /dev
 tmpfs         tmpfs     920M     0 920M   0% /dev/shm
 tmpfs         tmpfs     920M   17M 903M   2% /run
 tmpfs         tmpfs     920M     0 920M   0% /sys/fs/cgroup
 /dev/sda3     xfs       14G 3.2G   11G 24% /
 /dev/sda1     xfs     1014M 181M 834M 18% /boot
 tmpfs         tmpfs     184M     0 184M   0% /run/user/0

使用tmpfs文件系统

创建tmpfs并挂在到/test-tmpfs,对使用内存大小未做限制,但是分配了一个920M大小,当向其拷贝大于920M的数据,并未动态扩展超过920M(虽未指定size,会有一个缺省值:刚好是我内存的50%),仍然会报错:No space left on device。

bash 复制代码
mount tmpfs /test-tmpfs -t tmpfs

~]# dd if=/dev/zero of=/test-tmpfs/bigfile bs=1M count=1000
dd: error writing '/test-tmpfs/bigfile': No space left on device
920+0 records in
919+0 records out
963661824 bytes (964 MB) copied, 0.788749 s, 1.2 GB/s

创建tmpfs并挂在到/test-tmpfs2,最大只能使用64m内存空间,很显然到存储文件大小超过64m时,报错:No space left on device

bash 复制代码
mount tmpfs /test-tmpfs2/ -t tmpfs -o size=64m

~]# dd if=/dev/zero of=/test-tmpfs2/bigfile bs=1M count=65
dd: error writing '/test-tmpfs2/bigfile': No space left on device
65+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 0.10594 s, 633 MB/s

第一个试验,默认大小920M,且当超过920M时并没有动态扩展,那么是不是最大只能设置size=920M呢?显然不是!经过查资料,不设置size,则默认使用物理内存的50%(我擦,从这里我可以逆向推机器的物理内存大小了~~)

bash 复制代码
mount tmpfs /test-tmpfs3/ -t tmpfs -o size=2048m 

~]# df -hT|grep test-tmpfs
tmpfs          tmpfs     2.0G     0  2.0G   0% /test-tmpfs3

既然tmpfs存储在内存中,那么tmpfs占用的内存是哪一部分呢?答案是shared memory。

~]# free -m

total used free shared buff/cache available

Mem: 1838 162 72 920 1602 590

Swap: 1638 61 1577

~]# rm -rf /test-tmpfs/bigfile

~]# free -m

total used free shared buff/cache available

Mem: 1838 162 992 1 683 1509

Swap: 1638 61 1577

通过tmpfs赋能应用加速

给squid代理加速,据说可以将系统负载从12降低到0.3。

1、创建并挂在tmpfs

mkdir /squid_tmp

chmod 1777 /squid_tmp

~]# cat /etc/fstab |grep squid

tmpfs /squid_tmp tmpfs size=256m

2、修改squid代理配置

~]# cat /etc/squid/squid.conf|grep -i cache

Only allow cachemgr access from localhost

Uncomment and adjust the following to add a disk cache directory.

#cache_dir ufs /var/spool/squid 100 16 256

cache_dir ufs /squid_tmp 256 16 256

  • ufs,缓存存储机制,具体参考Squid的使用手册
  • /squid_tmp,就是一个tmpfs
  • 第一个256,指定缓存目录的大小,这是Squid可以使用的上限,可以根据实际情况酌情设定
  • 16和第二个256,针对ufs机制,Squid在缓存目录下创建二级目录树。分别指定了第一级和第二级目录的数量。默认就是16和256,可以根据具体情况酌情设定。如下图:一级目录刚好16个。

3、重启Squid服务

systemctl restart squid

相关推荐
且从容.13 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道14 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达16 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.17 小时前
ubuntu安装flink
linux·ubuntu·flink
数字新视界18 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落18 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨18 小时前
WSL2的安装与使用
linux·wsl
微小的鱼18 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng19 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮19 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频