【Linux】揭开文件系统神秘的面纱:第三讲:磁盘是怎么记住每一个文件的

揭开内核的神秘面紗 - 我们究竟在调什么? 《Linux内核调优入门指南》摘要:本文揭示了Linux内核调优的核心原理,将内核比作管理硬件资源的"大管家"。作者强调调优不是盲目追求性能提升,而是根据业务类型(CPU/内存/磁盘/网络密集型)寻找平衡点。文章介绍了两个关键工具:sysctl命令用于临时调整参数,/etc/sysctl.conf文件实现永久配置,并通过实操演示vm.swappiness参数的修改过程。最后指出,理解业务负载特性比简单复制参数更有价值,为后续深入CPU调优等内容奠定基础。(150字) 阅读详情

博客横幅图

自律是普通人最大的武器


系列专栏直达链接
🐧 Linux进入专栏 →
🔤 C语言进入专栏 →
🔧 C++进入专栏 →
🐬 MySQL进入专栏 →
🧩 算法刷题进入专栏 →

🏠 博客主页:虚无的纽扣
📦 作者仓库:github | gitee

引言

前两讲我们聊的重定向和文件缓冲区,讲的都是已经打开的文件。那如果一个文件没有被打开呢?没被打开的文件在哪里存着呢?
它存在磁盘里。那么磁盘是如何把数以万计的文件进行归类摆放,让我们能快速找到的呢?操作系统中存在一个文件系统,它负责将文件以目录的形式组织起来,并通过路径帮我们快速找到所需要的文件。这就像图书馆:几百万册书按分类摆进一排排书架,每本书有自己的编号,顺着索引就能找到它

1、理解硬件

磁盘的物理结构

在这里插入图片描述

上图是一块机械硬盘拆开之后的样子,亮闪闪的圆盘叫盘片,数据就写在它上面。每有一个盘片就有两个盘面,每有一个盘面就要有一个磁头,整个硬盘只有一个传动臂,所有的磁头都在传动臂的带动下同时移动,任意时刻所有磁头都停在各盘面相同编号的磁道上,这些磁道在逻辑上共同构成的结构,我们就称为柱面

磁盘的存储结构

![[Linux/attachments/磁盘的存储结构.png|盘面上的磁道与扇区划分]]

盘片旋转时,磁头在一个固定半径的圆上划过盘面,这一圈圈同心圆就叫磁道。每条磁道再被切成一段一段,每一段就是一个扇区,扇区是磁盘存储数据的基本单位,512 字节
扇区是读写磁盘的基本单位的意思是,哪怕只修改一个扇区内的一个字节,也必须把这 512 个字节全部加载到内存里,修改完后再写回扇区

在这里插入图片描述

柱面是个逻辑概念

柱面是一个逻辑上的概念,其实就是每一面上相同编号的磁道逻辑上构成柱面。所以磁盘物理上分了很多面,但是在我们看来,逻辑上磁盘整体是由柱面卷起来的
所以磁盘的真实情况是:某一个盘面的一个磁道展开,构成一个一维数组;将一个柱面展开,即这个柱面上所有磁道展开,就是一个二维数组;整个磁盘有多个柱面,将整个磁盘展开,就构成了一个三维数组

一个盘面的一条磁道拉直      ->  一维数组
一个柱面上所有磁道拉直      ->  二维数组
整个磁盘所有柱面叠起来      ->  三维数组

CHS 定址

当我们要想将内容写到某一个扇区中,磁盘该如何移动?
先是磁臂带动磁头移动,定位到对应的柱面,然后选择读取某一个磁头所在盘面的数据,然后让盘片旋转,让扇区旋转到对应的磁头下面,这种定位方案叫做 CHS 定址,也就是 Cylinder Head Sector
CHS 定址就是先找到对应柱面 C,再找到对应磁头 H,最后找到对应扇区 S,就构成 CHS 定址,实际上就是获取了三个下标

在这里插入图片描述

