Ext4文件系统解析(一)

news2025/9/20 14:14:17

1、前言

熟悉Linux操作系统的都应该或多或少的了解或者使用过Ext4文件系统。
接下来,会简单介绍Ext4文件系统的一些特性和工作原理。

2、常用概念

在介绍Ext文件系统之前,先简单描述一些相关概念。
块(Block):Ext文件系统存储分配的基本单位。块是由多个簇构成的集合,大小在1KB和64KB之间。默认情况下块大小=4KB。 默认情况下文件系统最多可以管理232块。但是当指定64位特性时,最多可以管理264块。
块组(Block Group):多个块联合在一起称之为块组。每个块组中都存储着本块组的超级块、组描述符、块位图和索引节点位图。
超级块(Super Block):超级块记录整个文件系统的大量信息,如数据块个数、inode个数、支持的特性、管理信息等。
组描述符(Group Descriptors):文件系统每一个块组都对应有一个块组描述符,它是块组中的第二个内容。组描述符记录了位图和inode表的位置信息。
块位图(Block Bitmap)/索引节点位图(Inode Bitmap):块位图跟踪块组中数据块使用情况。Inode位图跟踪块组中Inode使用情况。每个位图一个数据块,每一位用0或1表示一个块组中数据块或inode表中inode的使用情况。
索引节点表(Inode Table):用于存储文件的Inode信息。

3、磁盘分布

EXT4文件系统的标准磁盘布局如下:
在这里插入图片描述

4、常用特性

4.1 sparse super

从上一章节中可以看出,超级块和组描述符在每一个块组中都存在冗余备份。而这种方式虽然保证了文件系统的稳健性,但无疑造成了磁盘空间的浪费。因此Ext4提供了2种超级块冗余备份的方式。

  • RO_COMPAT_SPARSE_SUPER
    超级块和组描述符的冗余备份仅存放在编号为0或3、5、7的幂次方的块组中。
  • COMPAT_SPARSE_SUPER2
    只提供了2个超级块的冗余备份,分别位于block group 1和最后一个block group。

4.2 flex bg

开启灵活块组特性(INCOMPAT_FLEX_BG)后,文件系统会将多个连续块组的块位图、Inode位图和inode表合并到一起,从而有效减少磁盘寻道时间。

Flex_bg中块组的个数存储在超级块中,默认灵活块组中的块组数 = 16。下图为开启flex bg和sparse super后的磁盘结构。

在这里插入图片描述

4.3 meta bg

通常,在每个冗余备份的超级块的后面是一个完整的(包含所有块组描述符的)块组描述符表的备份。

这样会产生一个限制,按照块大小=4096,组块大小=128M= 2^27 ,组块描述符=64计算,一个块组最多可以管理:2^27 / 64 = 2^21组块,即文件系统最大支持256TB。

使用元块组Meta元组特性,每个块组都包含该块组自己的描述符的冗余备份。目前 Ext4最大支持的是48bits block寻址方式,所以最大卷大小为2 ^ 48 个block,一个块组128MB,因而可以创建2 ^ 33个块组。下图为开启meta bg和sparse super后的磁盘结构。

在这里插入图片描述

注意:meta bg和flex bg特性可以同时使用。

5、工作方式

说到Ext文件系统的工作方式之前,首先要说到的就是Inode。那么,Inode究竟是什么呢?

inode (索引节点):

  • 记录文件的权限、属性和数据所在块block的号码
  • 每个文件都有且仅有一个的inode,每个inode都有自己的编号,可以把inode简单地理解为文档索引。

在linux中,无论文件还是文件夹都通过inode来管理。
举个例子,当我们想要查看某个文件的内容时,

  1. 首先要读取根目录**(Inode 2),根据直接/间接块寻址(Direct/Indirect Block Addressing)或者扩展树(Extent Tree)的方式解析inode.i_block**内容。
  2. 根据文件夹布局是**经典线性布局(Linear Classic Directories)还是hash树(Hash Tree Directories)**布局,遍历根目录下的所有inode和文件名,
  3. 当找到匹配的文件夹名后,在打开匹配文件夹的inode,继续遍历,反复执行,直到找到对应的文件。
  4. 找到文件后按照同样的方式解析inode.i_block,获取文件内容。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一百八十七回 DropdownButton组件

文章目录 1. 概念介绍2. 使用方法2.1 DropdownButton2.2 DropdownMenuItem 3. 示例代码4. 内容总结5. 经验分享 我们在 上一章回中介绍了"DropdownMenu组件"相关的内容,本章回中将介绍 DropdownButton组件.闲话休提,让我们一起Talk Flutter吧…

STM32DAC输出可调电压、三角波、正弦波

STM32DAC输出可调电压、三角波、正弦波 DAC简介输出可调电压输出正弦波输出三角波 本期内容我们将学习stm32DAC的原理和使用方法 DAC简介 DAC,全称:Digital-to-Analog Converter,指数字/模拟转换器。可以将数字量转换为模拟量进行输出&#…

FL Studio21.2汉化永久中文语言包

