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.mfbz.cn/a/211394.html

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

相关文章

软件工程 - 第8章 面向对象建模 - 4 - 物理体系结构建模

构件图 构件图概述 构件图描述了软件的各种构件和它们之间的依赖关系。 构件图的作用 在构件图中,系统中的每个物理构件都使用构件符号来表示,通常,构件图看起来像是构件图标的集合,这些图标代表系统中的物理部件,…

java学习part30callabel和线程池方式

140-多线程-线程的创建方式3、4:实现Callable与线程池_哔哩哔哩_bilibili 1.Callable 实现类 使用方式 返回值 2.线程池

Linux expect命令详解

在Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。 什么是Expect命令? expect 是一个用于自动化交互式进程的工具。它的主要功能…

【PyTorch】线性回归

文章目录 1. 代码实现1.1 一元线性回归模型的训练 2. 代码解读2.1. tensorboardX2.1.1. tensorboardX的安装2.1.2. tensorboardX的使用 1. 代码实现 波士顿房价数据集下载 1.1 一元线性回归模型的训练 import numpy as np import torch import torch.nn as nn from torch.ut…

Ext4文件系统解析(二)

1、前言 想要了解EXT文件系统的工作原理,那了解文件系统在磁盘上的分布就是必不可少的。这一节主要介绍EXT文件系统硬盘存储的物理结构。 由于当前主流的CPU架构均采用小端模式,因此下文介绍均已小端模式为准。 2、超级块 2.1 属性 下表列举出超级块…

Java 8 中 ReentrantLock 与 Synchronized 的区别

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

分布式ID生成框架Leaf升级踩坑

背景: 在项目中需要一个统一的拿单号等唯一ID的服务,就想起了之前用到的leaf,但是因为项目要求,leaf的版本不符合,需要做一些升级 项目地址:https://github.com/Meituan-Dianping/Leaf 升级点&#xff1…

231202 刷题日报

周四周五,边值班边扯皮,没有刷题。。 今天主要是做了: 1. 稀疏矩阵压缩,十字链表法 2. 快速排序 3.349. 两个数组的交集​​​​​ 4. 174. 地下城游戏 要注意溢出问题!

Motion 5 for Mac,释放创意,打造精彩视频特效!

Motion 5 for Mac是一款强大的视频后期特效处理软件,为Mac用户提供了无限的创意可能性。无论你是专业的影视制作人,还是想为个人视频添加独特特效的爱好者,Motion 5都能满足你的需求,让你的视频脱颖而出。 Motion 5提供了丰富多样…

跳表的基础

跳表的作用 无需数组查找目标元素-----从头遍历---O(n); 有序数组查找目标元素-----二分查找---O(logn); 链表查找目标元素----------只能从头遍历---O(n); 那么链表要如何实现O(logn)的查找时间复杂度呢-----跳表。 跳表的定义 有序链表多级索引跳表 就是一个多级链表 …

TA-Lib学习研究笔记(八)——Momentum Indicators 中

TA-Lib学习研究笔记(八)——Momentum Indicators 中 Momentum Indicators 动量指标,是最重要的股票分析指标,能够通过数据量化分析价格、成交量,预测股票走势和强度,大部分指标都在股票软件中提供。 11. …

力扣题:字符串的反转-11.22

力扣题-11.22 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:541. 反转字符串 II 解题思想:进行遍历翻转即可 class Solution(object):def reverseStr(self, s, k):""":type s: str:type k: int:rtype: str"&quo…

[计算机网络] 高手常用的几个抓包工具(下)

文章目录 高手常用的抓包工具一览什么是抓包工具优秀抓包工具HTTP Debugger ProFree Network AnalyzerKismetEtherApeNetworkMiner 结尾 高手常用的抓包工具一览 什么是抓包工具 抓包工具是一种可以捕获、分析和修改网络流量的软件。它可以帮助您进行网络调试、性能测试、安全…

JavaScript 延迟加载的艺术:按需加载的最佳实践

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

cyclictest 交叉编译与使用

目录 使用版本问题编译 numactl编译 cyclictest使用参考 cyclictest 主要是用于测试系统延时,进而判断系统的实时性 使用版本 rt-tests-2.6.tar.gz numactl v2.0.16 问题 编译时,需要先编译 numactl ,不然会有以下报错: arm-…

Android 中的权限

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、权限分类3.1 安装时权限3.2 运行时…

Java面试题(每天10题)-------连载(41)

目录 Spring篇 1、什么是Spring框架?Spring框架主要有哪些模块? 2、使用Spring框架能带来哪些好处? 3、什么是控制反转(IOC)?什么是依赖注入? 4、解释下Spring中的IoC? 5、BeanFactory和…

docker-compose Foxmic dt版

Foxmic dt 版前言 实现企业对资产的基本管理,包含对资产的登记、维修、调拨、转移等基本功能的支持,并提供对资产的耗材、库存进行管理,有完善的组织架构,非常适合中小企业的需求系统整体覆盖了基本的资产管理、合同管理、运维服务、运维服务、数据中心设备管理等多个模块。…

深入理解原码、反码、补码(结合C语言)

一、引出问题 在学习C语言单目操作符中~按位取反的过程中&#xff0c;对这样一段代码的结果产生了疑惑&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b ~a;//按位取反printf("%d\n", b);return 0; }输出结果…

使用trigger-forward跨流水线传递参数

参考文档&#xff1a;https://docs.gitlab.com/ee/ci/yaml/#triggerforward 今天给大家介绍一个gitlab CI/CD的关键字 - forward&#xff0c;该关键字是一个比较偏的功能&#xff0c;但同时也是一个很实用的功能&#xff0c;我们通过在gitlab的ci文件中使用forward关键字&#…
最新文章