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系统只允许自己硬链接(./..),但是不允许用户操作;而软链接无要求。 
 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体的步骤/过程,注重的是过程中的具体的行为,以函数为最小单位,考虑怎么做。 面向对象:注重找“参与者…

GeekHour

Linux Linux的是类Unix系统,作者是Linus,也是git的作者。符合GPL(General Public License)就可以Linux的使用、修改、再发布。 Linux四部分: 内核:驱动、内存管理、进程管理、文件系统、网络协议栈…。作…

学习golang语言时遇到的难点语法

作者是java选手,实习需要转go,记录学习go中遇到的一些与java不同的语法。 defer defer特性 1. 关键字 defer 用于注册延迟调用。 2. 这些调用直到 return 前才被执。因此,可以用来做资源清理。 3. 多个defer语句,按先进…

一个面向领域的直播平台开源!

面向教育等领域,二开后可以做视频会议等 在线直播平台 基于 Spring Boot 和 SRS 平台功能 视频直播 在线聊天 直播提醒 作业上传和批改 项目介绍了一个基于Spring Boot和SRS的在线直播平台,这个平台具备视频直播、在线聊天、直播提醒以及…

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试(HTTP和HTTPS) HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头(Request Headers)示例请求标头 响应标头(Response Header…

Mysql约束(学习自用)

一、概述 注意: 1)多个约束之间用空格分开 二、外键约束 三、约束行为

linux-NFS网络共享存储服务配置

1.NFS服务原理 NFS会经常用到,用于在网络上共享存储,这样讲,你对NFS可能不太了解,举一个例子, 加入有三台机器A,B,C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些 图…

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

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

kafka学习笔记6 ACL权限 —— 筑梦之路

在Kafka中,ACL(Access Control List)是用来控制谁可以访问Kafka资源(如主题、消费者组等)的权限机制。ACL配置基于Kafka的kafka-acls.sh工具,能够管理对资源的读取、写入等操作权限。 ACL介绍 Kafka的ACL是…

ARM学习(42)CortexM3/M4 MPU配置

笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式 1.1、概念 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、 regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母&#xff0…

docker 使用远程镜像启动一个容器

使用前提: 首先你得安装docker,其次你得拥有一个远程镜像 docker run --name io_11281009 --rm -it -p 2233:22 -v .:/root/py -e ed25519_rootAAAAC3NzaC1lZDI1********Oy7zR7l7aUniR2rul ghcr.lizzie.fun/fj0r/io srv对上述命令解释: 1.docker run:…

SSM课设-学生管理系统

【课设者】SSM课设-学生管理系统 技术栈: 后端: SpringSpringMVCMybatisMySQLJSP 前端: HtmlCssJavaScriptEasyUIAjax 功能: 学生端: 登陆 学生信息管理 个人信息管理 老师端: 多了教师信息管理 管理员端: 多了班级信息管理 多了年级信息管理 多了系统用户管理

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章:三层架构和MVC 三层架构: 开发服务器端,一般基于两种形式,一种 C/S 架构程序,一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序,B/S 架构又分成了三层架构三层架构: 表现…

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

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

2024年博客之星主题创作|从零到一:我的技术成长与创作之路

2024年博客之星主题创作|从零到一:我的技术成长与创作之路 个人简介个人主页个人成就热门专栏 历程回顾初来CSDN:怀揣憧憬,开启创作之旅成长之路:从平凡到榜一的蜕变持续分享:打卡基地与成长复盘四年历程&a…

【2024年华为OD机试】(B卷,200分)- 战场索敌 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 有一个大小为 N * M 的战场地图,被墙壁 # 分隔成大小不同的区域。上下左右四个方向相邻的空地 . 属于同一个区域,只有空地上可能存在敌人 E。请求出地图上总共有多少区域里的敌人数小于 K。 输入描述 第一行输入为 N, M, K&…

机器学习(5):支持向量机

1 介绍 支持向量机(Support Vector Machine,简称 SVM)是一种监督学习算法,主要用于分类和回归问题。SVM 的核心思想是找到一个最优的超平面,将不同类别的数据分开。这个超平面不仅要能够正确分类数据,还要使…

【Linux入门】2w字详解yum、vim、gcc/g++、gdb、makefile以及进度条小程序

文章目录 Ⅰ. Linux 软件包管理器 yum一、什么是软件包?二、查找软件包三、安装与卸载软件包 拓展:lrzsz简介拓:配置 yum 源路径的方法Ⅱ. Linux开发工具vim编辑器一、vim 的基本概念二、vim 的基本操作三、vim 命令模式的操作四、vim 底行模…

《动•情》组诗浅析

路遇一枚运动的灵魂,邂逅一张随拍的悸动。 (笔记模板由python脚本于2025-01-21 22:59:21创建,本篇笔记适合喜欢诗的coder翻阅) 【学习的细节是欢悦的历程】 Python官网:https://www.python.org/ Free:大咖免费“圣经”教程《 pyt…