FL Studio21.2这款软件在国内被广泛使用,因此又被称为"水果"。它提供音符编辑器,可以针对作曲者的要求编辑出不同音律的节奏,例如鼓、镲、锣、钢琴、笛、大提琴、筝、扬琴等等任何乐器的节奏律动。此外,它还提供了方便快…

2023年12月03日新闻简报(国内国际)

新闻简报 每天三分钟,朝闻天下事。今天是:2023年12月03日,星期日,农历十月廿一,祝工作愉快,身体健康,生活喜乐: 👉👉国内新闻 1、1日凌晨,四川…

蓝桥杯day04——采购方案

1.题目 小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。 注意:答案需要以 1e9 7 (1000000007) 为底取模,如:计…

基于c#+mysql+winform学生成绩管理系统-实践作业

基于c#mysqlwinform学生成绩管理系统-实践作业 一、系统介绍二、功能展示四、其它1.其他系统实现五.获取源码 一、系统介绍 分老师与学生两个界面; 老师能查看学生信息并评价,添加,删除学生; 老师能查看学生成绩并修改&#xff0…

【PTA-C语言】实验三-循环结构I

如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验三-循环结构I 7-1 求交错序列前N项和 (分数 15)7-2 寻找250(分数 15)7-3 最大公约数和最小公倍数(分数 15)7-4 统计字符&#xff0…

css中元素水平居中的方式

文章目录 前言水平居中:垂直居中方法一: text-align: centerdisplay: table-cell方法二:父元素静态定位子元素通过相对定位来实现方法三:通过静态和相对定位方法四 css图片居中用text-align:center无效怎么回事?如何让图片在DIV中水平和垂直两个方向都居…

C语言中的格式化输出符号:%d %c %p %x等

文章目录 概览%d%c%d和%c的区别%p%x %X输出浮点数参考 概览 C语言中的格式化输出符号有很多,以下是一些常见的: %d 或 %i:用于输出十进制整数。 %u:用于输出无符号十进制整数。 %f:用于输出浮点数。 %s:用…

mac修改默认shell为bash

1. 打开系统偏好设置 2. 点击用户群组 3. 按住ctrl,点击用户名 4. 点击高级选项,修改登录shell 参考:在 Mac 上将 zsh 用作默认 Shell - 官方 Apple 支持 (中国)

AI 绘画 | Stable Diffusion 电商模特

前言 上一篇文章讲到如何给人物更换背景和服装。今天主要讲电商模特,就是服装电商们的固定服装产品图片如何变成真人模特穿上的固定服装产品效果图。如果你掌握了 《AI 绘画 | Stable Diffusion 人物 换背景|换服装》,这篇文章对你来说,上手会更轻松。 教程 提取服装蒙版…

OpenCV技术应用(5)— 将一幅图像均分成4幅图像

前言:Hello大家好,我是小哥谈。本节课就手把手教你如何将一幅图像均分成4幅图像,希望大家学习之后能够有所收获~!🌈 目录 🚀1.技术介绍 🚀2.实现代码 🚀1.技术介绍 如果将下图…

ubuntu22.04离线手动安装openstack yoga和ceph quincy

目录 写在前面材料准备一. OpenStack部1. 创建虚拟网络和虚拟机2. 配置离线环境3. 环境准备3.1 配置网络3.2 配置主机名并配置解析3.3 时间调整3.4 安装openstack客户端3.5 安装部署MariaDB3.6 安装部署RabbitMQ控制节点操作3.7 安装部署Memcache控制节点操作 4. 部署配置keyst…

有点迷糊class和初始化参数的用法了

翻阅手册https://www.runoob.com/python3/python3-class.html Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&…

牛客算法题 【HJ97 记负均正】 golang实现

题目 HJ97 记负均正 描述 首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。 0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均…

基于PHP的高中生物学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …

6.C转python

1.用append函数增加数组元素时,注意好那个 . 2.可以用insert()函数增加列表任意位置的元素,参数一为插入的下标,而二为内容 例: 若那个参数一超过了列表的最大下标,则会在列表末尾添加内容 3.查找列表中的元素 例: 4.可以使用index函数来找到当期那要找的元素的下标 例(…

@RequestMapping处理请求异常

使用RequestMapping不指定请求方式,多种请求方式都支持。 Get格式FORM_URLENCODED Content-Typeapplication/x-www-form-urlencoded URL形式传参,请求体里面的内容是:usernamejohnexample.com&passwordsecretpassword&grant_type…

制作一个RISC-V的操作系统-环境搭建

文章目录 前言环境搭配 前言 由于之前的操作系统反馈难度太大,所以准备从这个RISC-V操作系统出发,以后知识层面更加深入再去完善。 环境搭配 按照依赖项 $ sudo apt update $ sudo apt install build-essential gcc make perl dkms git gcc-riscv64-…

CGAL的三维曲面网格生成

1、介绍 此程序包提供了一个函数模板,用于计算三角网格,以近似表面。 网格化算法要求仅通过一个能够判断给定线段、直线或射线是否与曲面相交,并且如果相交则计算交点的oracle来了解待网格化的表面。这一特性使该软件包具有足够的通用性&…