Ext2 文件系统:数字世界的基石,深度解码超时空存储魔法

本篇博主将带大家深入底层探秘系统是如何与磁盘进行相互交流的,配合精美配图,细节讲解来带大家深入探究(注:本篇文章建议了解磁盘内部物理结果组成及设计再进行阅读)。 

  羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C++题海汇总,AI学习,c++的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c++,c语言,ubuntu,linux,数据结构领域.https://blog.csdn.net/2401_82648291?spm=1010.2135.3001.5343https://blog.csdn.net/2401_82648291?spm=1010.2135.3001.5343

 欢迎拜访:羑悻的小杀马特.-CSDN博客

本篇主题:秒懂系统磁盘交互

制作日期:2025.01.18

隶属专栏:linux之旅

目录

一·磁盘内部的划分:

1.1superblock:

1.2GDT:

1.3block bitmap:

1.4inode bitmap:

1.5inode table:

1.6Data blocks:

二·目录与文件:

三·系统与磁盘如何交互:

3.1路径解析:

3.2路径缓存:

3.3 挂载分区:

四·系统(进程)与文件交互总结: 

​编辑

五·软硬链接:

5.1软链接:

5.2硬链接:

六.软硬链接在系统中的差异:


 

一·磁盘内部的划分:

首先就先默认我们都已经学习了解了磁盘物理结构和设计,那么下面磁盘是分成这样,请看图:

首先是分区:我们最小单位是扇面,其次可以比它大来分区如: c d盘:。

然后就是我们的分组。

下面分讲一下每个组含有的都是啥意思: 

1.1superblock:

存放文件系统本身的结构信息,描述整个分区的文件系统信息。记录的信息主要有: bolck和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等他文件系统的相关信息 

 说白了就是储存着每一个分区的一些信息,对分区很重要,因此需要多个备份放在当下分区的不同组块中(防止被删除) 

1.2GDT:

对块组的介绍以及记录块组内其他部分有啥分布等 
 

1.3block bitmap:

每个bit表⽰⼀个inode是否空闲可⽤。

1.4inode bitmap:

判断块占用情况,方便到时候知道哪个文件被删除了,还是要创建哪里的文件 。

1.5inode table:

存放⽂件属性如⽂件⼤⼩,所有者,最近修改时间等,当前分组所有Inode属性的集合。

多个结构体的集合;

里面存放着不仅仅是inode及一些其他属性还有inode对应的块(可以同组也可以不同组,后面讲)

每个结构体的大小都是相等的都是128字节;又因为这个集合大小是4kb故我们可以得出最多可以放32个inode结构体。

这里我们再阐述一个事实:

inode和block都可以跨组但是不能跨分区:

即同一个分区内部inode和块编号都是唯一的。

下面我们来解释一下:

就是我们的inode和块的编号可以从组之间是连续的;但是分区和分区之间不能连续每个分区开始的编号都是0。

其实inode结构体有一个记录它所对应的块的类似数组的东西,可以方便我们根据inode找到对应的文件数据位置;下面形象看一下:

这样就实现了我们小的空间可以找到inode对应的大量的块了。 

那么下面我们该如何知道对应文件名字它的inode(指令ls -li):

 

1.6Data blocks:

据不同的⽂件类型有以下⼏种情况:

1·对于普通⽂件,⽂件的数据存储在数据块中。

2·对于⽬录,该⽬录下的所有⽂件名和⽬录名存储在所在⽬录的数据块中看到的其它信息保存在该⽂件的inode中。

二·目录与文件:

访问文件,必须打开当前目录,根据文件名,获得对应的inode号,然后进行文件访问(目录中内容是里面文件以及和inode对应关系) ;本质是必须能打开当前工作目录文件,查看目录文件的内容!

当然了目录它也是文件了;遵循着文件的规律也就适用于目录了;只需要目录结构就好了。

三·系统与磁盘如何交互:

3.1路径解析:

都要从根目录开始,依次打开每一个目录,根据目录名,依次访问每个目录下指定的目录,直到访问到test.c。这个过程叫做Linux路径解析。 

本质就是在磁盘文件系统中,新建目录文件。而你新建的任何文件,都在你或者系统指定的目录下新建,这不就是天然就有路径了嘛 !

 

说白了就是查找某个文件首先要先上推然后返回来找到的过程罢了。 

3.2路径缓存:

如果向上面一样查找一直往回找到根目录的话就太慢了,因此实际不是这样的。

这里系统默认从根(/)开始缓存。

因此我们下面就要引出dentry:

Linux中,在内核中维护树状路径结构的内核结构体叫做: struct dentry;来缓存历史路径

