当前位置: 首页 > news >正文

Linux下ext2文件系统

文章目录

      • 一 :penguin:基本概述
      • 二 :star: ext2文件系统
        • :star:​ 1. :star:​Boot Block(引导块)
          • 位置与作用
      • 三 Block Group(块组)
        • :star:​1.:star:​ Super Block(超级块)
        • :star:​2.:star:​ Group Descriptor(块组描述符)
        • :star:​3. :star:Block Bitmap(​块位图)
        • :star:​4. :star: inode Bitmap(inode位图)
        • :star:​5. :star:inode table(inode 表)
        • :star:​6. :star: DataBlocks(数据区)
          • :full_moon_with_face:实际存放的内容
          • :full_moon_with_face:存放的大小

在这里插入图片描述

一 🐧基本概述

ext2(Second Extended File System)是Linux操作系统中经典的文件系统类型之一,它在早期的Linux系统中被广泛使用,为文件和目录在磁盘等存储介质上的存储、管理以及访问提供了一套完善的机制。

二 ⭐️ ext2文件系统

Linux ext2文件系统,磁盘文件系统图
table

⭐️​ 1. ⭐️​Boot Block(引导块)

一个分区至少含有一个Boot Block(引导块),其它为Block Group.

位置与作用

Boot Block通常位于磁盘分区的最开始部分,也就是在整个ext2文件系统所在磁盘分区的起始位置,在超级块(Super Block)之前。它主要用于存放引导程序相关的代码和数据,起着引导操作系统启动的关键作用。

当计算机开机启动时,BIOS(基本输入输出系统)会首先执行硬件自检等初始化操作,之后它会按照预设的启动顺序去查找可引导的设备(比如硬盘)。一旦找到硬盘,BIOS就会将硬盘分区开头处的Boot Block加载到内存中,并将控制权转交给其中的引导程序代码。这个引导程序随后会进一步引导操作系统内核进行加载、初始化等后续启动流程,从而让整个计算机系统正常运转起来。

三 Block Group(块组)

ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。
位于Linux/fs/ext2/ext2.h

⭐️​1.⭐️​ Super Block(超级块)

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

// 定义ext2文件系统的超级块结构体
struct ext2_super_block {// 以下是文件系统中inode(索引节点)的总数__le32 s_inodes_count;        /* Inodes count */// 文件系统中总的块(Blocks)数量,用于衡量磁盘分区存储容量大小(以块为单位)__le32 s_blocks_count;        /* Blocks count */// 文件系统中当前空闲的块(Blocks)数量,操作系统可据此知晓还有多少块可用于分配给新文件等操作__le32 s_free_blocks_count;   /* Free blocks count */// 文件系统中当前空闲的inode(索引节点)数量,用于判断是否还能创建新的文件或目录等(每个文件/目录需对应一个inode)__le32 s_free_inodes_count;   /* Free inodes count */// 以2为底的对数形式表示块(Block)大小,例如,若值为10,则块大小为2^10 = 1024字节,用于确定数据存储基本单元的大小__le32 s_log_block_size;      /* Block size */.............................
};
⭐️​2.⭐️​ Group Descriptor(块组描述符)

块组描述符就像是块组的 “管家”,它详细记录了本块组内各种资源(如数据块、inode 等)的使用情况以及关键结构(位图、表等)的位置信息,操作系统在对块组进行操作管理时,首先会读取块组描述符来获取这些基础信息,以便做出合理的资源分配决策等。

