首页 > 其他分享 >存储系列之 从ext2到ext3、ext4 的变化与区别

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

时间:2024-08-19 15:37:13浏览次数:7  
标签:ext4 ext3 ext2 文件系统 Ext4 Ext3 日志 数据

 

来自: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的区别)

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

 

 

参考:

 

标签:ext4,ext3,ext2,文件系统,Ext4,Ext3,日志,数据
From: https://www.cnblogs.com/rebrobot/p/18367429

相关文章

  • 嵌入式文件系统介绍合集:FAT32、exFAT、ext3、ext4、jffs2、yaffs2、ubifs、squashf
    liwen012024.07.21前言在嵌入式Linux系统中常用的文件系统有:FAT32、exFAT、ext3、ext4、jffs2、yaffs2、ubifs、squashfs。不管是在文件系统类型选型还是嵌入式应用软件面试中,关于文件系统的问题都会经常被提起。就目前而言,并没有哪款文件系统可以适用于所有应用场景,它们各......
  • text2sql-workshop
    text2sql-workshophttps://github.com/fanqingsong/text2sql-workshopText2SQLWorkshopUsingOpenAI,LangchainandPostgresqltoTalktoYourDataOverviewThisrepodemonstratesthepowerofLargeLanguageModelsandGenerativeAIforsimplifyi......
  • 在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信
    在Linux系统中,当你遇到使用touchtest.file命令创建新文件时报错提示磁盘已满,但使用df-h命令查看磁盘使用率时却显示只有60%的磁盘空间被使用,这种情况可能由以下几个原因造成:inode耗尽:在Linux文件系统中,每个文件或目录都需要一个inode(索引节点)来存储其元数据(如权限、所有者......
  • text2speech文生音频模型XTTS-V2部署带UI
    text2speech文生音频模型XTTS-V2部署带UI模型下载链接,及前端代码效果链接见个人博客:https://pylzzz.online效果图:python后端代码flask框架由于使用的是自己电脑的gpu运算,所以中间有转发的过程,利用内网穿透和虚拟局域网通信。内网穿透教程可见个人博客所需依赖tts......
  • sublime text3 修改 exec.py文件编译警告返回信息,去掉绝对路径
    第一步:找到exec.py文件1.找到路径:C:\SublimeText3\Packages。2.找到Default.sublime-package复制一个备份,后缀改成Default.rar并且解压缩,在解压缩文件里面找到exec.py文件。3.复制exec.py文件到 C:\SublimeText3\Data\Packages\User下面,或者从编辑器上面打开......
  • 文件系统(六):一文看懂linux ext4文件系统工作原理
    liwen012024.06.09前言Linux系统中的ext2、ext3、ext4文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级。目前ext4是一个相对较成熟、稳定且高效的文件系统,适用于绝大部分规模和需求的Linux环境。ext4它突出的特点有:数据分段管理、多块分......
  • ext4 文件系统相关命令
    日志文件系统大多数linux操作系统中的默认文件系统选择。ext4文件系统由ext3文件系统改进而来,而后者又是从ext2文件系统改进而来。常用的命令:$df-Thdf-T可以流浪当前系统挂载的卷及设备,-T可以打印设备类型,比如ext4tmpfs或者其他。root@ubuntu-server:~#df-ThFi......
  • 【Text2SQL 论文】SQLova:首次将 PLM 应用到 NL2SQL 中
    论文:AComprehensiveExplorationonWikiSQLwithTable-AwareWordContextualization⭐⭐⭐⭐KR2MLWorkshopatNeurIPS2019,arXiv:1902.01069Code:SQLova|GitHub参考文章:将预训练语言模型引入WikiSQL任务|CSDN一、论文速度这篇论文对SQLNet进行改进,首......
  • 安装Sublime Text3+pytorch虚拟环境
    01安装SublimeText3下载链接:更改安装路径,不要放c盘就好——>next勾选Addtoexplorercontextmenu——>next之后就一直next,直到出现下图,点击Finish安装就完成了02汉化Preferences——PackageControl——弹出下面的界面(输入in,出现红色方框内的内容时,回车)——......
  • 释放系统C盘的ext4.vhdx
    ext4.vhdx是个虚拟磁盘,默认位置为C:\Users{用户名}\AppData\Local\Docker\wsl\data\ext4.vhdx,会占用很大磁盘空间,可采用下列办法将其改到其它磁盘或分区,如D分区。1、查看有哪些:#wsl-l-vNAMESTATEVERSION*docker-desktop-dataRunnin......