LBA

磁盘上的每一个磁道,如果将它们拉直,就可以看作是一个线性结构,所以在我们定位扇区的时候只需要一个数字就能定位到对应的扇区,就是数组下标,这种地址叫做 LBA

CHS:先定柱面 C,再定磁头 H,最后定扇区 S        三个下标

LBA:整个磁盘拉直成一条线,一个下标就够
     [0] [1] [2] [3] [4] [5] [6] [7] ...        数组下标

所以操作系统对磁盘的管理就变成了对数组的管理
简单来说,CHS 地址是磁盘内部实际的存储地址,而 LBA 地址是操作系统将 CHS 整个抽象为一个超长的一维数组,在进行读取和写入时,磁盘就要将 CHS 地址和 LBA 地址进行转换

2、引入文件系统

块

硬盘是典型的“块设备”,“块设备”支持随机读取,与“块设备”相对应的是字符设备,我们的键盘就是一种字符设备,不支持随机读取,只支持顺序读取
操作系统读取磁盘数据的时候,其实是不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块
一般情况下连续八个扇区为一个块,大小为 4 KB,块是文件存取的最小单位

一个块 = 连续 8 个扇区 = 4 KB(文件存取的最小单位)

扇区   [0] [1] [2] [3] [4] [5] [6] [7]
       +-------------------------------+
       |        1 个块 = 4 KB          |
       +-------------------------------+

分区

操作系统会将整个磁盘划分为若干区域,以 Windows 观点来看,我们的磁盘往往被分成 C 盘、D 盘等盘符,这其实不是我们真的有这么多块磁盘,而是系统将一块磁盘划分为了这么多分区,分区实质上说就是对硬盘的一种格式化。但是 Linux 的设备都是以文件的形式存在,那是怎么分区的呢?
柱面就是分区的最小单位,我们可以利用柱面的号码进行分区
在分区下面,Linux 还会将一个分区划分为多个组,最终操作系统对磁盘的管理就转化成了对每个小组的管理,这种思想叫做分治思想

inode

我们知道文件 = 内容 + 属性,在 Linux 系统里,内容和属性是分开存储的
Linux 中任何正常文件,都要有自己的属性集合,每一个文件的属性在内存当中就是一个结构体,又是结构体,描述文件属性的结构体叫做 inode,一个 inode 占 128 字节,一个数据块会保存 32 个 inode(顺带说一句,这个 32 是按 128 字节的 inode 算的,ext2、ext3 是这样的;ext4 默认把 inode 扩到了 256 字节,一个数据块里就只放得下 16 个)
文件名是不会做为属性被保存在 inode 中的,因为文件名的类型为字符串类型,数据大小会根据实际文件名长度发生变动,就无法保证每一个 inode 的大小一致。所以为了识别文件,inode 里还有一个 inode 编号表示文件
所以当文件系统与内存进行交互的时候,就会一次性将 32 个文件的属性全部读到内存里,如果两个文件的 inode 存储位置很近,就意味着它们两的创建时间很接近,往往会有联系,这样的读取方式可以让我们在读取相邻文件时效率更高

块组的几个区域

在这里插入图片描述

一个块组里的区域主要有这几块:

  • data blocks:里面有很多很多个单位为 4 KB 的小数据块,我们的文件内容会被存储在这里
  • block bitmap:记录着 data blocks 中哪个数据块已经被占用,哪个数据块没有被占用
  • inode bitmap:表示 inode table 中哪个位置被占用,哪个位置没有占用
  • inode table:存放所有 inode 的表
  • GDT:块组描述符,描述块组的属性信息
  • super block:超级块,描述的是整个文件系统的文件信息

