tmpfs文件系统介绍

2023-12-30 13:52
文章标签 介绍 文件系统 tmpfs

本文主要是介绍tmpfs文件系统介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

        tmpfs是一种基于内存的文件系统,它将一部分系统内存用作临时存储空间。在Linux系统中,tmpfs常用于挂载临时目录,如/run、/tmp和var等目录,用于存储临时文件、进程运行时数据和其他临时性数据。

tmpfs的优点:

  1. 快速访问:由于tmpfs将数据存储在内存中,读写速度非常快,比传统的磁盘文件系统更高效。

  2. 自动分配和释放内存:tmpfs会根据需要动态分配和释放内存空间,根据文件的使用情况进行调整(

    tmpfs内部使用了一种称为"page cache"的机制来管理内存。Page cache是一种内核中的缓存机制,用于将文件数据从磁盘加载到内存中,并在需要时进行读取和写入操作。tmpfs使用page cache来缓存tmpfs文件系统中的数据。

    当文件被写入tmpfs时,内核会将数据存储在page cache中,并将其标记为属于tmpfs文件系统。如果系统内存足够,数据将保留在内存中,以提供快速的读写访问。如果系统内存不足,内核会根据一定的策略将部分数据写回到磁盘,以释放内存空间。

  3. 临时性:tmpfs中的数据在系统重启后会被清除,因此适合存储临时文件和临时数据。

要在Linux系统上使用tmpfs,可以使用mount命令将其挂载到指定的目录。以下是一个示例:

sudo mount -t tmpfs -o size=1G tmpfs /var

这将创建一个1GB大小的tmpfs实例,并将其挂载到指定的目录。可以根据需要调整size参数的值。

二、tmpfs挂载

        tmpfs的大小和使用方式可以通过挂载选项进行配置。在挂载tmpfs时,可以指定其大小、文件系统权限等参数。下面是一些常用的挂载选项:

  1. rw:挂载为可读写的文件系统。
  2. seclabel:启用安全标签(SELinux)支持。
  3. nosuid:禁止设置文件的SUID和SGID权限位。
  4. nodev:禁止在文件系统上创建特殊设备文件。
  5. size:指定tmpfs文件系统的最大大小。这个值表示以字节为单位的大小,可以使用K(千字节)、M(兆字节)或G(千兆字节)作为后缀,例如size=1G表示1GB大小的tmpfs文件系统。
  6. nr_inodes:指定tmpfs文件系统的最大inode数量(文件和目录的索引节点)。这个值表示tmpfs文件系统可以支持的最大文件和目录数量。
  7. mode:指定tmpfs文件系统的默认权限模式。这个值表示文件和目录的默认权限,通常以八进制表示,例如mode=1777表示权限为rwxrwxrwt。

通过设置不同的挂载选项,可以为不同的目录(如/run和/tmp)创建不同大小的tmpfs实例,并为其设置不同的权限和所有者,这些参数可以根据需要进行调整。例如,可以根据系统的内存情况和使用需求来设置size参数,以控制tmpfs文件系统的大小。nr_inodes参数可以用于限制tmpfs文件系统中的文件和目录数量,以防止过多的文件占用内存。

例如,可以使用以下命令将一个1GB大小的tmpfs挂载到/run目录:

sudo mount -t tmpfs -o size=1G tmpfs /run

有时看到系统启动后可以看到多个tmpfs目录,并且每个目录大小不同,其就是通过size来指定的,如下:

# df | grep tmpfs
tmpfs                   326460      1128    425632   1% /run
tmpfs                   326460         0    526760   0% /sys/fs/cgroup
tmpfs                   326460      2840    323620   1% /var/cache
 

再比如一些多参数解析:

tmpfs /run tmpfs rw,seclabel,nosuid,nodev,size=481160k,nr_inodes=12545,mode=755 0 0

这里主要介绍后两位0 0,其他参考上述参数含义。

0 0:这是用于文件系统检查和备份的选项,表示在启动时不进行文件系统检查,并且不进行备份。

  • 第一个0:表示在系统启动时对该文件系统进行检查的顺序。0表示不进行检查,1表示首先检查,2表示在其他文件系统之后检查。
  • 第二个0:表示备份选项。0表示不进行备份,1表示备。
  • 挂载选项中的0 0只是用于指定文件系统检查和备份的选项,并不直接执行备份操作,如需备份需通过tarrsynccp等来进行文件系统的备份操作。

三、fstab和mtab区别和调用

  /etc/fstab/etc/mtab是两个不同的文件,用于存储关于文件系统挂载和已挂载文件系统的信息。

  • /etc/fstab(文件系统表)是一个静态的配置文件,用于定义系统在启动时应该如何挂载文件系统。它包含了文件系统的设备名、挂载点、文件系统类型以及挂载选项等信息。通过编辑/etc/fstab文件,可以配置系统在启动时自动挂载所需的文件系统。

  • /etc/mtab(挂载表)是一个动态的文件,记录了当前已挂载的文件系统的信息。它包含了已挂载文件系统的设备名、挂载点、文件系统类型、挂载选项以及挂载的状态等息。/etc/mtab文件是由系统自动生成和更新的,它反映了当前系统中的挂载情况。可以看到mtab是软链接到/proc/self/mounts中的,而mounts是由内核生成的节点。

ls -l /etc/mtab
lrwxrwxrwx 1 root root 19 Nov 25 10:29 /etc/mtab -> ../proc/self/mounts

对于如何调用以及在哪里调用的,由上可知mtab是由内核来记录的。对于fstab,通常是这样的:

内核代码init_main.c(kernel_init函数)----->try_to_run_init_process("/sbin/init")----->systemd----->systemd 会读取并解析 /etc/fstab 文件,然后根据其中的配置信息挂载文件系统。

  1. 文件系统设备或UUID:指定要挂载的文件系统的设备名称或UUID。
  2. 挂载点:指定文件系统要挂载到的目录。
  3. 文件系统类型:指定文件系统的类型,如 ext4、ntfs、tmpfs 等。
  4. 挂载选项:指定挂载时的选项,如读写权限、自动挂载等。
  5. dump:用于备份的标志,一般设置为 0 或者 1。
  6. fsck:指定系统启动时是否需要进行文件系统检查,一般设置为 0、1 或者 2。

对于 dump 标志,一般设置为 0 或 1。其中,0 表示不需要备份,1 表示需要备份。通常,对于不需要备份的文件系统,可以将其设置为 0。

对于 fsck 标志,一般设置为 0、1 或 2。其中,0 表示不需要进行文件系统检查,1 表示在启动时进行文件系统检查,2 表示进行文件系统检查,但如果文件系统标记为 "clean",则跳过检查。通常,对于根文件系统,建议将其设置为 1,以确保在系统启动时进行文件系统检查。

以下是一个示例 /etc/fstab 文件的片段,展示了如何设置 dump 和 fsck 标志:

/dev/sda1    /    ext4    defaults    1    1
/dev/sdb1    /data    ext4    defaults    0    2

说明:/sbin/init实际上是一个符号链接,指向真正的初始化程序,如systemdSysV init等。

四、tmp清除规则

systemd有systemd-tmpfiles-clean.service相关服务,可借助此来完成。

/etc/tmpfiles.d/tmp-cleanup.conf
# 清除tmp目录下的临时文件和目录
# 清除规则的格式为:d <路径> <权限> <所有者> <组> <延迟>
# - 表示删除文件或目录
# L 表示遵循符号链接
# r 表示递归删除目录中的文件和子目录
# /tmp/whitelist 表示白名单文件路径
# /tmp/blacklist 表示黑名单文件路径# 清除tmp目录下的所有文件和目录
/tmp/* - - - - -# 从白名单文件中读取要保留的文件和目录
/tmp/whitelist r! - - - -# 从黑名单文件中读取要删除的文件和目录
/tmp/blacklist r - - - -# 设置清除间隔为每周一次
d /tmp - - - 7d

其中使用1d表示每天一次,1w表示每周一次,1m表示每月一次等。

这篇关于tmpfs文件系统介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/553041

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Linux中的缓冲区和文件系统详解

《Linux中的缓冲区和文件系统详解》:本文主要介绍Linux中的缓冲区和文件系统方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、FILE结构1、fd2、缓冲区二、文件系统1、固态硬盘2、逻辑地址LBA(一)数据块 Data blocks(二)inode表

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio