Linux系统支持多种文件系统, 文件系统间的区别在于: 不同文件系统对同一块磁盘分区存储文件的结构不同. 举例来说相当于某些土豪买了500平住房: 有些工作狂会隔出1间卧室,1间客厅,1间厨房和5个工作间; 有些美食家会隔出3间卧室,3间客厅,4间厨房等等. 文件系统就相当于对于分割出不同性能的区域用于使用各自不同的方式存储数据.

Ext(extended file system)是Linux支持的正规文件系统, 本文以Ext2和Ext3为模型讲解这两种基础文件系统的逻辑结构.

Ext2文件系统

Ext2文件系统中将磁盘分区划分为两个主要区域: 元数据区(matadata area)和数据区(data area). 其中元数据区用于存放文件的属主, 属组, 访问权限, 时间戳以及文件系统数据和元数据分配信息等相关属性信息, 数据区用于存放文件中的真实数据.

由于现在的物理磁盘的容量大小越来越大, 存储的数据越来越多, 在读取和写入文件有时需要遍历整个磁盘空间, 非常消耗时间, 因此在磁盘分区上创建文件系统时会先将磁盘划分为多个块组(block group), 每个块组中有各自的元数据区和数据区, 并对他们进行独立自治. 文件系统的逻辑结构如下图所示:

其中的 boot block 分区是指文件系统的启动扇区, 可以用于安装引导程序而不需要占用硬盘上唯一的MBR区域, 主要用于多操作系统主机上.

块组的内部逻辑结构如下图所示:

由上图所示可以看到块组中元数据区和数据区的逻辑结构.

数据区

数据区结构比较单一, 由许多大小相同的数据块(block)组成, 数据块的大小规格分别有: 1KB, 2KB, 4KB. 数据块的大小是在文件系统格式化后就固定的, 此后无法再进行修改. 对于目录来说, 数据块用于存储该目录下的文件名与该文件的inode号; 对于文件来说, 数据块用于存储文件中的数据. 因为数据块大小能够决定文件系统中存储的单个最大文件的大小, 而且块大小与主机承载业务类型有很大关系, 因此在设置数据块大小时应根据具体问题具体分析.

元数据区

元数据区主要有Super Block(超级块), FSD(文件系统描述说明), inode table(inode表), inode bitmap(inode位图)和block bitmap(数据块位图) 5部分组成.

1. Super Block(超级块)

超级块用于描述整个文件系统的元数据信息: block大小, block和inode的总量,空闲量,占用量, 文件系统的挂载和检测时间等信息, 超级块对于整个文件系统都是至关重要的, 因此会在多个随机的块组中备份超级块.

2. FSD(文件系统说明)

文件系统说明用于描述当前块组的元数据信息, 比如块组区间占用的block的编号范围.

3. inode table(inode表)

inode表存放的是每个文件自己的inode条目, 每个inode条目的大小是固定的128KB, 该条目中主要含有对应文件的两类信息: 文件的元数据信息和文件的数据块指针.

3-1. 文件的元数据信息主要有: 文件的属主, 属组, 访问权限, 时间戳等相关属性.

3-2. 文件的数据块指针用于存放该文件存储数据的block块的地址信息, 1个inode条目中含有4类指针: 12个直接指针, 1个间接指针, 1个二级间接指针和1个三级间接指针.其中直接指针可以直接指向block数据块, 间接指针指向一个数据块之后, 再由该数据块来指向更多的block数据块来获取更多数据块空间存储文件数据, 二级间接指针和三级间接指针以此类推. 每个block本身的地址标号会占用对应指针4B的存储空间, 因此不同的block块大小, 能存储的单个最大文件大小也不相同.

以block块大小为1KB为例:

12个直接指针可以指定的block存储空间为: 12x1KB=12KB;

1个间接指针可以指定的block存储空间为: 1KB/4BX1KB=256X1KB=256KB

1KB/4BX1KB/4BX1KB=256X256X1KB=65536KB

1KB/4BX1KB/4BX1KB/4BX1KB=256X256X256X1KB=16777216KB

单个文件总大小为: 48+256+65536+16777216KB=16843020KB=16.06GB

# 因为大于2KB的block会受到ext2文件系统本身的限制, 该计算方式不适用于block为2KB或4KB大小的block.

4. inode bitmap(inode位图)

inode位图使用每个Byte中的单个位用于描述对应位置的indoe条目是否空闲, 主要作用是便于查询空闲的inode条目和遍历整个inode条目空间.

5. block bitmap(block位图)

block位图原理与inode位图原理类似, 主要作用是便于查询空间的inode条目和遍历整个inode条目空间.

以上就是Ext2文件系统的逻辑结构.

=============================================================

Ext3文件系统

Ext3文件系统会将磁盘分区划分为3种区域: 元数据区, 数据区和日志区域, 其中(journal area)日志区域是Ext3文件系统和Ext2文件系统的最大区别, 如下图所示:

日志区域的主要功能是临时缓存正在进行I/O操作的文件的元数据信息, 当该文件正确传输完成后, 该文件系统就会将临时缓存的元数据信息存储至文件系统的元数据区中. 日志区域的最大优点是对于执行I/O操作的文件信息发生故障时, 文件系统不需要遍历整个文件系统的元数据区来查找发生故障的block数据块信息, 只需要查找日志区域中临时缓存的元数据即可, 大大缩短了查询时间.