在我们对文件进行删除的时候,就不用真的将 inode 和 data blocks 里的信息删掉,只需要将对应的位图的比特位置空就行了
GDT,块组描述符,描述块组属性信息,整个分区分成多少个块组就有多少个块组描述符,每个块组描述符存储一个块组的描述信息,如在这个块组中哪里开始是 inode table,从哪里开始是 data blocks,空闲的 inode 和数据块还有多少个等等,块组描述符在每个块组的开头都有一份拷贝
super block,超级块,描述的是整个文件系统的文件信息,一个组里有多少块,有多少 inode,就是文件系统的基本信息。因为每个组的大小构成都是相同的,只要知道了一个组里有多少块,就知道了有多少个组,根据文件系统的整体大小算出
super block 一旦被破坏,整个文件系统就不可用了。不是每一个块组里都有 super block,并且每一个有 super block 的组里的 super block 都是完全一样的
block bitmap 就很像书架上“已借出”的卡片,翻一下就知道哪一格还空着;而 super block 就是图书馆的馆藏总目录,馆里有多少书、分几个区,全记在里面

格式化与编号

文件系统的载体是分区
格式化,就是将整个文件系统中所有的操作信息全部清零
inode 和数据块的编号都是跨组的,意味着整个分区里,无论在不在一个组,一个编号只能被用来标识一个文件

3、目录、路径解析与挂载

目录也是一个文件

可是现在有一个问题,我们平常在找文件的时候都是用的文件名来查找,从来没用过 inode 来查找,那为什么我们又说文件名不会做为属性被保存在 inode 中,那我们到底是怎么找到对应文件的呢?
Linux 下如何看待目录?目录也是按照刚刚所讲的方式进行保存的,目录也有自己的 inode 和数据,而目录中的数据就保存了文件名与对应文件 inode 的映射关系,所以文件的文件名就保存在当前文件所属目录的数据内容当中
所以这就是为什么我们之前说必须指出文件路径,文件才能进行执行,就是因为操作系统要先打开文件所在的路径,读取对应目录里面的数据内容,得到文件名与 inode 的映射关系,才能在磁盘上找到文件的 inode 和数据块,才能进行执行
而我们想打开对应的目录,也必须打开上级目录,所以找到任何 Linux 文件都必须从 / 目录开始进行路径解析,直到找到对应的文件

路径缓存

但是这样效率是不是有点太低了?我们上一次解析时已经解析过的路径,访问另一个文件时又要解析一次,是不是有点太浪费了?
操作系统也觉得这样效率有点太低了,所以操作系统在进行路径解析的时候,会把我们历史访问的所有目录路径形成一颗多叉树进行保存,就相当于将已经解析过的路径都缓存起来,以后如果再打开相关路径时,如果前面已经被载入,就直接搜索这颗多叉树的路径,如果有就直接使用,没有就从头开始加载并加入这颗多叉树中
整棵树形节点同时也会隶属于 LRU 结构中,进行节点淘汰
整棵树形节点也同时隶属于哈希表,方便快速查找
更重要的是,这个树形结构整体构成了 Linux 的路径缓存结构,打开访问任何文件,都先在这棵树下根据路径进行查找,找到就返回属性 inode 和内容,没找到就从磁盘加载路径,缓存新路径

挂载

现在有一个新的问题,我们该怎么知道我们的文件被存储在哪个分区里呢?inode 不是不能跨分区吗?
我们的分区在进行格式化后我们依旧不能直接使用这个分区,我们的分区一定是要和某个特定的目录进行关联,通过进入这个目录,就相当于进入这个分区,这个操作被称为挂载
每个分区一定是会被挂载在某个路径下的,而我们在创建文件的时候,这个文件的路径中肯定有一段路径是挂载了某一个分区的,所以我们创建文件时就会在这个分区里创建,在我们后续使用时也会根据文件路径确定挂载的分区是哪个,从而到对应的分区去找到文件的 inode
确定文件属于哪个分区采用就近原则,离文件最近的有挂载分区的路径的分区就是文件对应的分区
每个文件的 struct file 中都有一个对应的 dentry 指针,指向自己的 dentry 对象,dentry 里保存的是当前文件在目录树中的位置,还有 inode

