EXT 文件系统
一、ext 系统的核心设计
1、数据存放区
- 数据存放区里面的元素比较稳定,磁盘格式化后就固定下来了
inode
- 记录文件的权限、属性和数据所在块block的号码,每个文件都有且仅有一个的inode,每个inode都有自己的编号,可以把inode简单地理解为文档索引
- 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始读取文件内容
通过
ll -i可以查看文件对应的 inode 号码
inode table
- 记录了文件系统所有inode 的编号
block
- 真正存储文件的地方,也叫数据区块(data block),每个block都有自己的编号,Ext2支持的单位block容量仅为1k、2k、4k
- 一个block只能存一个文件,一个文件太大的话可以分散到多个 block,block的容量过大容易造成空间浪费,过小会影响文件系统的性能
2、元数据(metadata)
- 这些元素是为了维持文件系统状态而设计出来的,当新增、编辑、删除文档时,都需要变更这些状态信息
superblock(超级块)
- 记录文件系统(filesystem)的整体信息,包括inode/block的总量、使用量、剩余量、大小、以及文件系统的格式和相关信息。
- 整个文件系统的基本信息全部记录在superblock,大小一般为1K,这个东西很重要的说
block bitmap(区块对照表)
- block bitmap 记录所有使用和未使用的block号码
inode bitmap(inode 对照表)
- 记录已使用和未使用的inode号码
block group(区块群组)
- 磁盘的容量特别大的时候,inode和block的数量也会非常庞大
- 为了便于管理,Ext文件系统在格式化时,引入了区块群组(block group)的概念,就是将一个完整的文件系统划分为很多个BG
- 每个区块群组都保持独立inode/block/superblock,拥有固定数量的block,这样就做到了化整为零
- 注意事项:文件系统的superblock只有一个,所以除了第一个block group含有superblock外,后续block group都可能会含有备份的superblock,目的就是为了避免superblock单点无法救援的问题
group descriptor
- 描述每个区段(block group)开始和结束的block号码,以及说明每个区段(inodemap、blockmap、inode table)分别介于哪些block号码之间
二、补充说明
查看文件系统信息的命令(读取superblock)
- 对EXT文件系统:
dumpe2fs /dev/sda1 - 对XFS文件系统:
xfs_growfs /dev/sda1或者xfs_info /dev/sda1
关于 inode 的扩容
- 一个文件对应一个 inode,一个inode只有128Byte或者256Byte
- 如果一个文件特别大,需要很多的block才能记录,那么一个inode就可能无法记录所有的block 的编号了
- 所以inode记录block号码的区域被设计为12个直接、一个间接、一个双间接、一个三间接记录区,这样就极大的对inode进行了扩容
- 所谓的间接记录就是用inode记录一个特殊的block,再用这个 block 来记录存放数据的block 的编号,通过这样的方式大大提升了文件系统中单个文件容量的上限

文件的读取
- 目录至少有一个对应的inode和block,inode 记录该目录的相关权限与属性和分配到的那块 block 号码, 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据
- 文件的读取从根目录开始,按照 inode->block->inode->block… 这样的形式一直往下读取,直到读到目标文件存数据的block,其中夹杂了一系列的权限的判断
文件系统大小与磁盘读取性能
- 一个分区太大的时候,有可能会导致一个文件存储数据的 block 过于分散,读取文件的效率就会比较低
- 文件数据离散最好的解决方法就是先把文件复制出来,将分区格式化后在复制回去
- 需要我们注意的是分区不是越大越好,根据实际的需要进行分区才是最合理的
EXT系统新建文件或者目录的过程
- 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
- 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
- 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且升级 inode 的 block 指向数据;
- 将刚刚写入的 inode 与 block 数据同步升级 inode bitmap 与 block bitmap,并升级 superblock 的内容。
数据的不一致状态
- 新建文件或者目录的时候万一遇到意外的情况,就可能出现数据已经写入 block,但是 metadata 的内容却没有更新的情况,此时就会发生 metadata 的内容与实际数据存放区产生不一致的情况了。
- 可以通过 e2fsck 来进行一致性检查,但是这种检查是全盘扫描,费时费力
日志式文件系统
- 就是在文件系统中专门划分一块出来记录文件的新增和修改的信息,一旦发生意外就可以通过日志来进行检查恢复,而不需要进行全盘的扫描了,效率就大大提高了,也解决了数据不一致的状态
- ext2是非日志的文件系统,ext3是带日志的,ext2转ext3无需重新格式化,只需要加一个日志记录区就可以了
硬盘加载到内存经过修改的数据会不定时自动同步到硬盘,从而保持硬盘和内存数据的一致性,用 sync 命令可以手动同步
XFS 文件系统
一、XFS 和 EXT 文件系统的比较
1、EXT
- 一句话总结EXT的特点就是:支持度最广、但格式化超慢
- EXT文件系统,在文件格式化时,采用的是规划出所有的inode、区块、元数据等数据,未来系统可以直接使用,不需要再进行动态配置,但是这个做法在早期磁盘容量还不大的时候可以使用,当使用磁盘容量在TB以上的时候,ext文件系统格式化会消耗相当多的时间
2、XFS
- XFS一种高性能的日志文件系统,几乎具备所有EXT4支持的功能,而且特别擅长处理超大文件,同时提供平滑的数据传输
二、XFS 系统的三个分区
一、数据区(data section)
概念
- xfs将这个区域分为多个存储区群组(allocation groups,AG)类似于ext文件系统的区块群组,每个AG都相当于一个独立的文件系统
- 存储区群组AG包含了超级区块、剩余空间的管理机制和inode的分配与追踪等信息
- inode与区块都是系统需要用到时才动态配置产生,因此格式化操作很快
关于block和inode的容量
- block:可在512B-64KB之间调整(在Linux环境下最高可以使用的区块大小为4k,超过这个值linux无法挂载)
- inode:容量可在256B-2MB之间,不过保留256B默认值就够用了
二、日志区(log section)
概念
- 这个区域主要用来记录文件系统的变化
- 文件的变化都会在这里被记录下来,直到该变化完整地写入到数据区后,该条记录才会被结束
- 如果文件系统因为某些缘故而损坏时,系统会拿这个登录区块来进行检测,看看系统挂掉之前,文件系统正在运行啥操作,借以快速地修复文件系统
注意
- 因为系统所有讲的操作都会在这个区块做记录,所以这个区块的磁盘活动相当的频繁
- 可以指定外部的磁盘来作为xfs文件系统的日志区块
- 现在固态硬盘都普及了,可以将SSD磁盘作为xfs的登录区,这样可以更快速地工作
三、实时运行区(realtime section)
概念
- 当文件要被建立时,xfs会在这个区段里面找到一到数个extent区块,将文件放置在这个区块内,等到分配完毕后,再写入到数据区的inode与区块中
- extent区块有点类似缓冲区的意思
extent区块
- extent区块的大小在格式化的时候就已经指定好了,最小值是4K,最大可达1G
- 这个extent最好不要乱动,因为会影响到磁盘性能
参考文章:http://www.360doc.com/content/18/0626/15/55348351_765546697.shtml
本文深入探讨了Linux的EXT和XFS文件系统。EXT文件系统的核心设计包括数据存放区(inode、inode table和block)及元数据(superblock、block bitmap、inode bitmap和block group)。EXT系统在文件创建、读取和一致性方面有其特点。相比之下,XFS文件系统以其高性能和对大文件的支持著称,它分为数据区、日志区和实时运行区,每个区有特定的功能和优势。
728

被折叠的 条评论
为什么被折叠?



