Linux文件系统概述

文件系统特性

inode: 记录文件系统的权限和属性
数据区块: 实际记录文件内容
超级区块: 记录文件系统的整体信息, 包括inode与数据区块的总量, 使用量, 剩余量, 以及文件系统格式等信息

inode和数据区块都有号码, 只要有一个文件的inode的号码, 读取inode的信息, 就能得到存储在inode中的数据区块的号码, 然后就可以索引相应数据区块得到实际文件数据了. 利用inode的文件系统称为索引式文件系统(indexed allocation).

索引式文件系统对比FAT文件系统, FAT文件系统是类似链表结构访问一个个数据块, 而inode可以直接提供要访问的所有数据块编号, 所以更直接.

ext2文件系统

ext2fs (Linux second Extended file system)
一种基于inode的文件系统, 也是linux的文件系统.
ext2优化了大量数据存储的方法, 在格式化时不是统统将所有inode和数据区块设定到一起, 而是分为多个区块群组, 每个区块群组都有独立的inode, 数据区块, 超级区块, 相当于一个子文件系统, 多个子文件系统组成整个大的文件系统. 所有区块在格式化时就确定, 基本不再变动.

数据区块的限制, 根据区块大小对单一文件有容量限制, 以及整个系统的总容量也受影响

Block大小 1KB 2KB 4KB
最大单一文件限制 16GB 256GB 2TB
最大文件系统总容量 2TB 8TB 16TB

ext2文件系统的缺陷

  • 格式化之后基本不能再修改
  • 每个区块只能放一个文件
  • 文件不能存满一个区块, 剩余的空间也不能继续使用

另外可能人会觉得, 这个限制16GB很大基本不会影响到使用, 但是如果跑模拟类型的程序, 这个限制可能还是要考虑的(
而且因为缺陷的第二条第三条, 可以直接体会一下空间浪费的效果, 如果很多小文件比如50B大小, 10000个文件, 存到4KB的区块文件系统下, 可能总量不到1MB的数据就会占用40MB的空间.

当然这些限制在ext4文件系统下被极大的扩展了, 所以估计现在如果用较新的linux系统也还是不需要考虑这种限制.

目录树

每个目录会分配一个inode和至少一个数据区块, 而linux文件系统访问一个目录, 是按目录树访问下来.

比如访问/etc/passwd目录, 会从根目录/开始, 从挂载点开始拿到 / 的inode信息, 然后依次访问 / 的inode, / 的数据区块, 从 / 的数据区块得到etc的inode, 访问etc的inode, 访问etc数据区块, 访问passwd的inode, 访问passwd的数据区块. 流程如下:

Linux文件系统概述

日志式文件系统(Journaling filesystem)

类似数据库中的日志, 专门划分磁盘一个区域用来记录文件修改情况, 当一个文件写入或修改完成时, 需要记录到日志里, 这样做是为了应对文件写入不一致的情况, 比如一个文件写入到一半突然断电, 没有来得及更新超级区块的信息, 这样下次启动时就找不到这个写入的文件, 如果引入日志式文件系统, 就可以查看文件写入的记录, 然后恢复一致性.

文件系统运行

linux系统通常会将文件数据放置到内存, 为了提高速度不进行写回磁盘的操作, 所以物理内存可能经常被占满, 如果是正常关机会将内存里的修改过数据全部写回磁盘, 但不正常关机对linux系统有很大影响, 下次启动时由于上次关机不正常内存中的数据没有写回磁盘, 需要花很多时间对磁盘进行校验, 甚至导致文件系统的损坏.

Linux VFS(Virtual Filesystem Switch)

Linux一般不会只有一个文件系统

cat /proc/filesystems

查看加载的文件系统
Linux文件系统概述
可以发现有很多文件系统, 而管理这些文件系统的核心机制就是VFS, VFS会自动处理好文件系统读取的任务, 所以对于用户而言不用操心文件系统的管理.

XFS文件系统

CentOS 7开始linux的默认文件系统从ext4变成了xfs. 由于ext系列文件系统格式化很慢, 在硬盘容量越来越大的时代, 已不再适用. XFS文件系统采用动态分配inode和数据区块的方式, 在格式化1PB, 1EB的分区时依然很快.

xfs文件系统构成

  • 数据区: 同ext系统, 有超级区块, inode, 数据区块. 不过inode和数据区块是动态分配产生.
  • 文件系统很活动登陆区: 类似日志区, 记录文件系统变化
  • 实时运行区: 先找数个extend区块, 放置要创建的文件, 之后再写入data section和inode区块中.
xfs_info 挂载点|设备名 # 查看超级区块内容 适用CentOS 7系统

总结

归纳了Linux的文件系统的基本知识, 接下来继续学习文件系统的操作.

上一篇:linux内核-虚拟文件系统


下一篇:鸟哥的Linux私房菜基础学习篇 第7章的重点探索