You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ext4下使用带FALLOC_FL_COLLAPSE_RANGE的fallocate裁剪文件开头是否原子?

ext4 中 FALLOC_FL_COLLAPSE_RANGE 操作崩溃后的状态说明

常规场景(ext4默认开启日志的挂载模式)

ext4 对带FALLOC_FL_COLLAPSE_RANGE标志的fallocate调用的所有元数据修改,都包裹在同一个完整的日志事务中提交,因此系统崩溃后只会出现两种稳定状态:

  • 操作完全未生效:文件大小、块映射关系和调用fallocate前完全一致,所有待裁剪范围的块都保留,无任何数据偏移
  • 操作完全生效:整个待裁剪范围的块全部被移除,裁剪范围之后的所有数据都偏移到文件起始位置,文件大小对应减少裁剪范围的长度,所有变更完整落地

这种场景下不存在仅部分待裁剪块被移除的中间状态。

特殊场景(手动关闭ext4日志的挂载模式)

如果你通过journal=off挂载参数关闭了ext4的日志功能,失去了事务原子性保障,崩溃后才可能出现部分裁剪的中间状态。
这种场景下如果出现部分块被移除的情况,被移除的块一定是从待裁剪范围的起始位置开始的连续块,不会出现待裁剪范围中间的块先被移除、首尾块保留的情况。这是由ext4处理该操作的执行逻辑决定的:内核会先从待裁剪范围的起始位置开始扫描并移除对应的extent块映射,再调整后续extent的逻辑偏移量,最后更新inode的文件大小。

内容的提问来源于stack exchange,提问作者greghvk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:54:03