task_struct(进程)
   |
   +-- files_struct
          |
          +-- fd 数组 ----------> struct file
                                     |
                                     +--> dentry --> inode --> 数据块
                                          |
                                          +-- 同时挂在 dentry 缓存树上
                                              (多叉树 + LRU + 哈希表)

4、软硬连接

软链接

ln -s,软连接
软连接是一个独立的文件,因为它有独立的 inode,软连接保存了目标文件的路径
软连接就相当于是 Windows 下的快捷方式,相当于给被连接的文件新增了一个访问方式

硬链接

ln,硬连接
硬连接的 inode 与源文件的 inode 是一样的,所以硬连接本质不是一个独立的文件,因为它没有独立的 inode。硬连接本质是一组新的文件名和目标 inode 的映射关系,数字 2 表示有两个文件名指向目标文件,叫做硬连接数
硬连接有什么用?对文件进行备份!以后想要对文件进行备份不用再把文件拷贝到指定目录里了,只需要建立一个硬连接就行
为什么普通文件初始的硬连接数为 1,而目录文件的初始硬连接数是 2 呢?因为我们之前讲过,每一个目录里都有一个隐藏文件 . 指向目录本身,这个 . 文件本质就是当前目录的硬连接;如果一个目录里还有一个子目录,子目录里的 .. 文件指向上级路径,这个也是目录的硬连接
硬连接只能给普通文件建立,更准确地说,是 Linux 不允许用户给目录建立硬连接,. 和 .. 是系统自己建的,不在此列
为什么呢?如果让用户能自己建立硬连接,很容易形成路径环问题:A 指向 B,B 又指回 A,路径解析就会陷进死循环

结语

这一篇我们从磁盘的盘面、磁道一路讲到了 inode 和软硬连接,整条线可以拆成三件事:磁盘负责存,文件系统负责组织,目录负责记名字
以后我会继续创作 Linux 方向的博客,如果觉得有帮助的话,希望各位大佬能三联关注支持一下,看到后我会进行回关和回访

小伙伴们-GO-带你揭开Linux的神秘面纱 小伙伴们-GO-带你揭开Linux的神秘面纱 带你了解Linux操作系统优秀特质,一探Linux系统-满血复活的启动过程。解刨Linux 骨架-文件系统与目录结构 讲解它硬盘存储的秘密知识 阅读详情

相关推荐

从零实现反激式电源仿真:LTspice高级应用实例

深入解析反激式开关电源的建模与仿真过程,利用LTspice实现从零搭建电路,精准验证电路仿真效果,提升电源设计效率与可靠性。

weixin_36149538的博客 1896

【Linux】揭开文件神秘的面纱:第一讲,重定向背后的秘密

这节课我们完成了对Linux中文件的初步认识,了解了重定向的基本原理,虽然这篇文章的主要篇幅不在讲解重定向上,但是通过上文的铺垫,相信大家在学习重定向相关知识时非常容易理解,这就是为什么我要花这么多的篇幅用于讲解其他知识的原因,希望这篇文章能让大家对文件系统和重定向操作有了更深的认识。

button__c的博客 568

LPDDR4x 深度解析(3) - SDRAM核心操作机制

本文深入解析LPDDR4x SDRAM的核心操作机制,包括基础架构、刷新操作、读写流程及低功耗设计。详细介绍了存储阵列、地址解码器等关键模块,以及自刷新与自动刷新模式的区别。通过实测数据和技术细节,揭示LPDDR4x在性能优化和功耗控制方面的创新设计,为硬件工程师提供实用参考。

weixin_29278805的博客 308

视频教程-Linux系统编程01期:揭开文件系统的神秘面纱-嵌入式

Linux系统编程01期:揭开文件系统的神秘面纱 6年嵌入式开发经验,在多家...

weixin_31572457的博客 164

软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了

