通用文件模型

一、通用文件模型

        通常一个完整的Linux系统有数千到数百万个文件组成,文件中存储了程序、数据和各种信息。层次化的目录结构用于对文件进行编排和分组。

 1.ReiserFS(新型的文件系统) -->Reiser4

        它通过一种与众不同的方式----完全平衡树来容纳数据,包括文件数据、文件名、日志支持。它还可以支持少量磁盘和阵列,并能在上面继续保持很快的搜索速度和很高的效率。特点:先进的日志机制。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘,文件与数据的安全性有了很大的提高。

        高效的磁盘空间利用、独特的搜寻方式、支持海量磁盘、有意的性能、搜寻方式、空间分配和利用情况。

2.Ext4 -->Linux系统下的日志式文件系统,Ext3应用广泛

        更大的文件系统和更大的文件(Ext3文件系统最多支持32TB文件系统和2TB文件,实际比容量少很多,文件系统2TB和16GB文件。Ext4文件系统容量达到1EB,文件容量则达到16TB);更多的子目录数量;更多的块和i-节点数(Ext3文件系统使用32位空间,Ext4文件系统扩充到64位);多块分配;持久性性预分配;盘区结构;新的i-节点结构;日志检验功能;在线碎片整理。

3、XFS--> 高性能的日志文件系统:XFS 极具伸缩性、非常健壮

        数据完全性、可扩展性(最大支持文件大小为 9exabytes,最大文件系统尺寸为 18exabytes)、传输特性、传输带宽(单个文件系统测试,吞吐量最高达 7GB 每秒,对常见文件读写操作吞吐量可达 4GB 每秒)。
内核支持 40 多种文件系统,MS-DOS 的 FAT 文件系统,UFS(berkeley UNIX)、网络文件系统(coda 和 NFS)和虚拟文件系统(如 proc)。 

  1. XFS 文件系统特性

    • 基础定位:XFS 被定义为 “高性能的日志文件系统”,核心优势是伸缩性强健壮性高
    • 数据能力
      • 数据完全性:确保数据存储、读写过程中的完整性,减少数据丢失风险。
      • 可扩展性:支持超大文件和文件系统,最大文件大小达 9 exabytes(1 exabyte = 10²⁴字节),文件系统尺寸最大为 18 exabytes,适合大规模数据存储场景。
    • 传输性能
      • 单个文件系统测试中,吞吐量最高达 7GB / 秒;针对常见文件的读写操作,吞吐量也能达到 4GB / 秒,体现高效的数据传输能力。
  2. 内核支持的文件系统类型

    • MS-DOS 的 FAT 文件系统:早期广泛用于 Windows 系统的文件系统,兼容性强,适合存储小型文件。
    • UFS(Berkeley UNIX):UNIX 系统衍生的文件系统,常用于类 UNIX 系统(如 FreeBSD),具备高效的磁盘管理能力。
    • 网络文件系统:包括 coda 和 NFS(网络文件系统),用于跨网络共享文件,实现不同主机间的数据访问。
    • 虚拟文件系统(如 proc):不实际存储在磁盘上,而是映射系统运行时的资源(如进程信息),典型代表是 proc(记录系统进程状态、硬件信息等)。

三种文件系统对比如下:

 

文件系统类型一般分为三种:

1.基于磁盘的文件系统(Dish-based Filesystem)

2.虚拟文件系统(Virtual Filesystem)

3.网络文件系统(Network Filesystem)

        内核处理 文件的关键是inode,每个文件和目录都有且只有一个inode,其中包含元数据(如访问权限、上次修改的日期等)和指向文件数据的指针。

        

4.inode

        Linux内核文件系统最重要的数据结构是inode,则一个inode就代表一个文件,inode结构体保存文件的大小,文件的块大小、创建时间等各种参数。一个文件的inode只有唯一一个。

         文件存储在“块”当中,很显然我们必须要找到一个地方存储此文件的“元信息”,比如文件大小、文件作者、文件创建日期等。在存储文件元新息的区域就叫做inode(索引节点)。inode也会占用硬盘空间,所以我们在硬盘格式化的时候,操作系统自动将硬盘分为两个区域:一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode节点的大小一般是128字节或者256字节。

        我们可以通过df命令来查看硬盘分区查看硬盘分区的inode总数和已使用的数量:

         inode的成员可能分为两类:描述文件状态的元数据(比如访问权限、文件大小等);保存实际文件内容的数据段(指向数据的指针,文本文件用于保存文本)。

        查找起始于 inode,它表示根目录 /,对系统来讲必须总是已知的,该目录由一个 inode 表示,其数据段并不包含普通数据,而是根目录下的各个目录项,这些项可能代表文件或者其它目录,每个项由两个成员组成:该目录项的数据所在 inode 的编号;文件或目录的名称。
        系统中所有 inode 都有一个特定的编号,用于唯一地标识各个 inode。文件名称和 inode 之间的关联即通过该编号直接建立的,
        查找操作当中第一步查找子目录 usr 的 inode,这一步会扫描根 inode 数据段,直至找到一个名为 usr 的目录项,可以根据 inode 编号直接定位。

