从ext3和ext4文件系统来窥探空间和文件大小的演算法则

学习操作系统就不得不研究磁盘以及磁盘文件系统,磁盘是底层物理设备,而文件系统则是管理磁盘的上层工具,文件系统规划了磁盘存放数据的格式,确定了一个操作系统能够支持多大的磁盘空间,每个分区能够支持多大的数据空间,以及每个文件所能支持的大小。通常对系统管理员而言,最需要的知道的就是最大磁盘空间,最大分区空间以及最大文件的大小。本论题只讨论这三种大小到底是怎么算出来的,而不是死记硬背。知道了原理,以后不管遇到什么文件系统,都会有章可循,至少知道需要那些数据可以算出这三种需求的大小。此外,这里不谈磁盘的组成以及文件系统的布局,只说演算方法,可能涉及的相关知识点,请查看相关资料。

很多人可能都是死记几个数值,却不知道为什么是这个数值,这里就来剖析一下:

1.硬性规定

ext3:

1).ext3文件系统采用32bit的块地址索引空间;

2)在inode条目中,引用一个块空间符号需要4byte的大小;

3)对于一个inode来说,设计了12个直接指针索引,一个间接指针索引,一个双间接指针索引,以及一个三间接指针索引

注:

a.这些规定都是文件系统自身的程序代码所决定的,也就是说这是开发时就设计好的,没有为什么,只有是什么;对于其它文件系统也是一样;

b.所谓双间接指针索引和三间接指针索引指的是两级结构和三级结构,相当于linux中的根文件系统目录树一样;

附ext3文件系统中inode内部结构图:

ext4:

1).ext4文件系统采用48bit的块地址索引空间;

2).在inode条目中,不在是使用指针索引的方式来进行与block的映射,而是采用extent来替代指针;此前在ext3中的15个

指针被替换成5个extent,一个extent占用3byte空间;一个extent描述了一组连续的block,当不够用时extent依旧可以采

用间接指针的索引,但没有个数限制。

注:对于extent计算单个文件大小的算法,还没摸索出,没看懂源码。你要是看懂了留言啊。

2.演算法则

好,知道了上面的源码设计规则,下面就可以进行计算了。

ext3:

1).最大支持的文件大小

首先要知道,在linux文件系统,一个block的大小可以为1k,2k,4k,当block的大小为4k时为最大。在linux系统中,每一个文件都要使用一个inode号,因此要想计算出单个文件所支持的最大空间,只要知道inode中能够引用多少个block,而block取最大值4k的时候计算出来的值就是所能支持的单个文件的最大空间。

从上面的硬性规定中可以看出:

a.一个inode支持12个直接指针,因此就表示了12个block

b.一个inode支持一个间接指针,也就是一个指针指向了一个block块,将该block块作为指向最终block的直接指针,这里是一个block为4K,指向一个block要占用4byte的空间,因此一个block的间接指针可以指向4K/4byte的block,即2^10

c.双间接指针最终则指向:2^10*2^10=2^20 个block

d.三间接指针最终执行:2^10*2^10*2^10=2^30 个block

因此最终的block的个数为:12+2^10+2^20+2^30

则最终的大小为:(12+2^10+2^20+2^30)x4KByte

则换算成TB的大小为:(12+2^10+2^20+2^30)x4KByte/1024/1024/1024=4TB

到此,可知ext3文件系统,在block为4K的时候,其支持的单个文件大小为最大,最大为4TB。

注:当然这是理论值,在业界应该都知道实际值与理论值总是会有点偏差,但无伤大雅

2)最大分区大小(即文件系统大小)

在操作系统中,文件系统都是针对分区而言的,一个磁盘必须先分区才能格式化文件系统(即使你将磁盘所有容量划分一个分区).格式文件系统后才能挂载使用,此时就必须知道一个文件系统到底支持多大的分区大小。

在ext3文件系统中,采用32bit的块索引空间,且其采用int的无符号整型,因此一个分区的最大空间为:

2^32*4KByte=16TB

由此,得知在ext3文件系统中,当block为4K时,一个分区的空间将最大,且最大空间为16TB

3)最大磁盘容量

有时候当我们需要更大的磁盘容量空间的时候,会增加磁盘来达到需求。但是最后分区使用时会发现提示不支持这么大的空间。这是为什么?

对于整块磁盘而言,因为存在MBR区域,而MBR中有64byte的空间只能表示4个分区,每个分区16btye来表示,因此对于ext3文件系统支持的最大分区为16TB,那最大系统磁盘容量为:16TB*4=64TB

注:这里有人要问几个问题了

a.有人问:你这里说4个分区,不是有逻辑分区吗,使用逻辑分区划分磁盘可以划分很多磁盘分区。那不是应该无限制吗?

answer:逻辑分区是扩展了磁盘分区的个数,但是逻辑分区也是从4个主分区中的一个主分区扩展出来的,因此所有逻辑分区的空间也不过是最后一个最大主分区的空间扩展出来的。

b.有人问:不对,在linux系统中,新磁盘可以作为分区后挂载到系统中的某个目录下来使用。

answer: 新磁盘虽然可以挂载到系统中的某个目录下来使用,但是对于新磁盘而言也是在ext3文件系统下,新磁盘的本身最大也是64TB。因此这里基于的是在ext3文件系统下,block大小为4K时所能支持的最大磁盘容量,超过了这个大小,分区表无法识别了。千万不要理解成操作系统所能使用的空间大小。

ext4:

1)单个文件的最大空间