软件缺陷软件缺陷的定义软件缺陷的表现形式软件缺陷产生的原因软件缺陷的根源软件缺陷的费用软件缺陷的信息 软件缺陷的定义 IEEE 1983 of IEEE Stardard 729中软件缺陷做了一个标准的定义: 从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。 因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的需求。 缺陷不是bug,缺陷包含bug,缺陷的范围更大。 软件缺陷

qq_40676418的博客 1万+

无刷电机FOC控制入门:磁场、洛伦兹力与坐标转换详解

本文深入解析无刷电机FOC(磁场定向控制)的核心原理,从电磁学基础的磁场与洛伦兹力出发,详细阐述了如何通过Clarke变换、Park变换等坐标转换技术,将三相交流解耦为直流量进行控制,最终利用SVPWM技术实现平滑、高效的电机驱动。文章旨在帮助开发者理解FOC的物理本质与数学框架,为机器人、无人机等高性能应用奠定基础。

weixin_29306011的博客 266

磁盘到 inode:深入理解 Linux ext 文件系统底层原理

文件系统是操作系统管理存储的核心机制,却常常被开发者视为“黑盒”。本文将从磁盘硬件原理出发,深入浅出地剖析 Linux 中经典的ext 文件系统如何组织数据、管理文件,并揭示inode、块、软硬链接等关键概念的底层实现。通过理解这些机制,你不仅能更高效地使用文件系统,还能在调试、优化乃至数据恢复时多一份底气。让我们一起揭开文件系统的神秘面纱!

2302_80105876的博客 8214

Manus创始人深度复盘:AI Agent产品的技术架构与战略转型

成本对比:同样任务处理,中国区单位成本是亚太区的2.3倍。付费转化率:中国区1.2% vs 全球平均4.7%微信/支付宝等超级App的适配代码占比达17%Zstandard:压缩比38%,耗时12ms。每季度需要投入3名高级工程师专职维护兼容性。国际版API平均延迟:180-220ms。中国版特殊部署延迟:480-720ms。信息保持准确率:93%(7天跨度测试)自研算法:压缩比39%,耗时5ms。存储效率:相比纯文本节省68%空间。:本地化部署导致的延迟与费用差异。LZ4:压缩比42%,耗时8ms。

m0_75253143的博客 7146

【Linux】文件描述符与重定向原理:揭开Linux文件操作的神秘面纱

本文深入探讨了Linux系统中的文件描述符与重定向原理。首先重新定义了"文件"概念,从狭义磁盘文件扩展到"一切皆文件"的广义理解。通过分析C语言文件操作接口和系统调用,揭示了文件操作的I/O本质。文章详细讲解了文件描述符在进程中的表现形式,以及如何通过/proc文件系统查看进程打开的文件。最后通过实现简单的cat命令,展示了文件读写的基本原理,为后续理解重定向机制奠定了基础。

半截诗的博客~ 1505

错误代码:11300001 数据集 [xxx] 配置错误“=”附近有语法错误(原理分析)

错误代码:11300001 数据集 [1_Workshift] 配置错误“=”附近有语法错误。

码农研究僧的博客 915

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1604

深入探索Linux文件系统:属性、路径与隐藏之谜

在计算机世界中,文件是信息的载体,而Linux文件系统作为一个开放而强大的平台,其文件管理机制更是充满了精妙之处。一个文件不仅仅是内容的堆砌,更是由属性、路径和隐藏三个要素交织而成的复杂网络。在这篇文章中,我们将深入探讨文件的组成,揭开文件属性的神秘面纱,解读路径的唯一性,以及探寻隐藏文件的奥秘。让我们一同踏入Linux文件系统的探险之旅,探索其中的奥妙和精妙。

屿小夏.的知识博客 2万+

QT实现图片ROI区域的框选、移动、缩放(附完整源码)