1. 根目录 inode:系统的 “总目录卡”

把 Linux 文件系统想象成一个大型图书馆,根目录/就像图书馆的 “总目录”。而根目录对应的 inode,就是这张 “总目录卡”。这张卡里不存书的内容(不是普通数据),而是记录了图书馆里有哪些 “小书架”(子目录)和 “书”(文件)—— 这些记录就是 “目录项”。每个目录项包含两个关键信息:

  • inode 编号:类似书架的唯一编号,标识这个目录或文件对应的 inode。
  • 名称:比如 “usr”“etc”,就像书架上的书名标签。

2. inode 编号:inode 的 “身份证”

系统里每个 inode 都有独一无二的编号,就像每个人的身份证号。通过这个编号,系统能精准找到对应的 inode。文件名称和 inode 的关联,全靠这个编号建立。比如,你知道一本书的名字,图书馆系统通过编号就能定位到对应书架(inode)。

3. 查找子目录的过程:给系统 “查目录卡”

当你要找/usr这个子目录时,系统就像在翻根目录的 “总目录卡”(扫描根 inode 的数据段)。一页页找,直到发现写着 “usr” 的目录项。找到后,通过目录项里的 inode 编号,就能直接定位到usr目录对应的 inode,就像通过书架编号找到具体书架一样。
整个过程就像:知道书名(usr)→ 查总目录卡(根 inode 目录项)→ 拿编号找书架(定位 inode),逻辑清晰又高效。

 

5.索引节点

        在文件系统中,每个文件对应一个索引节点,索引节点描述两类数据信息。

        文件的属性,也称为元数据(metadata);文件数据的存储位置。当内核访问存储设备上的一个文件时,会在内核中创建索引节点的一个副本。

1. 索引节点记录的两类 “核心信息”

  • 文件的属性(元数据)
    就像卡片上记录的 “书名、作者、出版社、页数、是否绝版” 等信息。对应到文件里,就是文件的权限(谁能读 / 写)、文件类型(是普通文件还是目录)、创建时间、修改时间、文件大小等 “描述性内容”,这些不直接是文件的实际数据,却能帮系统和用户快速了解文件 “基本档案”。
  • 文件数据的存储位置
    卡片上还会记录 “这本书放在图书馆几楼几号书架”。对应到文件系统里,inode 会记录文件的数据块存放在存储设备(如硬盘)的哪些具体位置,这样系统才能知道该去磁盘的哪里读取文件的真实内容。

2. 内核创建索引节点副本的作用

当 “图书馆工作人员(内核)” 需要访问一本书(文件)时,不会一直拿着原本的卡片(存储设备上的 inode)跑来跑去。而是先制作一张 “临时卡片”(在内核中创建 inode 的副本)。
这样做的好处是:内核可以快速在内核空间使用这张临时卡片处理文件相关操作(比如读取文件属性、定位数据位置),效率更高,也避免频繁读写存储设备上的原始 inode,就像工作人员用临时卡片记录信息,方便快速查阅和操作,用完后再同步回原卡片即可。

6.文件分类 

        普通文件、目录、符号链接、字符设备文件、块设备文件、命名管道(FIFO)、套接字(socket)。

        字符设备文件、块设备文件、命名管道(FIFO)、套接字(socket)这4中是特殊文件,这些文件只有索引节点没有数据。字符设备文件和块设备文件用来存储设备号,直接把设备号存储在索引节点中。

这些特殊文件虽只有索引节点(inode)却能处理数据,是因为它们的 “数据承载与操作逻辑” 不靠传统文件数据块,而是依赖内核其他模块,具体原理如下:

