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

server/2024/11/28 7:43:47/

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可以查看挂载点大小以及使用率等。

 mount | grep tmpfsdevtmpfs 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 -hTFilesystem     Type     Size Used Avail Use% Mounted ondevtmpfs       devtmpfs 909M     0 909M   0% /devtmpfs         tmpfs     920M     0 920M   0% /dev/shmtmpfs         tmpfs     920M   17M 903M   2% /runtmpfs         tmpfs     920M     0 920M   0% /sys/fs/cgroup/dev/sda3     xfs       14G 3.2G   11G 24% //dev/sda1     xfs     1014M 181M 834M 18% /boottmpfs         tmpfs     184M     0 184M   0% /run/user/0

使用tmpfs文件系统

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

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

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%(我擦,从这里我可以逆向推机器的物理内存大小了~~)

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

 


http://www.ppmy.cn/server/137733.html

相关文章

【C/C++】qsort函数的学习与使用

零.导言 在之前的文章中,我介绍了冒泡排序,即按ASCII码值把元素从小到大排序(文章链接我放在了第五部分,有兴趣的小伙伴可以求看看)。而今天我将继续介绍qsort函数,这个函数可以起到和冒泡排序一样的作用&a…

【数据结构】数组和向量

### 什么是数组? 想象一下,你有一个装糖果的长盒子。这个盒子里有很多小格子,每个格子里可以放一颗糖果。数组就像这个盒子,每个小格子就是一个位置,我们叫它“元素”。当你想找某颗糖果时,只需要知道它在…

数据结构初识及顺序表详解

目录 1.数据结构相关概念 2.为什么需要数据结构? 3.顺序表 1.概念 2.结构 3.顺序表的类型 3.1静态顺序表 3.2动态顺序表 4.顺序表的实现 1.准备工作 2.基础接口实现 2.1创建动态顺序表结构 2.2顺序表初始化 2.3顺序表的销毁 2.4顺序表的打印 3.顺序…

Rust 力扣 - 238. 除自身以外数组的乘积

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题主要有个关键点,就是元素能取0,然后我们分类讨论元素为0的数量 如果数组中存在至少两个元素为0,则每个元素的除自身以外的乘积为0如果数组中仅存在一个0,则为…

【React】react-app-env.d.ts 文件

在使用 create-react-app 生成的 TypeScript 项目模板中,react-app-env.d.ts 文件的作用是为 React 应用中的全局变量和类型进行声明。 全局类型声明:react-app-env.d.ts 文件会引入 react-scripts 提供的全局类型定义,这些类型定义扩展了 Ty…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年,俄罗斯搜索引擎Yandex(俄语意为:语言目录)首次上线,已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

网址访问小工具(模拟浏览器)

网址访问小工具(模拟浏览器) 文章说明核心代码运行截图源码下载 文章说明 本篇文章主要是我写的一个小demo,感觉效果还蛮不错的,作为一个记录新想法的实现思路;介绍了模拟浏览器页面的一些页面实现的小细节。 采用vue3…

如何为STM32的EXTI(外部中断)编写程序

要为STM32的EXTI(外部中断)编写程序,你需要遵循以下步骤: 1. 初始化GPIO 首先,需要初始化连接到外部中断线的GPIO引脚。这个引脚需要配置为输入模式,并且根据需要选择上拉、下拉或浮空。 GPIO_InitTypeDe…