当前位置: 首页 > news >正文

《Linux从小白到高手》综合应用篇:深入详解Linux临时文件系统

1. 引言:

本篇深入介绍Linux临时文件系统。

tmpfs的基本概念

  1. Linux 临时文件系统(Temporary File System,简称 tmpfs)是一种基于内存的文件系统。它将文件存储在内存中,而不是像传统的文件系统那样存储在磁盘等物理存储设备上。这使得对文件的读写操作非常快,因为内存的读写速度远远高于磁盘。
    tmpfs 主要用于存储那些在系统运行过程中不需要长期保存的数据,比如临时文件、缓存数据等。它的大小可以根据系统内存的使用情况动态调整,并且在系统重启后,tmpfs 中的数据会丢失。
  2. tmpfs是ramfs的衍生品,而ramfs是基于RAM的文件系统。与ramfs相比,tmpfs具有更多的功能和优势,如动态释放空间、使用swap空间以及在挂载时可以指定大小来控制内存使用等。tmpfs是存储在Linux虚拟内存(VM)上的文件系统,由物理内存(RM)和swap空间组成。
  3. tmpfs各项说明:
    在这里插入图片描述
    /dev:
    dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
    /dev/shm:
    /dev/shm/是一个设备文件,它使用就是tmpfs文件系统
    /run:
    它被识别为 “tmpfs”(临时文件系统),因此我们知道 /run 中的文件和目录没有存储在磁盘上,而只存储在内存中。
    它们表示保存在内存(或基于磁盘的交换空间swap)中的数据,它看起来像是一个已挂载的文件系统,这个可以使其更易于访问和管理。
    /sys/fs/cgroup:
    Cgroup是将任意进程进行分组化管理的Linux内核功能,cgroup本身提供将进程进行分组化管理的功能和接口的基础结构
    /run/user/0:我们看到的/run/user/下的每个目录与当前登录的用户或显示管理器 gdm 相关。数字代表他们的 UID。
    /run/user/0 :表示root用户
    /run/user/42 :表示某个普通用户

2. tmpfs工作原理

  1. 内存分配:当挂载 tmpfs 文件系统时,系统会从内存中分配一块区域用于存储文件。这个区域的大小可以在挂载时指定,也可以使用默认值。例如,通过命令 “mount -t tmpfs -o size = 100M tmpfs /mnt/tmp” 可以将一个大小为 100MB 的 tmpfs 文件系统挂载到 /mnt/tmp 目录下。
  2. 数据存储与读写:文件数据以内存中的字节数组形式存储。在进行文件读写操作时,就像在普通文件系统中一样,通过文件系统接口进行操作。但是由于数据存储在内存中,读写操作的速度更快。例如,当一个程序频繁地读取和写入一个临时配置文件时,使用 tmpfs 可以显著提高程序的性能。
  3. 动态调整大小:tmpfs 的大小可以根据内存的使用情况和系统的需求动态变化。如果系统内存紧张,tmpfs 会自动释放一些内存空间;如果有更多的内存可用,并且有程序需要使用 tmpfs 存储更多的数据,它可以扩大自己的存储空间。

3. tmpfs的优点

  1. 速度快:
    由于数据存储在内存中,读写速度比传统磁盘文件系统快很多。对于需要频繁读写临时文件的应用程序,如编译器在编译过程中生成的中间文件,使用 tmpfs 可以大大加快编译速度。以 GCC 编译器为例,当把临时文件存储在 tmpfs 上时,编译大型项目的时间可能会缩短数倍。
  2. 灵活性高:
    可以根据实际需要灵活地挂载和卸载。可以在系统启动时挂载,也可以在程序运行过程中根据需要动态挂载。而且大小可以灵活调整,这使得系统管理员可以根据服务器的内存资源和应用程序的需求合理配置 tmpfs 的大小。
  3. 动态调节大小:tmpfs的大小是动态的,它可以根据需要分配和释放内存空间。这意味着当临时文件被创建或删除时,tmpfs会自动调整其大小以适应需求。
  4. 易于使用:tmpfs不需要格式化就可以使用,因为它建立在虚拟内存上。这简化了临时文件系统的设置和管理过程。
    提高系统稳定性:通过控制tmpfs使用内存的大小,可以防止因临时文件过多而导致的内存溢出和系统崩溃。
  5. 安全性好:
    因为 tmpfs 中的数据在系统重启后会丢失,所以对于一些敏感的临时数据,如用户登录会话中的临时密钥等,即使系统意外重启,这些数据也不会残留在存储设备上,降低了数据泄露的风险。

