ext文件系统

Ext文件系统


1.1 ext 概述

目前Linux主流的文件系统是ext4,但是事物的发展是有一个过程的。开始的ext1主要的限制是可以管理的空间为2GB。到ext2时可以管理GB和TB级别的磁盘,而且结构有了本质的变化,目前来说还是比较优秀的。但是有个致命的缺点,就是机器断电后容易发生比较严重的数据损坏,同时长时间使用会使文件存放在磁盘的多个地方,性能下降。所以在ext3文件系统中引入日志系统,将数据和元数据写入磁盘前先写入日志,这样保证文件和整个文件系统的一致性,但性能也降低了
,ext3使用32位内部寻址,如果块的大小为4K,则ext3在最大规格16TiB 文件系统中可以处理最大的文件为2TiB。而ext4的内部寻址为48,在管理的容量有很大的提升,同时还支持在线碎片整理,和分配内存的方式等有很大的改进。
具体可以阅读此文章

我们可以注意到ext2和ext4算是两个比较典型的版本,但主要是在ext2进行改进的,我们可以从ext2开始进行分析

1.2 ext2 图

在这里插入图片描述
磁盘上是以扇区为基本单位,一个扇区的大小在512B,但是计算机一般不会一次只读一个扇区,而是连续多个扇区,即一次读取一个块,而块是文件存储最小单位,一般为4KB。文件存储在块中,但是存储文件的同时还要存储文件的“元信息”。元信息就包括文件的创建者,文件的创建日期和文件的大小等。而存储文件元信息存放在inode中,同时也称为索引节点。而像块的大小信息存放在超级块中

Unix 操作系统中任何资源都被当做为一种文件,从这个方面说,Unix系统中的所有目录、硬件设备和普通文件一样,具有共同的属性,而这些属性都是保存在inode中。当系统创建一个文件或者添加一个设备时,系统就为其分配了一个inode节点

我们可以通过stat命令来查看此文件的inode信息

XXXX@XX:~/workspace/test$ stat target 
  File: target
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d      Inode: 9962075     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/xiaoxiong)   Gid: ( 1000/xiaoxiong)
Access: 2020-07-29 07:45:19.289522130 +0800
Modify: 2020-07-29 07:45:19.289522130 +0800
Change: 2020-07-29 07:45:56.914325002 +0800
 Birth: -

但inode不包含文件名,在Linux中目录也是一种文件,打开目录实机就是打开目录文件,目录文件的结构非常简单,就是一些列目录项。每个目录项由两个部分组成:包含文件的文件名,以及该文件名对应的inode号码。

1.3 ext2组块

inode记录档案的权限和相关属性,至于block区块则是记录档案的实际内容。而档案系统一开始就将inode与block规划好了。如果我们的档案系统高达数百GB时,那么将所有的inode与block通通放置在一起是不明智的,因为inode与block的数量太庞大了了,不容易管理。因此ext2档案系统在格式化时基本上是区分为多个组块的

1.4 ext2 数据块

ext2档案系统所支持的block大小有1K,2K和4K三种,由于block大小不同,导致档案系统能够支持的最大磁盘容量与最大单一档案容量并不相同。因为block大小产生的Ext2档案系统限制如下

Block大小1KB2KB4KB
最大单一档案限制16GB256GB2TB
最大档案系统总容量2TB8TB16TB

1.4 ext2 inode

文件系统初始化时inode大小固定了,为比如为128B,记录一个block号码要花费4B,而且一个档案只有一个inode,那最终是怎样实现的勒。其最终的文件系统采用的是直接索引,一级索引和二级索引等。我们可以通过如下图来表述
三级索引

1.5 ext2 区块对应表

我们存储一个文件时,首先就会查询区块对应表,通过此表可以得知那些block为空闲,进而为文件分配block
同理inode bitmap也一样

1.6 ext2 Superblock

超级块主要时记录该文件系统的基本信息

  • block与inode的总量
  • 未使用与已使用的inode/block数量
  • block与inode的大小(block为1,2,4K ,inode为128byte或者256byte)
  • filesystem的挂载时间、最近一次写入资料的时间、最近一次检测磁盘的时间等档案系统的相关信息
  • 一个valid bit数值,若此档案系统已被挂载,则valid bit为0,若未被挂载,则valid bit为1.

最后我们可以通过 dumpe2fs /dev/vda5 来查看该文件系统相对全面的信息

2 ext4 图

在这里插入图片描述
我们可以大致的发现ext4和ext2区别不是很大。由此我们接下来主要探讨ext4相对与ext2或者说是ext3的一些优势

2.1 日志系统

在ext2或者说FAT32文件系统在将数据写入文件系统时发生短剑,则可能会将其留在所谓不一致的状态-------事情只完成了一般而另一半未完成。可能导致大量文件丢失或损坏。而ext3使用日志来解决此问题,日志时磁盘上一种特殊的分区,如果改事物完成磁盘写入,则日志数据奖提交给文件系统本身。如果系统在该操作提交前崩溃,则重启系统识别为完成的事物将其回滚,就像未发生一样。这意味着正在处理的文件可能存在丢失,但文件系统本身保持一直,且其他所有数据都是安全的
这里列出几种级别的日志记录方式

  • 日记 是最低风险模式,在将数据和元数据提交给文件系统之前将其写入日志。这可以保证正在写入的文件与整个文件系统的一致性,但其显著降低了性能
  • 顺序 是大多数 Linux 发行版默认模式;顺序模式将元数据写入日志而直接将数据提交到文件系统。顾名思义,这里的操作顺序是固定的:首先,元数据提交到日志;其次,数据写入文件系统,然后才将日志中关联的元数据更新到文件系统。这确保了在发生崩溃时,那些与未完整写入相关联的元数据仍在日志中,且文件系统可以在回滚日志时清理那些不完整的写入事务。在顺序模式下,系统崩溃可能导致在崩溃期间文件的错误被主动写入,但文件系统它本身 —— 以及未被主动写入的文件 —— 确保是安全的。
  • 回写 是第三种模式 —— 也是最不安全的日志模式。在回写模式下,像顺序模式一样,元数据会被记录到日志,但数据不会。与顺序模式不同,元数据和数据都可以以任何有利于获得最佳性能的顺序写入。这可以显著提高性能,但安全性低很多。尽管回写模式仍然保证文件系统本身的安全性,但在崩溃或崩溃之前写入的文件很容易丢失或损坏。

2.2 分配方式

  • 多块分配
    ext3 为每一个新分配的块调用一次块分配器。当多个写入同时打开分配器时,很容易导致严重的碎片。然而,ext4 使用延迟分配,这允许它合并写入并更好地决定如何为尚未提交的写入分配块。

  • 延迟分配
    这是一个耐人寻味而有争议性的功能。延迟分配允许 ext4 等待分配将写入数据的实际块,直到它准备好将数据提交到磁盘。(相比之下,即使数据仍然在往写入缓存中写入,ext3 也会立即分配块。)
    当缓存中的数据累积时,延迟分配块允许文件系统对如何分配块做出更好的选择,降低碎片(写入,以及稍后的读)并显著提升性能。然而不幸的是,它 增加 了还没有专门调用 fsync() 方法(当程序员想确保数据完全刷新到磁盘时)的程序的数据丢失的可能性

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值