Linux文件系统

1、文件系统体系结构

文件系统体系结构图
这里写图片描述

●用户空间包含应用程序和C库,为文件系统调用(文件打开、读写、关闭、)提供接口
●系统调用接口将用户空间的数据传递给内核空间
●虚拟文件系统作为文件系统接口的根层,抽象了文件系统的四个基本概念,包括文件、目录项 、索引节点 、及挂载点,保存了系统支持的文件系统以及已经挂载的文件系统
●inode cache缓存最近使用过的i节点
●Directory cache(dentry)缓存最近使用过的目录对象,包括文件名以及i节点号
●缓冲区缓存会缓存文件系统和相关块设备之间的读写请求,避免将所有请求发送到物理设备,从而提高效率

2、虚拟文件系统VFS
概念
虚拟文件系统(VFS)是 Linux 内核中的一个软件层,抽象了文件系统的四个基本概念,包括超级块对象、索引节点对象、目录项对象、文件对象。
●超级块对象存储着文件系统的信息。
●索引节点对象存储着文件的相关信息。
●目录项对象包含一个路径的各个组成部分,不管是目录还是 普通的文件,都是一个目录项对象,比如/home/test/hello.cpp中/ 、home、test、hello.cpp都是目录项对象。
●文件对象是已打开的文件在内存中的表示,主要用于建立进程和磁盘上的文件的对应关系。因为多个进程可以同时打开和操作 同一个文件,所以同一个文件也可能存在多个对应的文件对象。一个文件对应的文件对象可能不是惟一的,但是其对应的索引节点和 目录项对象无疑是惟一的。

作用
●给用户空间的程序提供文件系统接口
●使得多个文件系统可以共存
●使用一套IO系统调用接口即可对任意文件系统的文件实现操作
●支持跨文件系统的操作,比如使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext2 文件系统格式的硬盘

VFS在内核中和其他模块的关系
这里写图片描述

3、文件系统

3.1、基本概念
文件系统是对一个存储设备上的数据和元数据进行组织的机制,最终目的就是将大量数据有组织性地存入到持久性的的存储设备上。每种存储设备上都有对应的文件系统,向系统添加新的磁盘,必须将磁盘上的分区进行格式化,即创建文件系统,然后将分区挂载到根文件系统的目录树结构上,磁盘才可以被使用。通常情况下,一个分区只能被格式化一个文件系统,但是也可以将一个分区格式化多个文件系统(使用LVM),或将多个分区合成一个文件系统(使用LVM、RAID)

3.2、基本构成
文件系统被分成多个Block Group,每个Group包括superblock、innode、directory block、data block、Filesystem Description 、block bitmap、inode bitmap 。可以使用dumpe2fs命令查看文件系统的具体信息,比如 dumpe2fs /dev/sda1
这里写图片描述
●超级块(superblock)
存储一个已安装的文件系统的控制信息,代表一个已经被挂载的文件系统,存放与文件系统有关的数据,包括:block 与 inode 的总量、未使用与已使用的 inode / block 数量、block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128Bytes 或 256Bytes)、filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息、一个 valid bit 数值标识文件系统是否被挂载

●索引节点(innode)
存放文件的元数据,包括:文件类型、文件大小、所有者、所属组、用户访问权限、时间戳等,同时还含有指向数据块的指针 ,i节点是文件的唯一标识

●目录块(directory block):当前目录的上一级目录的i节点号,含有当前目录的i节点号、当前目录下的文件的i节点号以及目录的i节点号。目录最少占用一个block,目录大小最小为1个block,比如1K、4K,当目录中含有的文件个数非常多时,目录大小会不止一个block。目录块用于维护目录和文件之间的关系。

●数据块(data block):存储文件的内容且只能存储一个文件的内容,每个 block 都有唯一编号,格式化文件系统时 block 的大小就被固定,常见大小有 1K, 2K 及 4K 。因为i节点的数量有限,block 大小会影响文件系统能够支持的最大磁盘容量与最大单一文件大小。比如对于EXT2文件系统,block为1K时,单个文件最大为2GB,磁盘最大为2TB,block为4K时,单个文件最大为2TB,磁盘最大为16TB。当block过小时,可能会导致占用大量的i节点,文件读写性能下降;当block过大时,单个文件的大小小于一个block却占用一个block导致导致空间浪费

●文件系统描述(Filesystem Description)
描述每个 Block Group 的开始与结束的 block 号码,以及说明superblock, bitmap, inodemap, data block的block区间

●区块对照表(block bitmap )
用于记录可用的block号和不可用block号

●inode 对照表(inode bitmap)
用于记录可用的i节点号和不可用i节点号
3.3、读写文件过程
●读文件过程
执行cat /test/test.sh命令的过程
系统首先根据挂载点的信息找到/目录的i节点,根据/目录的i节点的信息发现用户具有r和x的权限,读取/目录的block,找到test/目录的i节点,根据test/目录的i节点的信息发现用户具有r和x的权限,读取test/目录的block,找到test.sh的i节点,根据test.sh的i节点的信息发现用户具有r和x的权限,获得block的号码,从而读取block中的数据
●写文件过程
首先确定用户是否对被写目录具有w和x的权限,若有,则可以写文件
其次根据inode bitmap 找到可以使用的 inode 号,并写入文件的相关信息
然后根据 block bitmap 找到可以使用中的 block 号码,并写入实际的数据,且更新 inode 的 block 指向数据
最后更新 inode bitmap 、 block bitmap、 superblock

3.4、文件系统种类
Linux支持的文件系统非常多,比如
传统文件系统:EXT2 / minix / MS-DOS / FAT / iso9660
日志式文件系统: EXT3 /EXT4 /JFS / XFS / ZFS
网络文件系统: NFS / SMBFS

常使用EXT2、EXT3、EXT4、XFS(CentOS7.X中默认的文件系统)。EXT2使用e2fsck搜寻整个文件系统,解决数据不一致的问题,十分耗时,EXT3、EXT4通过将数据修改操作写入日志中,快速解决了数据不一致的问题。但是EXT系列文件系统在格式化时就完成了inode与block的分配,以后系统可以直接使用,对于大容量的磁盘格式化速度很慢

XFS
XFS是一个日志式文件系统,inode与block并不是在格式化时就完成分配,而是动态分配的,所以格式化速度很快。XFS包括数据区(data section)、登录区(log section)、实时运行区(realtime section)。可以使用xfs_info查看文件系统的信息
●数据区包含多个存储区群组(allocation groups),相当于EXT文件系统的Block Group。每个存储区包含superblock,并且实现了inode与block的分配与管理,。node与block在需要时才会分配,所以格式化速度很快
●登录区用于记录文件的变化,可以修复数据
●实时运行区用于创建文件。当有文件被创建时,文件会被存储到运行区的extent区块,创建完毕后,再将数据写入到数据区的inode与data block中

3.5、磁盘与文件系统图
磁盘与文件系统

参考
7.1 认识 Linux 文件系统
基本的文件系统体系结构
Linux文件系统的实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值