4. tmpfs缺点

  1. 易失性:
    这是 tmpfs 最大的缺点。由于数据存储在内存中,系统断电或重启后数据会丢失。因此,它不能用于存储需要长期保存的数据。例如,如果将数据库的事务日志存储在 tmpfs 中,一旦系统出现故障,事务日志丢失可能会导致数据不一致等严重问题。
  2. 占用内存资源:
    如果不谨慎使用,可能会占用大量的内存。例如,在一个内存有限的系统中,如果一个程序无节制地在 tmpfs 中存储大量数据,可能会导致系统内存不足,从而影响其他程序的正常运行。

5. tmpfs的应用场景

  1. 系统临时文件存储:
    许多 Linux 系统会将 /tmp 目录挂载为 tmpfs。系统中的各种程序在运行过程中会将临时文件存储在 /tmp 目录下。例如,当用户使用文本编辑器打开一个文件时,编辑器可能会在 /tmp 目录下创建一些临时文件来存储编辑过程中的缓存数据等。
  2. 应用程序缓存:
    一些应用程序会使用 tmpfs 来存储缓存数据。比如,Web 服务器可以将经常访问的网页内容缓存到 tmpfs 中,这样当有用户再次请求这些网页时,可以直接从内存中快速读取,提高了网页的访问速度。像 Nginx 和 Apache 等 Web 服务器都可以通过配置将部分缓存数据存储在 tmpfs 中。

6. Linux临时文件系统的相关操作

1. 挂载 tmpfs 文件系统

  1. 基本挂载命令:使用mount命令可以挂载 tmpfs 文件系统。语法一般为:
mount -t tmpfs [options] tmpfs mount_point

例如,要将一个 tmpfs 挂载到/mnt/tmp目录,并且指定大小为 500MB,可以使用命令mount -t tmpfs -o size=500M tmpfs /mnt/tmp。
2. 参数说明:
-t tmpfs:指定文件系统类型为 tmpfs。
-o:用于指定挂载选项。size选项用于设置 tmpfs 的大小,除了直接指定大小(如size = 500M),还可以使用size = 50%这样的格式,表示占用内存的百分比。另外,还有nr_inodes选项用于设置 inode(文件索引节点)的数量,mode选项可以设置挂载点的权限模式等。

2. 查看 tmpfs 挂载情况

  1. 使用 df 命令:df -h命令可以查看文件系统的磁盘使用情况,其中也包括 tmpfs。它会显示每个挂载点的大小、已用空间、可用空间和挂载位置等信息。例如,在输出结果中,会看到类似tmpfs 500M 0 500M 0% /mnt/tmp这样的行,其中500M是 tmpfs 的总大小,0是已用空间,500M是可用空间,0%是使用率,/mnt/tmp是挂载点。
    在这里插入图片描述
  2. 使用 mount 命令查看详细信息:直接运行mount命令会列出系统中所有已挂载的文件系统,包括 tmpfs。它会显示挂载的详细信息,如文件系统类型、挂载选项等。通过查看这些信息,可以了解 tmpfs 的挂载参数是否正确设置。
    在这里插入图片描述

