当前位置: 首页 > 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…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...