每个文件相当于一个dentry结构体节点把他们串起来:

下面大概举例一下一些dentry存的结构:

 

每个文件都对应的有dentry然后系统把它多叉起来(其中这个结构不仅参与文件查找还有一系列与文件相关的任务->"网状") 
 

3.3 挂载分区:

谈到这里,我们首先要明白:

分区写⼊⽂件系统,⽆法直接使⽤,需要和指定的⽬录关联,进⾏挂载才能使⽤。

所以,可以根据访问⽬标⽂件的"路径前缀"准确判断我在哪⼀个分区。


因此我们可以知道每个目录都会挂有分区,我们对其内文件操作必然要通过这个目录找到分区.

下面我们就来看看分区是如何挂到目录上的:

四·系统(进程)与文件交互总结: 

首先先看张图:

五·软硬链接:

5.1软链接:

软链接是通过名字引⽤另外⼀个⽂件,但实际上,新的⽂件和被引⽤的⽂件的inode不同,应⽤常⻅上可以想象成⼀个快捷⽅式。

说白了我们可以理解为快捷方式即:

这就是一个软链接。

指令: ln -s  要软链接源文件  链接文件(快捷方式) ;取消是unlink +链接文件

里面存的是abc的文件路径,访间abc.s即去拿到abc路径再访间abc:而册掉abc.s后abc还是存在的。

 用途:作为快捷方式,方便查找(当我们删除后,它真正文件并没有删除)

5.2硬链接:

我们看到,真正找到磁盘上⽂件的并不是⽂件名,⽽是inode。其实在linux中可以让多个⽂件名对应于同⼀个inode。
 

指令:ln 要软链接源文件  链接文件(快捷方式) ;取消是unlink +链接文件

 

这里其实就用到了引用计数。

硬链接文件inode和源文件相同也就是都是指向同一个inode这就产生了引用计数:

故: 

1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。
 

 用途:./..的使用以及备份工作。

六.软硬链接在系统中的差异:

软连接是独⽴⽂件;硬链接只是⽂件名和⽬标⽂件inode的映射关系;下面请看图:

这里还有个小疑问:就是目录可以软链接但是不能硬链接? 

解释下: linux系统只允许自己硬链接(./..),但是不允许用户操作;而软链接无要求。 
 

 

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

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

相关文章

postman的使用

Postman是Restful API的测试工具。简单来讲是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大、使用简单。通常无论是开发人员进行接口调试,还是测试人员做接口测试,postman通常都是首选工具。 注:作为开发人员对于…

模块化架构与微服务架构,哪种更适合桌面软件开发?

前言 在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比&#xff0…

工程上LabVIEW常用的控制算法有哪些

在工程应用中,LabVIEW常用的控制算法有很多,它们广泛应用于自动化、过程控制、机器人、测试测量等领域。以下是一些常见的控制算法: 1. PID 控制 用途:PID(比例-积分-微分)控制是最常用的反馈控制算法&…

nuxt3项目打包部署到服务器后配置端口号和开启https

nuxt3打包后的项目部署相对于一般vite打包的静态文件部署要稍微麻烦一些,还有一个主要的问题是开发环境配置的.env环境变量在打包后部署时获取不到,具体的解决方案可以参考我之前文章 nuxt3项目打包后获取.env设置的环境变量无效的解决办法。 这里使用的…

ui文件转py程序的工具

源博客连接: PyCharm中利用外部工具uic转成的py文件,里面全是C代码,并非python类型的代码,导致大量报错。。。_pyside6-uic为什么把ui转为了c-CSDN博客 如果想把ui文件转为py文件,首先设置pycharm的外部工具&#xf…

c++学习第七天

创作过程中难免有不足&#xff0c;若您发现本文内容有误&#xff0c;恳请不吝赐教。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考。 一、const成员函数 //Date.h#pragma once#include<iostream> using namespace std;class Date { public:Date…

【C++】在线五子棋对战项目网页版

目录 1.Websocket 1.1.Websocket的简单认识 1.2.什么是轮询呢&#xff1f; 1.3.websocket协议切换过程 1.4.websocketpp库常用接口认识 1.5.websocketpp库搭建服务器流程 1.6.websocketpp库搭建服务器 2.mysqlclient库-接口认识 3.项目模块的划分&#xff1a; 4.项目…

Qt中的connect函数

1. 介绍 connect函数是Qobject类提供的静态成员函数&#xff0c;这个Qobject类是Qt中所有类的祖宗类&#xff0c;这个机制类似于JAVE中同样也是有一个Object祖宗类&#xff0c;QWidget类属于Qobject类的子类&#xff0c;所以包括QPushButton这些控件等等&#xff0c;都可以使用…