struct ext2_group_desc {// 本块组内数据块(Blocks)位图所在的块号,通过这个块号可以定位到块位图(Block Bitmap),__le32 bg_block_bitmap;        /* Blocks bitmap block */// 本块组内inode(索引节点)位图所在的块号,据此能找到inode位图(inode Bitmap),__le32 bg_inode_bitmap;        /* Inodes bitmap block */// 本块组内inode表(Inodes table)所在的块号,通过这个块号可以定位到inode表,__le32 bg_inode_table;         /* Inodes table block */// 本块组内当前空闲的数据块(Blocks)数量统计,操作系统可以据此快速了解当前块组还有多少数据块可供分配,__le16 bg_free_blocks_count;   /* Free blocks count */// 本块组内当前空闲的inode(索引节点)数量统计,结合块组内总的inode数量以及已使用的情况,。__le16 bg_free_inodes_count;   /* Free inodes count */// 本块组内已使用的目录(Directories)数量统计,记录了该块组中包含的目录个数,__le16 bg_used_dirs_count;     /* Directories count */..................
};
⭐️​3. ⭐️Block Bitmap(​块位图)

Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用

  • 🌹它采用二进制位(bit)来表示每个数据块的使用状态。具体而言,块位图中的每一位都与块组内的一个具体数据块相对应,其中:
    • 🌹如果某一位的值为 1,则表示对应的那个数据块已经被占用,即该数据块正在被某个文件用来存储数据内容,不可再分配给其他文件使用。
    • 🌹如果某一位的值为 0,则意味着对应的那个数据块目前处于空闲状态,可供后续创建的文件分配使用,文件系统在为新文件分配磁盘空间时,就会查找这些值为 0 的位对应的空闲数据块进行分配。
⭐️​4. ⭐️ inode Bitmap(inode位图)

使得文件系统能够快速知晓哪些 inode 是空闲的、可分配给新创建的文件或目录使用,哪些 inode 已经被占用,正用于记录已有文件或目录的属性信息等。

  • 🌹采用二进制位(bit)来呈现每个 inode 的使用状态。具体来说,inode 位图中的每一位都与块组内的一个具体 inode 相对应,其中:
    • 🌹 如果某一位的值为 1,则表示对应的那个 inode 已经被占用,意味着该 inode 已被分配给某个文件或目录,用于记录诸如文件权限、所有者、大小以及指向数据块的指针等属性信息,不可再分配给其他文件或目录使用了。
    • 🌹 如果某一位的值为 0,则代表对应的那个 inode 目前处于空闲状态,可供后续创建的文件或目录分配使用。例如,当需要创建一个新文件时,文件系统会扫描 inode 位图,查找值为 0 的位对应的空闲 inode,然后将其分配给新文件,并更新该位为 1,以标记此 inode 已被占用。
⭐️​5. ⭐️inode table(inode 表)

inode 表(inode table)是 ext2 文件系统中每个块组(Block Group)内用于存放该块组内所有文件和目录对应的 inode(索引节点)的区域。
inode 表本质上是由一系列连续存储的 ext2_inode 结构体组成的数组,每个 ext2_inode 结构体对应一个文件或目录。

struct ext2_inode {// 文件模式,用于表示文件的类型(如普通文件、目录、符号链接等)以及相应的权限设置(可读、可写、可执行等权限),__le16 i_mode;                /* File mode */// 文件所有者的用户ID(uid)的低16位,用于标识该文件所属的用户,与系统的用户管理机制相结合,__le16 i_uid;                 /* Low 16 bits of Owner Uid */// 文件的大小,以字节为单位,明确了该文件所包含的数据量大小,这对于文件读写操作时确定读取或写入的范围等操作很关键,__le32 i_size;                /* Size in bytes */// 文件最后一次被访问的时间,以时间戳的形式记录,便于系统统计文件的使用活跃度、了解文件的访问历史,__le32 i_atime;               /* Access time */// 文件的创建时间,记录文件在文件系统中最初生成的时间点,对于追踪文件的来源、了解文件系统的历史变更等方面有一定帮助,__le32 i_ctime;               /* Creation time */...............   
};
⭐️​6. ⭐️ DataBlocks(数据区)
🌝实际存放的内容
  1. 🌝普通文件的数据内容
    对于普通文件来说,数据块区存放的就是文件所包含的实际数据。例如:

    • 🌹文本文件:像 .txt 文件,其包含的文字字符信息会按照一定的编码方式(如 ASCII、UTF-8 等)依次存放在数据块中。比如一个简单的文本文件内容为 “Hello, world!”,这些字符对应的二进制编码就会被顺序存储在某个或某些数据块里。
  2. 🌝 目录文件的数据内容
    目录在 ext2 文件系统中也是一种特殊的文件,其数据块区存放的是目录项(Directory Entry)信息。每个目录项主要包含两部分关键内容:

    • 🌹文件名:记录了该目录下包含的文件或子目录的名称,
    • 🌹对应 inode 编号:通过文件名关联其对应的 inode 编号,以此建立起从文件名到文件实际属性和数据存储位置(通过 inode 去查找)的映射关系。
