存储系列之 从ext2到ext3、ext4 的变化与区别

news/2024/9/17 4:41:05/文章来源:https://www.cnblogs.com/rebrobot/p/18367429

 

来自:https://www.cnblogs.com/orange-CC/p/12673073.html

 

存储系列之 从ext2到ext3、ext4 的变化与区别

引言:ext3 和 ext4 对 ext2 进行了增强,但是其核心设计并没有发生变化。所以建议先查看上上篇的《存储系列之 Linux ext2 概述 》,有了ext2的基础,看这篇就是so easy了。所以这篇约70%来自转载+整理,当然整理也是需要花时间的,原则是尽量简单化。最近参加过几场一个在线教育平台的公开课,有句名言“架构就是把复杂的事情简单化,把简单的事情做没了”,非常赞同,而且我认为不管是架构,还是解决问题,还是现在的写文档,都合适。开始进入干货时间。

 

一、日志文件系统

1、日志文件系统的提出

(1)EXT2文件系统在异常关机后,再开机后会造成文件系统的数据不一致,这时必须做文件系统的修复工作,将不一致与错误的地方修复。然而,此工作相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的数据都不会流失。

(2)CPU速度越来越快,RAM内存越来越大,磁盘高速缓存的容量迅速增加。因此对于大多数的读操作请求来说,有可能直接从高速缓存中得到满足,而不必去真正访问磁盘。

这样为了解决问题、顺应时代的发展,人们设计了“日志式文件系统 (Journal File System,JFS)” 。

ext3就是在ext2的基础上增加了这种日志功能。

JFS最大的特点是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪

由于文件的写入包含许多的细节,必须对目录的inode、目录所在块、文件的inode和文件本身执行写操作,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要修复。
然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯到被中断的部分,而不必花时间去检查其他的部分,故修复速度相当快,几乎不需要花时间。
 
 飞客数据恢复中心提供

2、三种日志模式

(1)日记,Journal

(慢,但风险小)元数据和文件内容都在提交到主文件系统前写入
这样将提高稳定性但性能上有所损失,因为所有的数据都要写入2次
如果没有在/etc/fstab 中加上这个选项,修改中的档案遇上kernel panic或突然断电的时候就可能发生损毁的情况,当然,这还是得看软体是怎么写入档案的。
 

(2)顺序,Ordered

(中速,中等风险)顺序和写回类似,但在对应的元数据标记为提交前,强制写入文件内容。这是很多Linux发行版默认的方式
 

(3)回写,Writeback

(快,但风险最大;在某种感觉上和ext2相当): 这边会写入日志的只有 metadata 而已,档案的内容并不会跟着写入日志里面。
这样的作法让整个效率变快了不少,不过也同样造成了档案写入时不按顺序的结果。
举例来说,档案在附加变大的同时发生了 crash 的情况,就可能造成下次挂载时档案后面就附加一堆垃圾数据的情况。
 
尽管ext3缺少一些当代文件系统的特点,像是动态的inode、树状的资料储放结构等等,都是被视作ext3的缺点之一,不过在这些特点之外,ext3在文件系统回复上面就有了很好的表现。
跟树状结构的文件系统相比,在ext3上面metadata是放在固定的位置,而且在写入的同时会重复写入的一些资料让ext2/3在面临资料损毁的情况下还有挽回的机会。
 

二、ext3的特点

1、高可用性
宕机发生后,恢复ext3文件系统的时间只要数十秒钟。


2、数据的完整性:
ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。

在保证数据完整性方面,ext3文件系统有2种模式可供选择。其中之一就是“同时保持文件系统及数据的一致性”模式。

采用这种方式,你永远不再会看到由于非正常关机而存储在磁盘上的垃圾文件。


3、文件系统的速度:
尽管使用ext3文件系统时,有时在存储数据时可能要多次写数据,但是,从总体上看来,ext3比ext2的性能还要好一些。

这是因为ext3的日志功能对磁盘的驱动器读写头进行了优化。所以,文件系统的读写性能较之Ext2文件系统并来说,性能并没有降低。


4、数据转换
  由ext2文件系统转换成ext3文件系统非常容易,只要简单地键入两条命令即可完成整个转换过程,用户不用花时间备份、恢复、格式化分区等。

用一个ext3文件系统提供的小工具tune2fs,它可以将ext2文件系统轻松转换为ext3日志文件系统。另外,ext3文件系统可以不经任何更改,而直接加载成为ext2文件系统。


5、多种日志模式
 Ext3有多种日志模式,一种工作模式是对所有的文件数据及metadata(定义文件系统中数据的数据,即数据的数据)进行日志记录(data=journal模式);

另一种工作模式则是只对metadata记录日志,而不对数据进行日志记录,也即所谓data=ordered或者data=writeback模式。

系统管理人员可以根据系统的实际工作要求,在系统的工作速度与文件数据的一致性之间作出选择。

三、ext4特点

Linux kernel 自2008年的2.6.28 开始正式支持新的文件系统 Ext4。

Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。

Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:

1. 与 Ext3 兼容。

执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。

原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。


2. 更大的文件系统和更大的文件。

较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。


3. 无限数量的子目录。

Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录


4. Extents。

Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。

而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。


5. 多块分配。

当写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。


6. 延迟分配。

Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能


7. 快速 fsck。

以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。


8. 日志校验。

日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。

Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。


9. “无日志”(No Journaling)模式。

日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。


10. 在线碎片整理。

尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生

Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。

 

11. inode 相关特性

Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。


12. 持久预分配(Persistent preallocation)。

P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。

Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。


13. 默认启用 barrier。

磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录。(若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。)

Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)(也可以参考:是否关闭barrier)
 

 

(图片来自:Ext4中两种不同类型的块组。其中,GDT全局描述符和LDT局部描述符跟内部缓存相关,后续文章再讲解。)

 

 

参考资料:

  https://blog.csdn.net/macrossdzh/article/details/5973639(ext2、ext3与ext4的区别)

《操作系统设计与实现》第三版 上册

 

 

参考:

 

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

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

相关文章

【YashanDB知识库】生成迁移报告失败,报错未知类型错误异常:

【标题】YMP迁移 【问题分类】迁移报告 【关键字】迁移报告、未知类型错误异常 【问题描述】下载迁移报告时报错“未知类型错误异常:”,一长串英文日志报错:【问题原因分析】java版本不对,ymp仅支持java 8和11版本,用户环境用的21版本。【解决/规避方法】将java版本更新为8…

Visual Studio 2013 自定义动态库dll文件lib存放路径

前言全局说明Visual Studio 2013 自定义lib存放路径一、说明 环境: Windows 7 旗舰版 Visual Studio 2013二、设置说明 在一个功能比较全的项目中,有可能会引入第三方库来完成某些功能, 为了让目录结构、文件,清晰,会将引入的dll文件,放置到一个独立目录里。 这样方便管理…

7.路由器配置及使用

9.1 路由器的结构内存只读内存随机存储器ARP:广播信息 非易失随机存储器闪存9.2 路由器的工作原理9.3 路由表 注意,分两种路由表 路由器的路由表(基于端口的)三层交换机的路由表(基于vlan的)9.4 路由器的工作模式9-5 路由器的基本配置及常见命令 路由的配置方式*重要9-6 …

dedecms 两个常见漏洞的复现

dedecms系统的部分复现,还有更多的漏洞没有去复现和发现。侵权声明 本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。 如果您是版权持有人,并且认为您的…

过滤器与拦截器

过滤器 与拦截器 参考https://www.cnblogs.com/Black-Ice/p/16248535.html过滤器 Filter Filter 基本介绍 过滤器 Filter 是 Sun 公司在 Servlet 2.3 规范中添加的新功能,其作用是对客户端发送给 Servlet 的请求以及对 Servlet 返回给客户端的响应做一些定制化的处理,例如校验…

独立站是什么?独立站的优势是什么?为什么要做独立站?一键三问

独立站是指一个完全独立的网站,由公司自主搭建和运营,包括独立的服务器、网站程序和单独的域名等等,完全不依赖于任何第三方平台。它最初用于区分与亚马逊、eBay、速卖通等各种第三方电商平台的区别。市面上有三种建站系统:全自主开发、基于开源软件建设的独立站和基于SaaS…

AP9196 DC-DC 输入3-40V 6A升压恒流电源管理芯 太阳能路灯方案

产品说明 AP9196 是一系列外围电路简洁的宽调光比升压调光恒流驱动器,适用于3-40V输入电压范围的LED照明领域。 AP9196 采用我司专利算法,可以实现高精度的恒流效果,输出电流恒流精度≤3%,电压工作范围为5-40V,可以轻松满足锂电池及中低压的应用需求,输出耐压仅由MOS 耐…

Camera MIPI 协议理解

D-PHY 1、传输模式 1.LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHz HS(High-Speed)模式:用于高速传输数据,速率范围 [80 Mbps, 1Gbps] per Lane 传输的最小单元为 1 个字节,采用小端(低位字节放到内存的低地址端,高位字节放到内存的高地址端)的方式及 LS…

nvm---安装

安装流程:https://blog.csdn.net/qq_22182989/article/details/125387145 第一步:下载安装 nvm

易优CMS网站prenext 获取上一篇、下一篇内容

【基础用法】 名称:prenext 功能:获取当前文档上一篇、下一篇内容。 语法: {eyou:prenext get=pre} 上一篇:{$field.title}{eyou:else /} 上一篇:暂无{/eyou:prenext} {eyou:prenext get=next} 下一篇:{$field.title}{eyou:else /} 下一篇:暂无{/eyou:pre…

易优CMS网站likearticle 功能:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联

likearticle 相关文档 [基础用法] 名称:likearticle 功能:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联。在没有tag标签情况下,就以前3个关键词检索文档标题进行关联。这个标签随着数据量的增加可能会比较影响检索性能。 …