Linux 文件系统比较:ext4、XFS 与 Btrfs 的区别及选择

选择 ext4、XFS 或 Btrfs,应先比较发行版支持、所需功能、调整大小与恢复流程,而不是只看哪一个更新。需要熟悉的管理方式及离线缩容时可考虑 ext4;大容量、并发输入输出的服务器可把 XFS 纳入候选;需要原生快照、压缩与数据校验和时可评估 Btrfs。这些只是起点,性能与运维适用性仍须在实际环境中验证。

本文比较 Linux 个人电脑与通用服务器的本地磁盘文件系统。文件系统规定如何存放、查找文件内容以及名称、位置和权限等信息。若尚不清楚磁盘、分区和挂载的关系,可先看磁盘、分区与文件系统的区别。

ext4、XFS 与 Btrfs 功能对照

元数据是文件位置、大小和权限等管理信息。日志机制记录变更,帮助异常关机后恢复文件系统一致性,但不代替备份,也不保证每个文件的最后内容都保留。写时复制(Copy-on-Write,CoW)把修改写入新空间,再更新引用。

比较项目 ext4 XFS Btrfs
基本结构 日志式 元数据日志式 CoW
原生快照 无 无 支持子卷快照
文件数据校验和 默认不提供 默认不提供 默认提供;NOCOW 文件等存在例外
原生压缩 无 无 支持,取决于设置和数据特性
扩容 满足支持条件时可在线扩容 挂载状态下进行 可在挂载状态下进行
缩容 卸载后进行 不能假定普遍适用于生产环境;需单独核对有限技术预览 可在线缩容;需检查空间与各设备约束
主要工具 e2fsprogs 的 e2fsck、resize2fs xfsprogs 的 xfs_repair、xfs_growfs btrfs-progs 的 btrfs 命令
主要考虑 熟悉的工具、较直接的管理与离线缩容 大容量、并发 I/O 与发行版服务器支持 快照、压缩、完整性检查及配套维护

表中的“无”指文件系统自身的功能。ext4 与 XFS 仍可使用逻辑卷管理器(Logical Volume Manager,LVM)、存储设备或虚拟化平台的快照。XFS reflink 等共享数据块的文件复制,也不同于整个文件系统的时间点快照。数据校验和这一行针对普通文件内容,不表示 ext4、XFS 没有元数据保护。

ext4:熟悉的管理与离线缩容

ext4 是 Fourth Extended Filesystem,延续 ext2、ext3 系列。Debian 13 官方安装指南说明,多数情况下默认选择 ext4。没有特殊功能需求时,可把它与发行版安装和恢复工具一起考虑;默认采用并不证明始终比其他格式更快或更安全。

ext4 常用的 data=ordered 模式记录元数据日志,并约束相关数据写入顺序,不把全部文件内容再完整写入一份日志。因此,断电后可以挂载文件系统,与应用最后一次写入仍然存在,是两件事。模式细节见Linux 内核 ext4 管理文档。

运维上的一个明显区别是缩容。resize2fs 可在支持条件下扩展已挂载的 ext4,缩小则需要卸载。缩小根文件系统通常需要其他启动环境和停机时间。该工具不修改分区大小,文件系统与下层存储需分别管理,具体条件见resize2fs 手册。

例如以后要在同一磁盘的系统区和数据区之间重新分配空间,应在安装前考虑缩容支持与停机成本。若关键需求是更新失败后的快照回退,选择 ext4 本身并不能解决,还需要设计 LVM 或其他备份、快照层。

XFS:评估大容量与并发 I/O 服务器

XFS 通过分配组管理存储,可作为大文件和多任务并发输入输出的候选。Red Hat Enterprise Linux(RHEL)10 使用 XFS 作为默认本地文件系统。如果组织的发行版、存储工具和恢复流程已经围绕 XFS 建立,这种运维支持也是选择依据。支持范围可查RHEL 10 文件系统管理指南。

