Linux虚拟文件系统VFS

VFS是linux实现的虚拟文件系统,规定了数据结构和接口规范。

Linux的存储栈

图片来源

文件系统层

VFS内部通过超级块、索引节点、逻辑块和超级块等管理文件。

超级块:文件系统整体情况,索引节点和逻辑块的使用情况。

逻辑块:磁盘扇区构成的最小存储单元。

索引节点:文件的元数据,索引到具体的文件数据。

目录项:记录文件名,以及文件和目录、目录和目录之间的关系。

需要注意的是目录项只存在于内存中,超级块、逻辑块和索引节点是磁盘中的持久化数据,目录项的内容是从磁盘中读取加载的。

通用块层

在文件系统和磁盘驱动之间还有一个块设备抽象层,该层向上提供了统一的块设备标准接口,向下兼容各种类型的磁盘,同时负责对文件系统和应用程序发送过来的I/O请求排队,用重排、合并等方式,提高磁盘读写效率,也就是I/O调度。

Linux支持四种I/O调度策略:

NONE:不调度。

NOOP:先入先出,只做基本的请求合并,常用于SSD。

CFQ:默认策略,公平调度,每个进程维护一个I/O调度队列,按照时间片均匀分布每个进程的I/O请求。

DealLine:读、写两个I/O队列,距离截止时间最近的请求被优先处理,可以提高机械磁盘的吞吐量,通常用在压力较重的场景,例如数据库。

设备层

驱动程序和物理设备,负责物理设备上最终的I/O操作。

参考