Ext4文件系统解析(一)

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.mzph.cn/news/191998.shtml

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

相关文章

【探索Linux】—— 强大的命令行工具 P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)

阅读导航 引言一、 Linux线程概念1. 什么是线程2. 线程的概念3. 线程与进程的区别4. 线程异常 二、Linux线程控制1. POSIX线程库2. 创建线程 pthread_create() 函数(1)头文件(2)函数原型(3)参数解释&#x…

Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)

学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 第五章、SpringMVC控制器开发详解 三 5.1 核心要点 3.流程跳转 5.2 JavaWeb中流程跳转的核心回顾 5.2.1 JavaWeb中流程跳转的核…

[传智杯 #3 初赛] 课程报名

题目描述 传智播客推出了一款课程,并进行了一次促销活动。具体来说就是,课程的初始定价为 v 元;每报名 m 个学员,课程的定价就要提升 a 元。由于课程能够容纳的学生有限,因此报名到 n 人的时候就停止报名。 现在老师…

20231202_python练习_b站视频爬取(selenium浏览器模拟登录版)

首先手工登录一次获取cookies,然后进行数据保存 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By import time import json# 创建Chrome浏览器对象 chrome_opt webdriver.Ch…

网络入门---网络编程初步认识和实践

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用,ip地址和MAC地址在网络通信时…

QT 中 QProgressDialog 进度条窗口 备查

基础API //两个构造函数 QProgressDialog::QProgressDialog(QWidget *parent nullptr, Qt::WindowFlags f Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *…

面试 Java 基础八股文十问十答第三期

面试 Java 基础八股文十问十答第三期 作者:程序员小白条,个人博客 ⭐点赞⭐收藏⭐不迷路!⭐ 21.说下Java8的Stream流的常用方法 答: forEach遍历、find、match进行匹配reduce进行归约,比如求和,乘,除聚合…

base64转PDF

今天做皖事通的对接,下载电子证照后发现回传的是base64,调试确认是个麻烦事,网上搜了一下没有base64转PDF的在线预览功能,只能自己写个调试工具了,以下是通过纯JS方式写的代码,可直接拿去使用: …

com.intellij.openapi.application.ApplicationListener使用

一般监听期通过如下代码生效 <applicationListeners> <!-- <listener class"com.itheima.taunt.MyApplicationListener"--> <!-- topic"com.intellij.openapi.application.ApplicationListener"…

淘宝用户体验VOC标签体系

本专题共10篇内容&#xff0c;包含淘宝APP基础链路过去一年在用户体验数据科学领域&#xff08;包括商详、物流、性能、消息、客服、旅程等&#xff09;一些探索和实践经验。 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升&#xff1b;在物流侧洞察用户求助时间与…

计算机组成原理笔记——存储器(静态RAM和动态RAM的区别,动态RAM的刷新, ROM……)

■ 随机存取存储器 ■ 1.随机存取存储器&#xff1a;按存储信息的原理不同分为&#xff1a;静态RAM和动态RAM 2.静态RAM&#xff08;SRAM&#xff09;&#xff1a;用触发器工作原理存储信息&#xff0c;但电源掉电时&#xff0c;存储信息会丢失具有易失性。 3.存储器的基本单元…

springboot监听器模式源码精讲

1.前言 很多时候我们看源码的时候看不下去&#xff0c;其中一个原因是系统往往使用了许多设计模式&#xff0c;如果你不清楚这些设计模式&#xff0c;这无疑增加了你阅读源码的难度。 springboot中就大量使用了设计模式&#xff0c;本文主要介绍其中的一种监听器模式&#xf…

网络安全领域的12个大语言模型用例

网络安全是人工智能最大的细分市场&#xff0c;过去几年网络安全厂商纷纷宣称整合了人工智能技术&#xff08;当然也有很多仅仅是炒作&#xff09;&#xff0c;其中大部分是基于基线和统计异常的机器学习。 随着ChatGPT和类似生成式人工智能技术的飞速发展&#xff0c;基于大语…

算法实战应用案例精讲-『机器学习』scikit-learn 工具库应用详解

目录 机器学习库Scikit-learn库使用 SKLearn入门与简单应用案例 引言 1.SKLearn是什么 2.安装SKLearn 3.SKLea

数学建模-基于BL回归模型和决策树模型对早产危险因素的探究和预测

整体求解过程概述(摘要) 近年来&#xff0c;全球早产率总体呈上升趋势&#xff0c;在我国&#xff0c;早产儿以每年 20 万的数目逐年递增&#xff0c;目前早产已经成为重大的公共卫生问题之一。据研究,早产是威胁胎儿及新生儿健康的重要因素&#xff0c;可能会造成死亡或智力体…

深度学习 -- 神经网络

1、神经网络的历史 2、 M-P模型 M-P模型是首个通过模仿神经元而形成的模型。在M-P模型中,多个输入节点对应一个输出节点y。每个输入x,乘以相应的连接权重w,然后相加得到输出y。结果之和如果大于阈值h,则输出1,否则输出0。输入和输出均是0或1。 公式2.1&#xff1a; …

Redis 安装部署

文章目录 1、前言2、安装部署2.1、单机模式2.1.1、通过 yum 安装&#xff08;不推荐&#xff0c;版本老旧&#xff09;2.1.1、通过源码编译安装&#xff08;推荐&#xff09; 2.2、主从模式2.3、哨兵模式2.4、集群模式2.5、其他命令2.6、其他操作系统 3、使用3.1、Java 代码 —…

神经网络中的 Grad-CAM 热图(Gradient-weighted Class Activation Mapping)

Grad-CAM&#xff08;Gradient-weighted Class Activation Mapping&#xff09;是一种用于可视化卷积神经网络&#xff08;CNN&#xff09;中特定类别的激活区域的方法。其基本思想是使用网络的梯度信息来获取关于特定类别的空间定位信息。 Grad-CAM 的具体公式如下&#xff1…

【Android】Window和WindowManager

文章目录 理解Window和WindowManagerWindow和WindowManagerWindow的内部机制Window的添加过程Window的删除过程Window的更新过程 Window的创建过程Activity的Window创建过程Dialog的Window创建过程Toast的Window创建过程 理解Window和WindowManager Window是一个抽象类&#xf…

Python逐步打造惊艳的折线图

大家好&#xff0c;Matplotlib可以快速轻松地使用现成的函数绘制图表&#xff0c;但是微调步骤需要花费更多精力。今天本文将介绍如何使用Matplotlib绘制吸引人的图表&#xff0c;实现折线图的惊艳变身。 1.数据 为了说明方法&#xff0c;本文使用了包含过去50年各国GDP信息的…