xfs_growfs 在文件系统已挂载时扩容。下层设备必须先提供额外空间;只扩大磁盘或逻辑卷,不意味着文件系统自动同步变大。应明确这次改变的是磁盘、分区、逻辑卷还是文件系统。

不要把 XFS 缩容描述为绝对不可能,也不要当成普遍可用的生产流程。RHEL 10.0 技术预览说明列出有限缩容:新大小位于最后一个分配组内,且待移除区域没有分配的数据或元数据。这与任意缩到指定大小不同;xfs_growfs 手册也列出分配组限制。不要把特定版本的技术预览当成其他内核、工具或发行版的正式支持。

缩容重要时,先核对目标发行版的生产支持,或计划备份后恢复到新的较小文件系统。文件服务器与大型数据文件服务器可以考虑 XFS,但不能只凭文件大小下结论,还要测试小文件创建删除频率、并发数量、同步写入及延迟。

Btrfs:结合快照、压缩与校验和

Btrfs 基于 CoW,提供子卷、快照、透明压缩,以及数据和元数据校验和。校验和是由内容计算的验证值,用来判断读回的数据是否改变。Btrfs 官方功能介绍列出了这些能力。Fedora 的 Btrfs 说明指出桌面版本与 Spins 默认采用它;这并不代表所有服务器或磁盘布局都获得同样支持。

子卷是文件系统内可独立管理的目录树。快照最初与来源共享数据块,之后随修改增加空间占用。它可保存更新前的状态,但仅选择 Btrfs 不会自动配置快照任务、保留期限或启动恢复菜单,仍须检查发行版工具及子卷布局。

同盘快照不能代替独立备份。来源与快照依赖同一设备及共享块,设备故障或共享块损坏可能同时影响二者。嵌套子卷不会递归包含在父子卷快照内。持续写入的数据库等应用还需要自身备份或协调停写,才能获得一致状态。范围与限制见Btrfs 子卷和快照文档。

发现错误与修复错误必须区分。btrfs scrub 检查校验和等信息,恢复损坏内容则需要对应块的正常冗余副本。单盘、数据只有一份的布局,即使发现损坏也可能没有正确副本可恢复。NOCOW 文件的数据校验和是例外;其元数据保护不应与文件内容校验混为一谈。具体条件见Btrfs scrub 官方文档。

压缩是否减少容量和 I/O 取决于数据,已经压缩的视频、归档可能收益很小。频繁覆盖的虚拟机镜像或数据库,需要一起考虑 CoW、碎片与快照保留。不能为追求速度统一启用 NOCOW,因为还会影响数据校验和及压缩;Btrfs 挂载选项参考说明了相互关系。

组合多个磁盘时,还需分别核对 RAID(独立磁盘冗余阵列)配置。官方介绍将 RAID5/6 描述为实验性、尚不适合生产使用,不能把它们与其他配置等同。结合实际内核、工具版本和Btrfs 功能状态表判断;某功能标为稳定,也不意味着对所有负载都合适。

按使用环境选择

以下把功能差异连接到实际需求,是判断起点,不是统一排名或适用于所有系统的配置推荐。

场景 优先评估 决定前确认
普通或开发电脑 发行版支持的默认格式 安装、加密、更新与恢复工具是否集成;无需仅因陌生而更换默认 Btrfs。
将来可能缩容 ext4 能否卸载并停机,下层分区或逻辑卷能否安全调整。
大容量并发服务器 把 XFS 纳入候选 发行版支持、真实负载表现、扩容计划,以及迁到小卷的恢复步骤。
快照与完整性检查 Btrfs 快照创建、清理和恢复方式,剩余空间监测及其他设备上的备份。
数据库或虚拟机存储 产品与发行版支持的布局 同步写入、延迟、CoW 设置、一致备份及真实负载测试。

若主要目标是更新失败后恢复操作系统,还要查清恢复工具回退哪些子卷。保留最新用户数据,还是让系统与数据回到同一时刻,需要不同设计。只持续扩展数据区的服务器,则可能更看重发行版支持和扩容、备份流程,而非缩容。

