一文简洁高效带你搞懂LINUX文件系统类型

233 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情

Linux文件系统和磁盘的I/O性能是运维人员每天都绕不开的内容。也是操作系统核心管理内容。

首先在 Linux中,包括文件、目录、块设备、套接字、管道等都是文件。Linux文件系统为每个文件分配两个数据结构,就是索引节点(index node)和目录项(directory entry)。索引节点用来记录文件的元数据,包括inode 编号、文件大小、访问权限、修改日期、数据的位置等,和文件是一一对应的关系,和文件同步保存到磁盘中,都会被持久化存储到磁盘,因此索引节点同样占用磁盘空间。

目录项,主要用来记录文件的名字、索引节点指针、与其他目录项关联关系。多个关联的目录项,就构成了文件系统的目录结构。目录项是内核维护的数据结构。索引节点是每个文件的唯一标志,目录项维护的是文件系统的树状结构。目录项和索引节点是多对一的关系,比如一个文件有多个别名。硬链接是文件创建的别名,对应不同的目录项,这些目录项实际链接同一个文件。需要明白的是,磁盘读写的最小单位是扇区,每个扇区是512Byte,问了提高读写效率,文件系统组合连续扇区成为逻辑块,每次读写以逻辑块为最小单位。下图是磁盘、目录项、索引节点之间关系图:

image.png

需要注意的是,目录项是内存缓存,磁盘执行对文件系统进行格式化时,会将磁盘分为三个存户区域:使用超级块存储整个文件系统状态,使用索引节点区存储索引节点,使用数据块区存储文件数据。LINUX文件系统的四个基本要素:目录项、索引节点、逻辑块、超级块。为支持不同格式的文件系统,LINUX内核在用户进程和文件系统中间加入了虚拟文件系统(VFS)。VFS的数据结构和接口是所有类型文件系统都支持的,用户进程只需通过VFS就可以和底层文件系统进行交互。常见的文件系统有基于磁盘类型的Ext4、XFS、OverlayFS,基于内存的虚拟文件系统,例如/proc、/sys等,网络文件系统,例如NFS、SMB、iSCSI,上述文件系统都需要挂载到VFS的子目录才能正常访问。