1. 字符设备文件、块设备文件

  • 核心逻辑
    设备文件的 inode 里存的不是数据,而是 设备驱动操作函数指针。比如读取字符设备文件时,系统通过 inode 找到对应驱动的读函数,直接操作硬件(如串口读取数据);写块设备文件时,通过 inode 关联的驱动写函数,把数据写入磁盘等硬件。
  • 数据去向
    数据不存文件系统的数据块,而是直接和硬件交互。例如,读串口设备文件,数据从串口硬件流入用户空间;写硬盘块设备文件,数据通过驱动写入硬盘物理扇区,和文件系统的 “文件数据存储” 机制完全不同。

2. 命名管道(FIFO)

  • 数据存储
    FIFO 的数据存于 内存缓冲区。创建 FIFO 文件时,内核分配一块内存作为管道队列。读操作从队列取数据,写操作向队列存数据。
  • inode 的作用
    inode 记录管道的元信息(如读写权限、队列状态),但不存实际数据。数据在内存管道中流转,比如两个进程通过 FIFO 通信,写进程把数据放内存队列,读进程从队列取,全程不依赖文件系统的数据块。

3. 套接字(socket)

  • 数据处理
    socket 文件的 inode 关联 网络协议栈。发送数据时,用户空间通过 socket inode 的操作接口,把数据交给网络协议栈(如 TCP/IP 模块),由协议栈处理封装、传输;接收数据时,协议栈把数据存入内核缓冲区,用户通过 socket 接口读取。
  • 无文件数据块
    数据全程在网络模块、协议栈缓冲区中处理,不存储在文件系统的数据块里,socket 文件仅作为内核网络功能的 “访问入口”,靠 inode 提供操作接口。

 

7.链接

        在Linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接分为两种:一种是硬链接(Hard Link),另一种是软连接,也称为符号链接(Symbolic Link)。

        【硬链接】相当于给一个文件多取了一个名称,多个文件名称对应同一个索引节点,索引节点的成员i_nlink是硬链接的计数。

        【软链接】这种文件的数据是另一个文件的路径,软连接可对文件或者目录创建。

        索引节点的成员i_op指向索引节点操作命令inode_operations,i_fop指向文件操作集合file_operations。两者间的区别:inode_operations用来操作目录和文件属性,file_operations用来访问文件数据。

        硬链接:通过索引节点来进行链接,在Linux文件系统中,保存在磁盘分区中的文件不管是什么类型都会给他分配一个编号,这个编号被称为索引节点编号(inode index)。硬链接作用之一是允许一个文件拥有多个有效路径名称,这样用户就可以建立硬链接到重要文件,以防止“误删除”源数据。 

  1. “书的唯一编号”—— inode 编号
    图书馆里每本书(不管是小说、工具书,对应文件系统里的普通文件、特殊文件),都会被分配一个独一无二的编号(类似书的 ISBN 码),这个编号就是文件的 inode 编号。它贴在书里,是这本书的 “身份证”,记录着书的内容存放在图书馆的哪个位置(对应文件数据的存储位置)。

  2. “多个书签指向同一本书”—— 硬链接
    假设你有一本很重要的书《Linux 秘籍》,原本它放在书架 A,对应一个书签(文件名)。现在,你用硬链接创建另一个书签,标记为 “珍贵资料”。这个新书签和原来的书签,都指向《Linux 秘籍》的编号(inode 编号)。
    此时,这本书有了两个 “访问身份”,但实际内容还是同一批。

  3. “防误删” 的原理
    如果有人不小心撕了书架 A 的书签(删除文件名),只要 “珍贵资料” 这个书签还在,依然能通过它找到《Linux 秘籍》。因为两个书签关联的是同一个编号(inode),只要编号还在,书的内容就不会消失。
    对应到文件系统:硬链接让一个文件有多个文件名,但共享同一个 inode。删除其中一个文件名,只要还有其他硬链接存在,inode 就不会被真正删除,文件数据也会保留,起到 “防误删” 的作用。

        软连接:便于文件的管理,比如把一个复杂路径下的文件链接到一个简单路径下方便用户访问。

        节省解决空间不足,某个文件的文件系统空间已经用完,但是必须在该文件系统下创建一个新的目录并存储大量的文件,可以把另一个剩余空间比较多的文件系统中的目录链接到该文件系统当中,删除软链接并不会影响被指向的文件,但是被指向的文件被删除,相关的软连接就成了死链接。