3. 调整 tmpfs 大小

  1. 重新挂载方式:如果要调整已经挂载的 tmpfs 的大小,可以先卸载(umount命令),然后重新挂载并指定新的大小。例如,要将之前挂载在/mnt/tmp的 tmpfs 大小从 500MB 调整为 300MB,可以先执行umount /mnt/tmp,然后再使用mount -t tmpfs -o size = 300M tmpfs /mnt/tmp进行重新挂载。
  2. remount 选项(部分系统支持):有些 Linux 系统支持通过mount -o remount选项来重新挂载并调整大小。例如,mount -o
    remount,size = 300M /mnt/tmp(这种方式可能因系统版本和内核配置不同而有所差异)。
  3. 调整 tmpfs 大小注意事项
    mount -t tmpfs -o size=2048m tmpfs /dev/shm (这个可以安全修改)
    mount -t tmpfs -o size=2048m tmpfs /dev (这个不建议修改)
    mount -t tmpfs -o size=2048m tmpfs /sys/fs/cgroup (这个不建议修改,改大改小都有问题)
    mount -t tmpfs -o size=2048m tmpfs /run/user/0 (这个可以安全修改)
    mount -t tmpfs -o size=2048m tmpfs /run (这个不建议修改)

4. 卸载 tmpfs 文件系统

  1. 使用 umount 命令:语法为umount mount_point。例如,要卸载挂载在/mnt/tmp的 tmpfs,只需执行umount /mnt/tmp。需要注意的是,如果有程序正在使用 tmpfs 中的文件,可能无法成功卸载,此时需要先关闭相关程序或终止对这些文件的访问。
  2. 卸载 tmpfs 文件系统注意事项
    umount /dev/shm(安全)
    umount /dev (危险)
    出现busy的提示,告诉你进程被占用,杀掉进程:
    fuser -km /dev/shm (安全)
    fuser -km /dev (危险)
    再次卸载tmpfs:
    umount /dev/shm

5. 设置开机自动挂载 tmpfs

修改 /etc/fstab 文件:在/etc/fstab文件中添加一行内容来配置开机自动挂载。例如,要在开机时将一个 tmpfs 挂载到/mnt/tmp,大小为 200MB,可以添加tmpfs /mnt/tmp tmpfs defaults,size = 200M 0 0。其中,tmpfs是文件系统类型,/mnt/tmp是挂载点,defaults是挂载选项(可以根据需要修改),size = 200M指定大小,后面的0 0是 dump 和 fsck(文件系统检查)的设置,一般 tmpfs 不需要进行这些操作,所以设置为0 0。添加完成后,系统在下次开机时就会自动挂载该 tmpfs。不过,在修改/etc/fstab文件时要格外小心,因为错误的配置可能会导致系统无法正常启动。

本篇完结

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。


http://www.mrgr.cn/news/61378.html

相关文章:

  • Observability:将 OpenTelemetry 添加到你的 Flask 应用程序
  • Spring Boot项目中如何使用日志记录
  • 【“软件工程”基础概念学习】
  • 大模型评测
  • day07_Spark SQL
  • 传奇3仿韩服单机版安装教程+GM管理面板
  • 小米迎来「新起点」:硬核创新从超越到引领,小米SU7 Ultra 发布
  • 八、MapReduce 大规模数据处理深度剖析与实战指南
  • 01.如何用DDD重构老项目
  • pyav保存视频
  • 数据库基础介绍
  • 【C++初阶】模版入门看这一篇就够了
  • 【p2p、分布式,区块链笔记 Torrent】WebTorrent的上传和下载界面
  • 抽象类和接口的区别
  • PostgreSQL数据类型怎么选?
  • LiNo论文解析
  • 【每日刷题】Day145
  • 架构师备考-背诵精华(计算机语言)
  • Java Lock Condition 源码
  • 代码质量与项目进度的博弈
  • Homework 1 - Random Distribution Related
  • 手写ioc容器(简易版)
  • 【jvm】如何设置堆内存大小
  • 事务学习一
  • 年薪百万打工人自爆:我的大厂生存指南!
  • 使用DeepLabV3实现植叶病害检测