Ext4 nojournal模式下的数据损坏风险应对方案

本文介绍了在 Alibaba Cloud Linux 3/4 系统,使用 nojournal 模式创建的 EXT4 文件系统可能出现概率性数据损坏的风险规避方案。

重要

Alibaba Cloud Linux 全系列版本,默认均使用 journal 模式创建 EXT4 文件系统,因此除非客户显式在格式化时禁用日志(mkfs.ext4 -O ^has_journal),否则不受本问题的影响。

问题背景

在基于Linux 5.10版本的 Alibaba Cloud Linux 3 系统及基于Linux 6.6版本的Alibaba Cloud Linux 4中,当 EXT4 文件系统以 nojournal 模式(mkfs.ext4 -O ^has_journal)格式化,并满足以下条件时,存在发生概率性数据损坏的风险:

  1. 文件频繁创建与删除(即磁盘空间频繁分配、回收与重新分配);

  2. 系统存在频繁的内存回收操作;

  3. EXT4 采用 nojournal 模式(在格式化时显式禁用日志功能)。

问题原因

在 nojournal 模式下,如果磁盘上的元数据块已经释放但尚未持久化写盘,且该磁盘块恰好又被分配给新文件,此时触发数据脏页回写时,可能出现 I/O 竞争,导致非预期的持久化结果,最终引发数据损坏。

该问题由社区 Linux 5.1(2019 年发布)版本引入,在 2025 年 9 月 11 日经过根因分析后由阿里云报告到社区并与原作者确认。该问题在社区主线内核中同样存在,目前社区修复方案正在讨论中。

应对方案

与多数 EXT4 的小众功能一样,nojournal 模式在通用存储场景中缺乏广泛部署,且缺少可靠性测试。 在需要保障数据完整性的生产环境中,不建议使用 EXT4 的 nojournal 模式。

如果已经使用 nojournal 模式创建 EXT4 文件系统,建议重新格式化 EXT4 文件系统并使用默认参数开启 journal,非默认参数需慎重评估稳定性风险。

受影响发行版

目前该问题影响所有 Linux 5.1 内核版本及以上的发行版,主要列举如下:

  • Alibaba Cloud Linux 3(Linux 5.10 内核)

  • Alibaba Cloud Linux 4(Linux 6.6 内核)

  • Ubuntu 20.04 LTS(Linux 5.4 内核)

  • Ubuntu 22.04 LTS(Linux 5.15 内核)

  • Ubuntu 24.04 LTS(Linux 6.8 内核)