1. 软连接的本质:一个 “路标文件”

  • 想象场景
    图书馆里有本珍贵的书《Linux 秘籍》,存放在 A 区 3 号书架。你想在 B 区 5 号书架 放一个 “路标”,上面写着:“《Linux 秘籍》 → A 区 3 号书架”。这个 “路标” 就是软连接。
  • 技术细节
    软连接是一个独立的文件,有自己的 inode 编号,但它的数据内容只是目标文件的路径(比如 A区3号书架)。内核访问软连接时,会先读取这个路径,再跳转到目标文件。

 

一、软链接规则的底层逻辑(用 “路标” 比喻)

  1. 存路径形式
    软链接就像一张写着 “目标文件地址” 的纸条。比如你在图书馆 A 区有本书,软链接就是一张纸条,上面写 “书在 A 区 3 排 5 号”。它本身是独立文件,只存路径,所以内核访问时,先读纸条内容,再找目标文件。

  2. 能跨文件系统
    硬链接依赖 “文件系统内的唯一房号(inode)”,但软链接像 “全城通用的导航地址”。无论目标文件在哪个 “小区(文件系统)”,只要路径写对,软链接都能指向,就像导航不管目的地在哪个城区,都能指路。

  3. 可链接不存在的文件
    软链接这张 “纸条” 只负责写地址,不检查目标是否存在。比如你先写 “未来会有一本《新书》在 A 区”,软链接允许先创建这个 “规划中的地址”。而硬链接必须先有真实存在的 “书(文件)”,才能复制它的 “房号(inode)”。

  4. 可对目录链接
    软链接指向目录,就像给大楼贴个 “楼内地图指引”,只是告诉用户 “目录在这里”,不会破坏系统结构。但硬链接若允许目录,会让目录结构像 “无限循环的迷宫”(比如 A 目录硬链接到 B,B 又硬链接回 A),系统无法管理,所以禁止。


二、硬链接规则的底层逻辑(用 “共享书籍” 比喻)

  1. 以副本形式存在但不占空间
    硬链接像给同一本书做多个 “书签”。书的内容(数据块)只有一份,多个书签(硬链接)共享书的内容,不产生新数据,所以不占额外空间。

  2. 不允许给目录创建硬链接
    目录结构是文件系统的 “楼层地图”,如果给目录创建硬链接,会让 “地图” 循环(如目录 A 硬链接到目录 B,目录 B 又关联回 A),系统像走进死循环的迷宫,无法正确遍历目录,因此直接禁止。

  3. 只能在同文件系统创建
    每个文件系统的 inode 编号是 “本小区房号”,不同文件系统的 “房号” 可能重复。硬链接依赖 inode 编号定位文件,跨文件系统时 “房号” 会混乱(比如两个小区都有 101 号房),所以只能在同文件系统内创建。

  4. 删除一个硬链接不影响其他
    inode 有一个 “被引用计数”,每创建一个硬链接,计数加 1。删除一个硬链接,只是计数减 1。只要计数 > 0,文件就像 “还有人借的书”,不会消失。只有所有硬链接都删除(计数归 0),文件才会被真正删除。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品管理过程-思维导图

产品管理过程 1. 市场调研 与用户交流与直接面对客户的一线同事如销售、客服、技术支持等交流市场研究报告分析竞争对手分析用户数据分析 2. 需求管理 需求来源管理 市场需求内部需求运营需求战略需求其它需求 需求版本管理 需求分配管理 需求跟踪管理 3. 产品规划 市…

EtherNet/IP转Modbus解析基于网关模块的罗克韦尔PLC与Modbus上位机协议转换通讯案例

在工业自动化控制系统中,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中,客户现场采用了 AB PLC,但需要控制的变频器仅支持 Modbus 协议。为了实现 AB PLC 对变频器的有效控制与监控,引入了捷米特 JM-EIP-RTU 网…

【进程和线程】(面试高频考点)

【进程和线程】 前言 在计算机编程领域,并发编程是一项至关重要的技术,而进程和线程正是实现并发编程的核心概念。为了让大家更直观地理解并发编程的作用,我们先来看一个简单的生活例子。 想象一下,现在有一大份美味的饭菜&…

HTML 编辑器推荐与 VS Code 使用教程

在进行 HTML 编程时,选择一款合适的 HTML 编辑器能极大地提高开发效率。以下为大家推荐几款常用且功能强大的 HTML 编辑器,同时详细介绍如何使用 VS Code 创建和预览 HTML 文件。 一、HTML 编辑器推荐 VS Code:由微软开发,是一款…