UE5 开启“Python Remote Execution“

demo 代码 remote_execution.py 远程调用UE5 python代码-CSDN博客 在启用 Unreal Engine 5&#xff08;UE5&#xff09;的“Python 远程执行”功能后&#xff0c;UE5 会启动一个 UDP 组播套接字服务&#xff0c;以监听来自外部应用程序的 Python 命令。 具体行为如下&#xf…

LabVIEW太赫兹二维扫描成像系统

使用LabVIEW设计太赫兹二维扫描成像系统。通过LabVIEW平台开发&#xff0c;结合硬件如太赫兹源、平移台、锁相放大器等&#xff0c;实现了高效、精准的成像功能。系统采用蛇形扫描方式&#xff0c;通过动态调整扫描参数&#xff0c;达到优化成像质量的目的。 ​ 项目背景 在非…

【wiki知识库】08.添加用户登录功能--后端SpringBoot部分

目录 一、今日目标? 二、SpringBoot后端实现 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代码 2.4 创建用户上下文工具类 2.5?通过token校验用户&#xff08;重要&#xff09; 2.6 创建WebMvcConfig 2.7 用户权限校验拦截器 一、今日目标 上…

以 RFID 为钥,开启民兵装备管理的科技之门

民兵配备的武器及装备涵盖了各式武器、弹药及军事技术设备&#xff0c;其管理的优良直接决定了民兵的作战效能。鉴于民兵装备普遍面临老化、维护支援不充分等问题&#xff0c;迫切需要迅速建立完善的民兵装备管理新体系。这一转变将推动民兵装备由数量扩张转向质量提升&#xf…

2025-1-21 Newstar CTF web week1 wp

文章目录 week1headach3会赢吗智械危机 week1 headach3 根据提示&#xff0c;在页面的请求头里找到flag flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 打开控制台&#xff0c;拿到第一部分flag 将地址栏改为提示&#xff0c;去到下一关 控制台调用函数&#xff0c;得到flag …

C语言程序设计十大排序—选择排序

文章目录 1.概念✅2.选择排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅5.十大排序 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在…

(三)线性代数之二阶和三阶行列式详解

在前端开发中&#xff0c;尤其是在WebGL、图形渲染、或是与地图、模型计算相关的应用场景里&#xff0c;行列式的概念常常在计算变换矩阵、进行坐标变换或进行图形学算法时被使用。理解二阶和三阶行列式对于理解矩阵运算、旋转、平移等操作至关重要。下面&#xff0c;我将结合具…

通过docker overlay2目录名查找容器名和容器ID

参考&#xff1a;https://blog.csdn.net/beck_li/article/details/142059298 有时候经常会有个别容器占用磁盘空间特别大&#xff0c;这个时候就需要通过docker overlay2 日录名查找对应容器名. 1.首先进入到 /var/lib/docker/overlay2 目录下 #cd /var/lib/docker/overlay2 …

2025年入职/转行网络安全,该如何规划?网络安全职业规划

网络安全是一个日益增长的行业&#xff0c;对于打算进入或转行进入该领域的人来说&#xff0c;制定一个清晰且系统的职业规划非常重要。2025年&#xff0c;网络安全领域将继续发展并面临新的挑战&#xff0c;包括不断变化的技术、法规要求以及日益复杂的威胁环境。以下是一个关…

Vue平台开发三——项目管理页面

前言 对于多个项目的使用&#xff0c;可能需要进行项目切换管理&#xff0c;所以这里创建一个项目管理页面&#xff0c;登录成功后跳转这个页面&#xff0c;进行选择项目&#xff0c;再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…

深入解析人工智能中的协同过滤算法及其在推荐系统中的应用与优化

目录 什么是协同过滤算法核心原理基本步骤相似度计算代码实现详解1.流程图2.创建基础的数据结构存储用户评分数据3.计算用户相似度4.获取相似用户5.推荐方法 算法优化建议1. 数据预处理优化去除异常值和噪声数据进行数据标准化使用稀疏矩阵优化存储 2. 相似度计算优化使用局部敏…

【数据挖掘实战】 房价预测

本次对kaggle中的入门级数据集&#xff0c;房价回归数据集进行数据挖掘&#xff0c;预测房屋价格。 本人主页&#xff1a;机器学习司猫白 机器学习专栏&#xff1a;机器学习实战 PyTorch入门专栏&#xff1a;PyTorch入门 深度学习实战&#xff1a;深度学习 ok&#xff0c;话不多…