由于ext4默认不再使用指针的形式做block映射,而是使用extent来管理所能描述的block个数,本人还未理解extent到底是个什么机制,因此不做计算。但一致的说法是,单个文件可大16TB,相当于ext3的最大分区大小.

2)最大分区大小(即文件系统大小)

ext4使用48bit的块地址索引空间,因此在block为4k的情况下,大小为:

2^48*4KByte=1EB=1024PB=1024*1024TB

这个空间可以说在目前的环境下足够用了。

3)最大磁盘容量

根据ext3的分析结论可知:1EB*4=4EB

OK,就说这么多了,不知道你理解否。反正我是懂了。(^_^)

linux ext4 文件大小,刨根问底:ext3/ext4文件系统最大空间及单个文件大小演算法则...相关推荐

  1. linux分区之ext2,ext3,ext4,gpt

    linux分区之ext2,ext3,ext4,gpt 2013-07-10 12:00:24 标签: ext3 gpt 原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 .作者信息和本 ...

  2. linux 2.6.39 ext3 ext4 更快 tf,ext3,ext4,xfs,jfs,reiserfs和btrfs文件系统性能对比(转载)...

    转载自:http://www.cnblogs.com/tommyli/p/3201047.html#top http://blog.csdn.net/kickxxx/article/details/9 ...

  3. Linux下修改EXT2/EXT3/EXT4文件系统的磁盘卷标的方法

    首先要获取你的磁盘在/dev中的路径,可以使用这两个命令查看:mount和fdisk -l 用到的工具先交代一下: e2fsprogs 和 tune2fs 接下来假设要修改的磁盘是/dev/sda1 ...

  4. 浅谈Linux标准的文件系统(Ext2/Ext3/Ext4)

    Ext 全称Linux extended file system, extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过 ...

  5. linux的磁盘文件系统特点总结(ext2/ext3/ext4/xfs/tmpfs)

    实际中,如何选择磁盘的文件系统,我进行了归纳和总结 1.查看linux系统下支持的文件系统 ll /lib/modules/3.10.0-229.el7.x86_64/kernel/fs/ 2.各个文 ...

  6. EXT2/EXT3/EXT4文件系统数据恢复工具开发计划

    D-Recovery For Linux数据恢复软件已经开发完成,现在把研发计划贴出来,留个纪念. EXT2/EXT3/EXT4文件系统数据恢复工具开发计划 EXT2/EXT3/EXT4是Linux下 ...

  7. mysql ext3 ext4_给你一个惊喜:EXT3/EXT4文件系统数据删除后的数据恢复

    所谓的日志型文件系统,就是文件系统中做了什么操作,操作系统就把它记录下来,比如创建一个新文件,操作系统会在日志文件中记录下来, 删除一个文件,操作系统也会在日志文件中记录下来,记录的信息包括文件名称. ...

  8. linux下使用extundelete恢复ext3/ext4分区数据

    Windows平台恢复误删数据so easy,但是linux就没那么简单了,因为没有"回收站".BUT,如果有一天真的不小心误删了文件,那如何是好?那就借助恢复神器extundel ...

  9. Windows 7下读写Ext2/Ext3/Ext4文件系统

    Linux文件系统格式一般是Ext3,现在Ext4也出来了.如何在Windows上读写这些分区呢? 推荐以下几款软件: 1. ext2Fsd (http://www.ext2fsd.com/) 可以读 ...

  10. Linux下分区格式ext3,Windows下读取Linux的ext3/ext4格式分区

    ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...

最新文章

  1. 安装Windows 2012域控(For SQLServer 2014 AlwaysOn)
  2. SpringBoot之使用RabbitMQ实现延迟队列
  3. vim+python3的字符串却不能使用中文
  4. 微信开发系列之四 - 将SAP C4C的数据更改通知发送到微信公众号上
  5. 大家好!欢迎来到我的博客!
  6. maya 中使用节点连接来求余数:
  7. 冯诺依曼结构和哈佛结构02
  8. win11开始菜单如何分组 Windows11开始菜单进行分组的设置方法
  9. oracle怎么同步时间设置,【oracle数据库获取当前时间】
  10. 基于pytorch的transE代码详解
  11. 医院CRM客户关系管理系统
  12. PS照片换背景,证件照更换背景色
  13. 清空文本框java_Java 添加、删除Word文档中的文本框
  14. 【分布式事务----LCN】LCN原理及使用方式
  15. mame模拟器版大家来找碴外挂,python源码
  16. 第五章、DOS基本命令与批处理(千峰网络安全300课时笔记)
  17. 我想不通,MySQL 为什么使用 B+ 树来作索引?
  18. 敲一万小时的代码可以成为大牛吗?
  19. RuntimeError: Attempting to deserialize object on CUDA device 3 but torch.cuda.device_count() is 1.
  20. 18-《致橡树》-舒婷

热门文章

  1. matlab进化树的下载,mega进化树软件-mega下载 v7.0.14--pc6下载站
  2. 无线电监测软件java_大牛干货:软件无线电的设计和测试
  3. cas session共享
  4. Jtopo对象属性大全
  5. 有限温度量子多体系统与热态张量网络
  6. 计算机科学的两本圣经_计算机科学中的两个难题
  7. 图像辨识系统神经网络图,图像识别技术神经网络
  8. java-php-python-ssm幼儿园管理系统计算机毕业设计
  9. VGA信号一些分辨率的参数(摘抄)
  10. nodejs中字符串和json转换