性能比较需要匹配哪些条件

单靠文件系统名称无法预测速度。同一 SSD 上,大量小文件创建、顺序读取大文件和数据库同步写入,结果可能不同;短时间复制还可能主要反映内存缓存。

  • 存储设备:使用相同 SSD 或 HDD、连接方式、占用量和剩余空间条件。
  • 工作负载:匹配文件大小、数量、读写比例、顺序或随机访问及并发数。
  • 功能设置:记录压缩、CoW、快照、加密和挂载选项,不能把不同功能状态当成同一条件。
  • 持久性:匹配应用同步写入和设备缓存策略,削弱数据保留保证不能简单算成性能提升。
  • 版本与指标:记录内核及管理工具版本,既看吞吐量,也看延迟与重复测试的波动。

例如比较日志存储服务器,应测试追加写入、轮转、压缩和备份重叠,而不只是复制一个大文件。把压缩节省空间与增加 CPU 开销一起衡量;差异很小时,也要考虑迁移现有格式的成本与风险。这里没有提供自行实测的性能排名。

检查当前格式并规划迁移

只读查询当前系统

普通 Linux 环境中的以下命令查询设备、挂载和容量,不新建或转换格式。lsblk、findmnt 来自 util-linux;GNU/Linux 上的 df 通常由 coreutils 提供。

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
findmnt -T / -o TARGET,SOURCE,FSTYPE,OPTIONS
df -hT /

lsblk 显示设备层级与 FSTYPE;findmnt 显示包含根路径的文件系统类型及实际挂载选项;df -hT / 显示该文件系统类型和容量。把 / 换成真实数据目录即可检查该路径。

例如 FSTYPE 显示 xfs,表示该路径位于 XFS。磁盘行本身的 FSTYPE 为空时,分区或逻辑卷行仍可能有格式。容器中可能看到 overlay,不能直接当作宿主磁盘格式。旧 lsblk 不支持 MOUNTPOINTS 时可查询 MOUNTPOINT。选项含义见lsblk 手册与findmnt 手册。

Btrfs 空间与预期不同时,可用 btrfs filesystem usage 一起检查数据、元数据及设备分配。快照仍引用数据时,删除文件不一定立即释放对应空间。不要只按目录容量之和推断,需结合Btrfs 空间与调整大小文档。

迁往另一种文件系统的顺序

对现有文件系统直接运行另一种格式的 mkfs,不是保留数据的转换。一般迁移应围绕新目标与可验证恢复来规划。

  1. 确认原始设备、格式、挂载点及应用支持条件,备份到独立存储并实际验证可以恢复。
  2. 在新磁盘或另行准备的区域创建目标文件系统;格式化前再次核实它确实是计划中的空目标。
  3. 通过停机或应用自身备份取得一致数据,保留所需所有权、权限、访问控制列表(ACL)、扩展属性和硬链接。只复制内容的工具不一定保留这些信息。
  4. 在新路径验证文件与应用,再以新的文件系统标识 UUID 更新 /etc/fstab 和服务配置。迁移系统根目录还需要覆盖引导程序与启动早期环境的专门流程。
  5. 重启后检查挂载、服务与权限。确认切换前保留来源和备份;出错时停止新目标的写入,按计划返回已验证的原始数据及设置。切换后新增的数据也必须纳入回退方案。

同一种格式调整大小时,层级顺序同样重要:扩容通常先增加下层存储,再扩展文件系统;受支持的缩容则先缩文件系统,再缩下层。Btrfs 调整大小也不会自动修改分区表。这只是原则,不是可直接执行的完整操作,存在加密、LVM、RAID 时需遵循各层支持的流程。

排错要使用对应格式的工具,ext4 的 e2fsck、XFS 的 xfs_repair 与 Btrfs 检查恢复工具不能互换。尤其不要把 btrfs check --repair 当作常规第一步;官方文档要求在开发者或有经验用户指导下才考虑。参考fsck 与不同文件系统检查的注意事项及Btrfs 检查器警告,先准备备份与恢复方案。