linux ext3/ext4文件系统(part1格式化)

news2025/1/16 20:58:44

ext4文件系统结构

ext3的代码已经在v4.3被删除掉了(ARM: tegra: Rebuild default configuration on v4.3-rc1 · torvalds/linux@241e077 · GitHub) 

ext4格式化的代码可以参考e2fsprogs的实现:mke2fs.c

格式化后的文件系统结构如下图:

flexible group

如果支持flexible group功能,默认可将16个group打包为一个flexible group。

每个group 都有四个主要区域:

  • block bitmap
  • inode bitmap
  • inode table
  • data

其中前三部分是元数据,元数据在 flexible 模式下有两种布局方式:

  • 一种是全部放在第一个flexible group的第一个group上。
  • 另一种是每个flexible group中第一个group上存放这个flexible group 的元数据

当元数据占用达到一个group的四分之三时,会将这个group的全部作为元数据存储,称meta_group。

如果不启用flexible,则每个group维护自己的元数据(参考:linux 中 ext2文件系统实现)

group 中块数在256~8*block_size之间,默认8 * block_size(比如一块4096大小的话,一个group有32k个block)。

元数据备份

ext2支持为0、1、3/5/7的n次方块加入super block 与group desc block的备份 (参考:linux 中 ext2文件系统实现)。ext4将这标记成了deprecated。如果开启备份,则只备份一份,默认备份在最后一个group上。

block cluster

ext4将block打包成了cluster(默认16个block 为一个cluster),在分配块时,以cluster为最小单位去分配。格式化过程中会先在内存中存一个 block bitmap, 以block为最小单位去分配块,在分配完block/inode bitmap和inode table 后,会将bitmap将为以 cluster 为单位,存到磁盘上。

初始文件

初始文件至少有root 和 lost_and_found目录,其它:

  • 如果有bad block,会将bad block 的位置以数组形式存到bad block inode上
  • 如果启用日志功能,则生成日志文件,它包含了fast commit 日志和普通的日志(fast commit 记录更精练,是一种优化的日志,具体实现还没有看,参考:LWN: ext4 文件系统的快速提交!-CSDN博客)两部分日志的大小的和限制在1k-10m个block之间。
  • 如果启用orphan file 功能(删除文件时,先将inode记入orphan file,在inode的data块完全释放后才将inode从orphan file移除,防止系统崩溃后文件删除了,但内容块没有回收的情况),创建orphan file 它的大小在32-512个block之间(总块数除以4k)。

e2fsprogs对ext4格式化的实现

main():
  // 1、解析用户参数,有些参数从profile读
  PRS(argc, argv):
    blocksize:1024~65536之间
    block per group:默认8 * block_size块
    inodes_count:默认第8192字节对应一个inode
    meta group:是否指定了完全存元数据的 group
    num_backups: super + group desc 的备份group号,默认是1号和最后一个group
    cluster_size:默认16个block

  // 2、计算参数
  ext2fs_initialize():
    计算 s_clusters_per_group
    计算 desc_blocks:每个group一个desc
    计算 s_inodes_count 默认平均4096byte一个inode
    计算 s_inodes_per_group
    计算 s_reserved_gdt_blocks:为以后扩展ext4大小预留的group desc,预计filesystem大小可以增长到1024倍
    group desc block 大于3/4的group时,启用meta block group,并 s_reserved_gdt_blocks为0
    最后一个group要装备份super + group desc block,如是太小,要删掉最后一个group重算上面的参数
    在分配内存记录格式化占用的block,此时的block bitmap单位是block,不是cluster
    分配其它内存,比如inode bitmap,group desc


  3、检测标记坏块,并标记在block bitmap上

  4、分配block bitmap、 inode bitmap、 inode table,有两种模式packed/unpacked(packed_allocate_tables、ext2fs_allocate_tables)

  5、将block bitmap 转为以cluster 为单位的bitmap

  6、分配inode初始文件
    root lost_and_found
    标记reserve inode
    创建bad block inode 记录哪些块不能用
    添加journal inode 占用1k-10m个块之间 
    添加orphan file 最多32-512个block 

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

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

相关文章

AI绘图软件,科技之旅绘画

科技与艺术的碰撞总能产生令人惊叹的火花,现在小编要给大家介绍一款引领未来艺术潮流的AI绘图软件——首助编辑高手。这是一款将人工智能与创意绘画完美结合的软件,它将为你打开一扇全新的创意之门。 所需工具: 一个【首助编辑高手】软件 …

mysql原理---InnoDB统计数据是如何收集的

以下聚焦于 InnoDB 存储引擎的统计数据收集策略。 1.两种不同的统计数据存储方式 InnoDB 提供了两种存储统计数据的方式: (1). 永久性的统计数据 这种统计数据存储在磁盘上,也就是服务器重启之后这些统计数据还在。 (2). 非永久性的统计数据 这种统计数…

❀My学习小记录之算法❀

目录 算法:) 一、定义 二、特征 三、基本要素 常用设计模式 常用实现方法 四、形式化算法 五、复杂度 时间复杂度 空间复杂度 六、非确定性多项式时间(NP) 七、实现 八、示例 求最大值算法 求最大公约数算法 九、分类 算法:) 一、定义 …

Smartbi获工信部旗下赛迪网“2023行业信息技术应用创新产品”奖