QT实现图片ROI区域的框选、移动、缩放(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1191

【Linux内核系列】:文件系统

详解Linux的文件系统知识!

努力努力再努力wz的博客 1387

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理

本文将深入解析Linux文件系统的核心机制,重点探讨Ext系列文件系统的设计原理。文章从磁盘物理结构入手,详细介绍了磁盘的CHS寻址方式(磁头、柱面、扇区)及其与LBA逻辑块地址的转换关系。通过分析磁盘的逻辑抽象过程,揭示了文件系统如何将三维物理结构转化为一维线性空间进行管理。 在文件系统层面,文章重点讲解了"块"的概念(由8个512字节扇区组成4KB块)、分区原理(以柱面为最小单位)以及inode索引节点的核心作用。inode作为存储文件元信息的128字节数据结构,包含文件权限、大小、

zoelinkailuo的博客 1286

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

linux文件系统

Linux作为一款广泛应用的操作系统,其文件系统在整个系统架构中占据着极为重要的地位。Linux文件系统有着独特的设计理念与强大的功能特性。它旨在高效地管理计算机中的各类文件资源,无论是文本文件、程序文件还是多媒体文件等,都能被妥善组织与处理。从历史发展来看,Linux文件系统历经了不断的演进与完善。早期的设计就注重了开放性与灵活性,这使得它能够适应多种不同的应用场景与硬件环境。与其他常见操作系统的文件系统相比,Linux文件系统往往具备更高的可定制性。

2301_80687320的博客 1243

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Linux】揭开文件系统神秘的面纱:第四讲:可执行文件的组装车间

我们平时写代码,几乎都离不开printfstrlen这些函数,可它们并不在我们自己写的源文件里,那它们是从哪来的呢?它们来自库。库是写好的、现有的、成熟的、可以复用的代码,现实里每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,所以库的存在意义非同寻常。本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行,而库又分两种:静态库和动态库,这两种我们后面分别来看先看静态库。静态库本质就是打了包的.o文件,打包用的命令是ar -rc,也就是归档,把一堆.o。

button__c的博客 357

【Linux】揭开文件神秘的面纱:第二讲,操作系统自己的菜鸟驿站——文件缓冲区

这节课带大家学习了有关文件缓冲区的知识,还有理解了一切皆文件到底是怎么实现的,希望大家在看完这篇文章后能从中学到新知识。以后我会继续创作Linux方向的博客,如果觉得有帮助的话希望各位大佬能三联关注支持一下,看到后我会进行回关和回访。

button__c的博客 511

【Linux系列】Linux Root:揭开系统“超级管理员”的神秘面纱

📖你是否曾在Linux终端里看到过的红色警告?是否好奇为什么某些操作必须加上sudo才能执行?这一切的答案,都指向Linux系统中那个至高无上的存在——Root。有人说,Root是系统的“上帝账户”,拥有生杀予夺的大权;也有人说,滥用Root就像玩火🔥,稍有不慎就会让系统“灰飞烟灭”。今天,我们就来揭开Root的神秘面纱,教你如何安全驾驭这把“双刃剑”🗡️!Root是Linux的灵魂,也是危险的源头。掌握它,需要敬畏之心与严谨态度。

coder_lorraine的博客 1239

《 Linux 修炼全景指南: 四 》Linux 文件系统揭秘:为什么“一切皆文件”?

本篇文章系统、完整地介绍了 Linux 文件系统的核心知识,从基础概念、目录结构、权限模型,到 VFS 架构、日志与缓存机制、常用命令操作,再到文件系统管理、网络文件系统与现代特性(如 CoW、快照、数据校验)等内容,帮助读者全面理解 “一切皆文件” 的设计哲学。文章不仅讲解理论原理,也提供大量实践技巧、排错经验、学习路径与进阶方向,适合 Linux 新手入门,也适用于希望深入理解系统底层的开发者与运维人员。通过本篇,你将掌握在 Linux 世界中处理、管理和优化文件系统的能力,建立扎实的系统底层认知框架。

Lenyiin 3328

Linux:文件系统与inode、软硬链接

摘要: Linux文件系统通过inode和软硬链接机制高效管理文件。磁盘被划分为扇区,文件系统将其组织为块组,包含超级块、inode表和数据块等结构。每个文件对应唯一的inode,记录文件属性和数据块指针。目录是特殊文件,存储文件名到inode的映射。硬链接是同一inode的多个名称,共享数据但不可跨分区;软链接是独立文件,存储目标路径可跨分区。文件操作如创建、删除只需修改元数据,删除文件仅标记空间空闲而非清空数据。这种设计实现了高效的文件管理和快速访问。

2402_87867439的博客 1070

系统核心解析:深入文件系统底层机制——Ext系列探秘:从磁盘结构到挂载链接的全链路解析

系统核心解析:深入文件系统底层机制——Ext系列探秘:从磁盘结构到挂载链接的全链路解析

2401_82924480的博客 786

Linux 文件系统深度解析:ext4、XFS、inode、硬链接 vs 软链接 原理与实战

在 Linux 中,一切皆文件。无论是普通文本、设备、目录还是网络套接字,系统都以“文件”的方式统一管理。一个文件是如何在磁盘上存储的?为什么磁盘空间充足,却提示“磁盘已满”?ln创建的硬链接和软链接有什么本质区别?ext4 和 XFS 哪个更适合你的业务场景?本文将带你深入 Linux 文件系统的底层机制,从inode、数据块、超级块到主流文件系统ext4 与 XFS 的对比,再到硬链接与软链接的原理与实战,彻底揭开文件存储的神秘面纱。

用文字记录技术,用分享回馈社区,用坚持见证成长 1742

深入理解Linux底层存储:从物理磁盘架构到文件系统(inode/Block)原理

本文深入剖析了Linux磁盘与文件系统的底层原理。首先从硬件层面解析了机械硬盘的物理结构,包括盘片、磁头、传动臂等核心组件的工作原理。详细讲解了磁盘的CHS寻址模式和现代LBA逻辑块寻址机制,以及二者间的转换关系。在文件系统部分,重点介绍了inode数据结构如何存储文件元信息,包括权限、所有者、时间戳等属性,以及通过块指针管理文件内容存储。文章还阐述了操作系统如何通过分区表管理磁盘空间,并以逻辑块为基本单位进行高效读写。最后指出文件系统的核心作用是将磁盘抽象为有序存储空间,并通过inode和目录结构实现文件

分享C,C++,数据结构,Linux,算法内容 935

解锁Linux内核黑科技:VFS虚拟文件系统详解

i_no:便是inode的唯一性编号i_count:访问该inode结构体对象的进程数i_nlink:硬链接计数,等于0时将文件从磁盘移除。i_hash:指向哈希链表指针,用于查询,已经inode号码和对应超级块的时候,通过哈希表来快速查询地址。具体看下边管理inode节点。也是list_head类型对象,这种对象就对应了一个双向循环链表。i_dentry:指向目录项链表指针,因为一个inode可以对象多个dentry,因此用一个链表将于本inode关联的目录项都连在一起。

深度Linux 1239

揭开Linux内核read_ahead_kb参数的神秘面纱:从原理到性能调优实战

你是否曾为服务器文件读取性能不佳而烦恼?在高并发I/O场景下,为何相同硬件配置会出现截然不同的响应速度?本文将深入解析Linux内核中至关重要的预读参数`read_ahead_kb`(预读大小,单位KB),通过10+组对比实验、5种典型场景调优指南,帮助你彻底掌握这一隐藏性能开关。读完本文,你将获得: - 预读机制的底层工作原理与数据流程图解 - 不同存储设备(HDD/SSD/NVMe)的最优参数...

gitblog_00873的博客 1182
上一篇: 【Linux】揭开文件神秘的面纱:第二讲,操作系统自己的菜鸟驿站——文件缓冲区
下一篇: 【Linux】揭开文件系统神秘的面纱:第四讲:可执行文件的组装车间
虚无的纽扣
博客等级 码龄1年 405粉丝 36原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值