Kubernetes开发环境minikube | 开发部署apache tomcat web集群应用

minikube是一个主要用于开发与测试Kubernetes应用的运行环境,本文主要描述在minikube运行环境中部署J2EE tomcat web应用。 单节点Node多Pod实例部署 如上所示,在minikube运行的Linux部署环境中启动单节点Node 如上所示,在minikube的容器环境…

STM32---FreeRTOS中断管理试验

一、实验 实验目的:学会使用FreeRTOS的中断管理 创建两个定时器,一个优先级为4,另一个优先级为6;注意:系统所管理的优先级范围 :5~15 现象:两个定时器每1s,打印一段字符串&#x…

永磁直驱式风力发电虚拟同步机仿真模型Matlab/Simulink模型

很久没有分享虚拟同步机控制相关的方向了,毕业后在电科院的项目又有所接触。这个课题方向其实作为硕士毕业课题还是够用的,相对来说也是比较容易毕业的,因为涉及的分支比较多。 后续对虚拟同步机的控制,我就延续我前面博客提到的方…

图像分类项目1:基于卷积神经网络的动物图像分类

1、选题背景及动机 在现代社会中,图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用,例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类,可以帮助人们更好地了解动物种类、数量和分布情况,从…

Vue 3 整合 WangEditor 富文本编辑器:从基础到高级实践

本文将详细介绍如何在 Vue 3 项目中集成 WangEditor 富文本编辑器,实现图文混排、自定义扩展等高阶功能。 一、为什么选择 WangEditor? 作为国内流行的开源富文本编辑器,WangEditor 具有以下优势: 轻量高效:压缩后仅…

Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 4 部分

附件下载 联系工作人员获取附件 在 OpticStudio 中使用 RCWA 工具为增强现实(AR)系统设置出瞳扩展器(EPE)的示例中,首先解释了k空间中光栅的规划,并详细讨论了设置每个光栅的步骤。 介绍 本文是该四篇文…

CMake学习笔记(一):工程的新建和如何将源文件生成二进制文件

cmake是我们在工作过程中比较常见的一个工具,该系列文章是自己用来学习的笔记。目前只是记录下自己学习cmake的过程中的一些重要的知识点,其是以项目需求为导向并非完整的cmake的学习路线和系统,同样也并非适合所有的人。 1.生成一个可执行文…

libcoap在Ubuntu下的编译(基于CMake)

引言 libcoap 是一个开源的轻量级 C 语言库,用于实现 CoAP(Constrained Application Protocol,受限应用协议)。CoAP 是一种专为资源受限设备设计的轻量级通信协议,适用于物联网(IoT)和嵌入式系…

Docker新手入门(持续更新中)

一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。 所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器,为每个镜像的应用进程创建…

蓝桥杯C组真题——巧克力

题目如下 思路 代码及解析如下 谢谢观看

SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决

介绍一下我的是ubuntu20.04.机载电脑是orinnx,通过源码烧写的系统。 首先打开终端,输入 pip install evo --upgrade --no-binary evo 安装过程中出现如下问题 缺少 onnx 库还有Pandas 版本不兼容, ONNX(Open Neural Network E…

在虚拟机上安装hadoop

在虚拟机上安装 Hadoop 是一个常见的实验环境搭建过程。以下是详细的步骤和注意事项: 前面的课程我们已经准备好了三台虚拟设备球供我们学习大数据技术,今天我们将使用其中的一台设备来运行第一个hadoop 程序。 运行第一个 hadoop程序 要运行 hadoop 程序…

Redis 常见数据类型

官方文档 RedisCommands 1)Redis 的命令有上百个,如果纯靠死记硬背比较困难,但是如果理解 Redis 的一些机制,会发现这些命令有很强的通用性。 2)Redis 不是万金油,有些数据结构和命令必须在特定场景下使用…

VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

永磁同步电机无速度算法--改进滑模观测器SMO(边界层法)

一、原理介绍 根据滑模观测器的定义,其切换函数是一个拥有高频切换特性的不连续项,为了进一步减小系统的抖振,将符号函数替换为Sigmoid函数,该函数为一种连续、光滑的切换函数,对抖振有良好的抑制效果,其数…

基于SpringBoot+mybatis+layui就业管理系统设计和实现

基于SpringBootmybatislayui就业管理系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &…