Linux性能优化实战 23:文件系统

本文深入探讨了Linux文件系统的内部工作原理,包括索引节点、目录项的作用与区别,虚拟文件系统VFS的设计理念,以及不同类型的文件系统I/O操作。同时,还介绍了如何检查磁盘和索引节点的容量,帮助理解文件系统管理和优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、知识点(只背这)

1.  文件系统,是对文件进行组织管理的机制。它抽象了一层虚拟文件系统(VFS),对所有文件系统(Ext4、XFS等)做了 数据结构和接口 的统一抽象。 进程可以使用统一的接口进行交互。

2.  在 Linux 中一切皆文件。不仅普通的文件和目录,就连套接字、管道,也是通过统一的文件系统来管理。

3. Linux 为每个文件分配两个数据结构,索引节点 (记录文件的元数据)和 目录项 (记录文件的目录信息)。

4. 索引节点缓存在磁盘缓存Buffer中,存储在硬盘的索引节点区。

    目录项缓存在页缓存Cache中,纯粹是缓存。

5. 磁盘在执行文件系统格式化时,会被分成三个存储区域,超级块、索引节点区和数据块区。

    数据块区保存文件数据,索引节点区保存文件索引节点。

6. 如果小文件过多的话,会出现数据块区有剩余空间,但索引节点区剩余空间不足的问题。需要压缩或删除小文件。

7. 文件系统通过使用 目录项和索引节点的缓存数据,来降低 慢速磁盘读写 对应用程序的影响。

二、索引节点和目录项

Linux 文件系统为每个文件都分配两个数据结构,索引节点目录项

1. 索引节点:简称为 inode,用来记录文件的元数据,比如 inode 编号、文件大小、访问权限、修改日期、数据的位置等。

                      索引节点同样占用磁盘空间。

2. 目录项:记录文件的名字、索引节点指针以及与其他目录项的关联关系。

                   多个关联的目录项,就构成了文件系统的目录结构。

                   由内核维护的一个内存数据结构,也被叫做目录项缓存。

3. 每个文件只有一个索引节点,但可以有多个目录项。(例如硬链接)

4. 索引节点是存储在磁盘中的数据,目录项是一个内存缓存,加速文件的访问。

5. 磁盘在执行格式化时,会被分成三个存储区域,超级块索引节点区数据块区

6. 图示:

三、虚拟文件系统

1. 为了支持各种不同的文件系统,Linux 内核在用户进程和文件系统的中间,引入了一个抽象层,也就是虚拟文件系统 VFS

2. 示意图:

四、文件系统 I/O

1.  VFS 提供了标准的文件访问接口,提供给应用程序使用。

     就cat命令来说,它依次调用了open(),read(),write() 三个接口。 (write把文件内容输出到标准输出中)

2. 文件读写方式 分四类:

(1) 缓冲与非缓冲 I/O:

     标准库内部实现的缓存。程序遇到换行时才真正输出,而换行前的内容被标准库缓存了起来。

(2) 直接与非直接 I/O:

     直接 I/O:跳过操作系统的页缓存,直接跟文件系统交互来访问文件。

     非直接 I/O:先经过系统的页缓存,然后再由内核或额外的系统调用,真正写入磁盘。

(3) 阻塞与非阻塞 I/O:

     阻塞 I/O:应用程序执行 I/O 操作后,如果没有获得响应,就会阻塞当前进程。

     非阻塞 I/O:不会阻塞。随后再通过轮询或者事件通知的形式,获取调用的结果。

     注意:描述的主体是应用程序

(4) 同步与异步 I/O:

     同步 I/O:应用程序执行 I/O 操作后,要一直等到整个 I/O 完成后,才能获得 I/O 响应。(系统给它响应)

     异步 I/O,应用程序执行 I/O 操作后,不用等待整个 I/O 完成,可以继续执行下面的程序。等到这次 I/O 完成后,响应会用事                      件通知的方式,告诉应用程序。(系统给它响应)

     注意:描述的主体是系统

五、磁盘容量和索引节点容量

1. 查看磁盘容量  df -h

2. 查看索引节点容量  df -i

3. 当发现索引节点空间不足,但磁盘空间充足时,很可能就是过多小文件导致的。

    删除这些小文件,或者移动到索引节点充足的其他磁盘中,就可以解决这个问题。

原文地址:极客时间-轻松学习,高效学习-极客邦

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值