🌝存放的大小
  1. 🌹数据块大小设定
    数据块区中数据块的大小是在文件系统创建(格式化磁盘分区时)被设定的,常见的规格有 1024 字节(1KB)、2048 字节(2KB)、4096 字节(4KB)等 一般为4KB)。

  2. 🌹文件数据占用数据块数量及大小情况

    • 小文件:如果一个文件的数据量小于设定的数据块大小,那么该文件的数据只占用一个数据块,这个数据块剩余的空间暂时处于未使用状态(但在文件系统层面仍将整个数据块视为被该文件占用)
    • 大文件:对于数据量较大的文件,会根据文件系统采用的分配算法(如连续分配、链式分配、索引分配等,前面已介绍过)占用多个数据块。

在这里插入图片描述

相关文章:

Linux下ext2文件系统

文章目录 一 :penguin:基本概述二 :star: ext2文件系统:star:​ 1. :star:​Boot Block(引导块)位置与作用 三 Block Group(块组):star:​1.:star:​ Super Block(超级块):star:​2.:star:​ Group Descriptor(块组描述符):star:​…...

BUUCTF:web刷题记录(1)

目录 [极客大挑战 2019]EasySQL1 [极客大挑战 2019]Havefun1 [极客大挑战 2019]EasySQL1 根据题目以及页面内容,这是一个sql注入的题目。 直接就套用万能密码试试。 admin or 1 # 轻松拿到flag 换种方式也可以轻松拿到flag 我们再看一下网页源码 这段 HTML 代码…...

【微服务】面试题 6、分布式事务

分布式事务面试题讲解 一、问题背景与解决方案概述 因微服务项目涉及远程调用可能引发分布式事务问题,需解决。主流解决方案有阿里 Seata 框架(含 XA、AT、TCC 模式)和 MQ。 二、Seata 框架关键角色 事务协调者(TC)&…...

【2024年华为OD机试】(C卷,100分)- 分割均衡字符串 (Java JS PythonC/C++)

一、问题描述 题目描述 均衡串定义:字符串中只包含两种字符,且这两种字符的个数相同。 给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。 约定:字符串中只包含大写的 X 和 Y 两种字符。 输入描述 输入一个均衡串…...

Spring Data Elasticsearch简介

一、Spring Data Elasticsearch简介 1 SpringData ElasticSearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。 Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通…...

GESP202312 四级【小杨的字典】题解(AC)

》》》点我查看「视频」详解》》》 [GESP202312 四级] 小杨的字典 题目描述 在遥远的星球,有两个国家 A 国和 B 国,他们使用着不同的语言:A 语言和 B 语言。小杨是 B 国的翻译官,他的工作是将 A 语言的文章翻译成 B 语言的文章…...

键盘过滤驱动

文章目录 概述注意源码参考资料 概述 irp请求会从io管理器中传递到设备栈中依次向下发送,当到达底层真实设备处理完成后,会依次返回,这时如果在设备栈中有我们自己注册的设备,就可以起到一个过滤的功能。键盘过滤驱动就是如此&am…...

dolphinscheduler2.0.9升级3.1.9版本问题记录