近日,由工信部旗下的赛迪网、《数字经济》杂志共同主办的2023行业信息技术应用创新大会上,“信息技术应用创新成果名单”重磅揭晓,思迈特软件凭借“Smartbi 自然语言分析引擎”斩获“2023行业信息技术应用创新产品”大奖。 据了解&#xff0c…

codellama模型部署(待补充)

codellama介绍 Code Llama 是一个基于Llama 2的大型代码语言模型系列,在开放模型、填充功能、对大输入上下文的支持以及编程任务的零样本指令跟踪能力中提供最先进的性能。我们提供多种风格来覆盖广泛的应用程序:基础模型 (Code Llama)、Python 专业化 …

【String str = new String(“AAA“) 创建了几个对象?】

✅典型解析 创建的对象数应该是1个或者2个。 首先要清楚什么是对象? Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的,在HotSpot虚机中,存储的形式就是oop-klass model,即ava对象模型。我们在Java代码中&am…

Vue框架引入Axios

首先已经创建好了 Vue 框架,安装好了 node.js。 没有完成的可按照此博客搭建:搭建Vue项目 之后打开终端,使用命令。 1、命令安装 axios 和 vue-axios npm install axios --save npm install vue-axios --save2、package.json 查看版本 在 p…

Binder系列-service_manager.c

1. service_manager的任务 open 驱动告诉驱动,它是“servicemanager”在一个循环里 从驱动读取数据 解析数据 调用,根据code执行注册服务或者获取服务 (图来自韦老师的视频) 2.代码流程 2.1.open驱动 //framework…

elasticsearch列一:索引模板的使用

概述 近期一直在负责es这块,就想着和大家分享一些使用经验,我们从存储、查询、优化、备份、运维等几个方面来做分享。今天咱们先看下如何更加合理的存储数据。 初见索引模板 记得刚接触es还是18年那会,项目上线后因一些原因导致日志这部分的…

深入理解JVM虚拟机第三十二篇:详解JVM当中本地方法栈

😉😉 欢迎加入我们的学习交流群呀! ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring等等很多应用和源码级别的高质量视频和笔记资料,你想学的我们这里都有! 🥭🥭3:QQ群:583783824 📚📚 工作VX:BigTreeJava 拉你…

059:vue中使用 AJAX来读取来自XML文件的信息

第059个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

SpreadJS 集成使用案例

SpreadJS 集成案例 介绍: SpreadJS 基于 HTML5 标准,支持跨平台开发和集成,支持所有主流浏览器,无需预装任何插件或第三方组件,以原生的方式嵌入各类应用,可以与各类后端技术框架相结合。SpreadJS 以 纯前…

Python之路:网络工程师的自动化进阶(第2版)

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 I. 引言 随着网络技术的不断发展,…

H5向微信小程序发送信息(小程序web-view打开H5)

引入weixin-js-sdk npm i weixin-js-sdk 页面引入 // 引入wxjsimport wx from "weixin-js-sdk"; 点击触发方法 methods: {goweap(id){console.log(wx);// H5传递数据 (navigateBack)wx.miniProgram.navigateBack({delta: 1});wx.min…

混沌工程的核心原则是什么?

在软件开发和系统运维领域,一种新兴的实践逐渐崭露头角,那就是混沌工程。混沌工程的核心理念是通过有计划的、控制的实验引入混沌,以验证和改善系统的稳健性。本文将介绍混沌工程的定义及核心原则是什么! 什么是混沌工程? 混沌工程是一种系统…

【理论】STM32定时器时间计算公式 +【实践】TIM中断1s计时一次

前言:定时器TIM的详细知识点见我的博文:11.TIM定时中断-CSDN博客 STM32定时器时间计算公式 公式解释: ARR(TIM_Period):自动重装载值,是定时器溢出前的计数值 PSC(TIM_Prescaler&…

k8s的二进制部署(源码包部署)

实验条件: 主机名 IP地址 组件 作用 master01 20.0.0.17 kube-apiserver、kube-controller-manager、kube-scheduler、etcd k8s部署 master02 20.0.0.27 kube-apiserver、kube-controller-manager、kube-scheduler node01 20.0.0.37 kubelet、kube-pro…

工具系列:TimeGPT_(8)使用不规则时间戳进行时间序列预测

文章目录 介绍不规则时间戳的单变量时间预测不规则时间戳的外生变量时间预测 介绍 在处理时间序列数据时,时间戳的频率是一个关键因素,可以对预测结果产生重大影响。像每日、每周或每月这样的常规频率很容易处理。然而,像工作日这样的不规则…

OpenAPI,已支持表单数据格式校验

OpenAPI 路径 开放平台 功能简介 「OpenAPI」- 支持表单数据格式校验。 通过「OpenAPI-新增表单数据」接口,新增数据时,若数据格式不匹配,会导致无法新增。 例如,数字不能新增到日期格式的表单字段。 请参考数据格式传参&a…

IPv4归属地信息查询方法与应用

IPv4地址归属地信息查询是网络管理和安全领域的关键工具。本文将介绍IPv4地址的概念,探讨IPv4归属地信息的重要性,并详细介绍几种查询IPv4归属地信息的方法以及其应用场景。 第一部分:IPv4地址简介 1.1 什么是IPv4地址 IPv4(In…