Ext3文件系统的元数据区和数据区的结构和功能与Ext2文件系统相同, 此处就不再复述.

小结:

Ext系列文件系统是Linux上比较基础的文件系统类型, 也是需要大家掌握的, 希望这篇分析能够帮助大家理解Ext2和Ext3文件系统的逻辑结构和相应功能.

本人水平有限, 如有理解不当的地方, 请大家给予指正, 非常感谢!

linux机械硬盘 ext32,Linux磁盘分区管理--ext2和ext3文件系统逻辑结构分析相关推荐

  1. linux命令之----fdisk命令-磁盘分区管理工具

    1.fdisk命令作用 fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表.BSD或者SUN类型的磁盘列表,是一个磁盘分区管理工具. 1)什么是分区?     分区是将一个硬盘驱动器分成 ...

  2. Linux进阶篇--磁盘分区管理

    Linux进阶篇–磁盘分区管理 11.1 磁盘基础介绍 设备文件 * I/O Ports:I/O设备地址 * 设备类型:   块设备:block,存取单位"块",来自于磁盘   字 ...

  3. linux中fdisk的参数,Linux fdisk命令参数及用法详解--Linux磁盘分区管理命令fdisk

    fdisk 命令 linux磁盘分区管理 用途:观察硬盘之实体使用情形与分割硬盘用. 使用方法: 一.在 console 上输入 fdisk -l /dev/sda ,观察硬盘之实体使用情形. 二.在 ...

  4. 总结:Linux磁盘分区管理

    1. Linux系统中,/dev/目录下存放着Linux系统所使用的各种设备,其中存储设备为 b---------:块设备(其特点:按块为单位存放,随机访问) c---------:字符设备(其特点: ...

  5. linux分区管理,Linux下磁盘分区管理

    Linux下磁盘分区管理 发布时间:2009-04-11 10:29:37来源:红联作者:lvshengming 在Linux下对IDE的设备是以hd命名的,第一个ide设备是hda,第二个是hdb, ...

  6. linux 硬盘活动时间,硬盘活动分区(将磁盘分区标为活动或取消活动的方法)

    硬盘活动分区(将磁盘分区标为活动或取消活动的方法) 发布时间:2012-06-05 00:47:10   作者:佚名   我要评论 活动分区是计算机启动分区,操作系统的启动文件都装在这个分区,wind ...

  7. Linux基础笔记18 | 磁盘分区管理

    fdisk 分区工具 fdisk 这个古老的软件并不认识 GPT ,所以 fdisk 只支持 MBR 的分区模式,且磁盘小于2T,大于了就不能使用 fdisk 进行分区了 新磁盘的分区 一块新加的磁盘 ...

  8. linux系统下集群共享磁盘sdb分区,Linux下的两种磁盘分区工具的使用

    今天我们来说一下如何使用fdisk和parted分区工具来进行硬盘分区,.下面我来说一下在Linux系统中这两种硬盘分区工具的使用方法: ----------fdisk分区工具---------- 在 ...

  9. linux基础教程 05,Linux应用基础教程-CH05磁盘分区和LVM

    Linux应用基础教程-CH05磁盘分区和LVM (49页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 第5章 磁盘分区和 LVM主讲人 ...

最新文章

  1. php 变量的8类类型
  2. 概率统计笔记:高斯威沙特分布
  3. 微信分享无响应的解决
  4. (16)VHDL实现半加器与全加器
  5. MySQL设置数据格为空白或NULL
  6. 浅谈Java中的栈和堆
  7. ubuntu开机启动+图标配置
  8. matlab 整流滤波,基于Matlab_Simulink的整流滤波电路的建模与仿真
  9. ipv6看电视的链接
  10. java即时通讯 开源_im即时通讯开源
  11. 【T+】畅捷通T+单据生成凭证的时候,提示存在单据未正常记账,需要重新计价。
  12. Gurobi--Error code: 10005. Unable to retrieve attribute solved ‘Pi‘ 解决
  13. 香港公司--离岸帐户现金
  14. 决定考BEC商务英语
  15. 在 PostgreSQL 中简单实现 Insert ignore 操作
  16. 【菜鸟窝】人工智能就业与面试指南
  17. vue.js报错 vue.js:597 [Vue warn]: Cannot find element: #app
  18. 基于SpringBoot+Vue在线考试系统【web端+小程序端】【附带源码】
  19. NGUI 中,长技能图标显示技能Tips的核心代码
  20. 如何实现一个Web Server

热门文章

  1. 结合网页排名来做社会网络分析,挖掘核心人物
  2. fopen以共享模式打开文件
  3. 0022 arduino 实例讲解 TWI arduino 的 iic 库 i2c库 arduino Wire 库 主机 读 的例子
  4. 第三章:使用云产品的优势
  5. 聊天语音APP开发|聊天语音软件开发-实时音视频技术
  6. IPMI的配置及常规功能
  7. 10个基于python的的BBS论坛的源码
  8. bootstraptable 手册_bootstrap table表格使用方法详解
  9. 让Linux进程在后台运行
  10. 301跳转 https_宝塔面板转https(ssl)后设置301跳转将http跳转到https