不同操作系统中比较常见的文件系统:
一般 Kafka 推荐用 XFS Kafka 为什么快
其他中间件或者业务,可以去检索最佳的方案,优化到这一步
| 特性 | ext4 (Fourth Extended Filesystem) | XFS | Btrfs (B-tree Filesystem) |
|---|---|---|---|
| 设计理念 | 稳定、兼容。传统的日志型文件系统,是 ext3 的进化版。 | 高性能、大数据。为大规模并行 I/O 设计,源自 SGI IRIX。 | 现代、多功能。基于写时复制 (CoW),旨在替代传统 FS,功能类似 ZFS。 |
| 稳定性 | (极其成熟) | (企业级成熟) | (成熟,但部分高级 RAID 模式仍需谨慎) |
| 最大文件大小 | 16 TiB | 8 EiB | 16 EiB |
| 最大卷大小 | 1 EiB | 8 EiB | 16 EiB |
| 快照支持 | 原生不支持 (需借助 LVM 等外部工具) | 原生不支持 (需借助 LVM) | 原生完美支持 (原子级快照,速度极快) |
| 扩容与缩容 | 支持在线扩容和离线缩容。 | 仅支持在线扩容,不支持缩容。 | 支持在线扩容和缩容。 |
| 数据校验 | 仅元数据校验 (Metadata)。 | 仅元数据校验 (Metadata)。 | 数据和元数据全校验 (Checksum),可自动修复数据损坏。 |
| RAID 支持 | 无 (依赖硬件 RAID 或 mdadm)。 | 无 (依赖硬件 RAID 或 mdadm)。 | 原生支持 (RAID 0, 1, 10 稳定; RAID 5/6 仍在改进中)。 |
| 典型应用场景 | 个人电脑、引导分区 (/boot)、通用服务器、移动设备。 | 大型服务器、数据库、大数据存储、RHEL/CentOS 默认系统。 | NAS (如 Synology)、容器宿主、需要版本回滚的桌面 (Fedora 默认)。 |

上图是 Linux 内核的架构,左边 Virtual file system 区域,也就是虚拟文件系统简称 VFS。它的作用是为了帮助 Linux 去适配不同的文件系统而设计的,VFS 提供了通用的文件系统接口,不同的文件系统实现需要去适配这些接口。
日常使用 Linux 的时候,所有的系统调用请求都会先到达 VFS,然后才会由 VFS 向下请求实际使用的文件系统。文件系统的设计者需要遵守 VFS 的接口协议来设计文件系统。接口是共享的,但是文件系统具体实现是不同的,每个文件系统都可以有自己的实现方式。不同的存储介质有着各自组织存储数据形式。

上图是一次写操作的请求流程,在 Linux 里写文件,其实就是一次 write() 系统调用。当你调用 write() 操作请求的时候,它会先到达 VFS,再由 VFS 去调用文件系统,最后再由文件系统去把实际的数据写到本地的存储介质。

上图是一个目录树的结构,**在文件系统里面,所有数据的组织形式都是这样一棵树的结构,从最上面的根节点往下,有不同的目录和不同的文件。**这颗树的深度是不确定的,相当于目录的深度是不确定的,是由每个用户来决定的,树的叶子节点就是每一个文件。

最右边的 inode 就是每个文件系统内部的数据结构。这个 inode 有可能是一个目录,也有可能是一个普通的文件。Inode 里面会包含关于文件的一些元信息,比如创建时间、创建者、属于哪个组以及权限信息、文件大小等。此外每个 inode 里面还会有一些指针或者索引指向实际物理存储介质上的数据块。
以上就是实际去访问一个单机文件系统时,可能会涉及到的一些数据结构和流程。作为一个引子,让大家对于文件系统有一个比较直观的认识。