相关版本说明 JDK:JDK (1.8) DolphinScheduler :3.1.9 数据库:MySQL (8),驱动:MySQL JDBC Driver 8.0.16 注册中心:ZooKeeper (3.8.4) 问题一:dolphinscheduler2.0.9对应zk版本使用…...

【权限管理】Apache Shiro学习教程

Apache Shiro 是一个功能强大且灵活的安全框架,主要用于身份认证(Authentication)、授权(Authorization)、会话管理(Session Management)和加密(Cryptography)。它旨在为…...

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客,作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为: 2.vs…...

python特殊参数

一、默认值参数和关键字参数 1.默认值参数 形参设定默认值 称为 默认参数。调用函数时,可以使用比定义时更少的参数。调用函数时,如果没有传入默认参数对应的实参,则实参使用默认值默认参数在调用的时候可以不传递,也可以传递 …...

Ubuntu系统Qt的下载、安装及入门使用,图文详细,内容全面

文章目录 说明1 在线安装2 离线安装3 使用Qt Creator创建Qt应用程序并构建运行补充补充一:注册Qt账号 说明 本文讲解Ubuntu系统下安装Qt,包括在线安装和离线安装两种方式,内容充实细致,话多但是没有多余(不要嫌我啰嗦…...

elasticsearch集群部署

一、创建 elasticsearch-cluster 文件夹 创建 elasticsearch-7.6.2-cluster文件夹 修改服务es服务文件夹为node-001 修改config/elasticsearch.yml 配置文件 # Elasticsearch Configuration # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # …...

初学stm32 --- DAC模数转换器工作原理

目录 什么是DAC? DAC的特性参数 STM32各系列DAC的主要特性 DAC框图简介(F1/F4/F7) 参考电压/模拟部分电压 触发源 关闭触发时(TEN0)的转换时序图 DMA请求 DAC输出电压 什么是DAC? DAC,全称:Digital…...

保证Mysql数据库到ES的数据一致性的解决方案

文章目录 1.业务场景介绍1.1 需求分析1.2 技术实现方案 2.业界常用数据一致性方案分析2.1 同步双写方案2.2 MQ异步双写方案2.3 扫表定期同步方案2.4 监听binlog同步方案 1.业务场景介绍 1.1 需求分析 某知名的在线旅游平台,在即将到来的春季促销活动之前&#xff…...

Flutter Xcode 16+ iOS 18.1 使用image_pickers无法弹出选择图片的视图问题

解决 Flutter Xcode 16 使用 image_pickers 无法弹出选择图片视图的问题 在开发 Flutter 应用时,图片选择功能是常见的需求之一。image_pickers 库因其便捷性和功能丰富性,成为了许多开发者的选择。然而,随着 Xcode 版本的不断更新&#xff…...

socket网络编程-TC/IP方式

网络编程 1.概念:两台设备之间通过网络数据传输。 2.网络通信:将数据通过网络从一台设备传输另外一台设备。 3.java.net包下提供了一系列的类和接口,提供程序员使用,完成网络通信。 TCP和UDP TCP协议: 1.使用TCP协…...

《分布式光纤测温:解锁楼宇安全的 “高精度密码”》

在楼宇建筑中,因其内部空间庞大,各类电器设施众多,如何以一种既高效又稳定,兼具低成本与高覆盖特性的方式,为那些关键线路节点开展温度监测,是目前在安全监测领域一项重点研究项目,而无锡布里渊…...

C语言基本知识复习浓缩版:数组

所谓数组(Array),就是一系列数据的集合。这些数据具有相同的类型,并且在内存中挨着存放,彼此之间没有缝隙。换句话说,数组用来存放多份数据,但是它有两个要求: 这些数据的类型必须相…...

Python贪心

贪心 贪心:把整体问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直至所有步骤结束;每个步骤不会影响后续步骤核心性质:每次采用局部最优,最终结果就是全局最优如果题目满足上述核心性质&#xf…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...