首页/系统/Linux 内核与性能调优速查/filefrag 文件碎片查看

filefrag 文件碎片查看

filefrag -v 列出文件 extent 数量与分布;extent 数量异常多说明碎片化,可能拖慢顺序读。

filefrag 是什么

filefrag 属于 e2fsprogs 工具集,用来看文件在磁盘上的 extent 分布:被切成多少段连续区间、每段的起始偏移与长度。extent 数量相对文件规模明显偏多就说明碎片化。碎片是否真的影响性能取决于介质,机械盘上顺序读会因此变慢,SSD 上影响小得多。

基本信息

适用平台Linux(e2fsprogs),主要面向 ext4 等支持 extent 的文件系统
基本用法filefrag <文件>;-v 输出每个 extent 的偏移与长度
关键指标报告的 extent 段数与文件规模之比
文件系统差异XFS 由内核自行管理 extent,该工具读数参考价值有限
整理手段e4defrag 可整理 ext4 碎片,执行期间有持续 IO

典型使用场景

  • 顺序读性能异常时,确认大文件是否碎片化严重
  • 对比同一应用不同时间生成的数据文件,观察碎片随时间增长的趋势
  • 验证预分配是否生效:做过 fallocate 的文件 extent 段数应明显更少
  • 判断整理是否有价值:碎片比例高且设备为机械盘时才值得动手
  • 排查备份耗时变长,检查被备份文件本身的碎片情况

常用命令

常用命令
filefrag /data/bigfile                # 快速输出 extent 段数
filefrag -v /data/bigfile | head -15  # 列出每个 extent 的偏移与长度
fallocate -l 10G /data/prealloc.img   # 预分配,减少后续写入产生的碎片
sudo e4defrag /data/bigfile           # ext4 下整理单个文件,低峰执行

输出判读

输出项含义判读
Filesystem type文件系统类型ext4 的 extent 语义参考价值最高
extents found碎片段数量相对文件规模越大说明越碎
physical_offset物理块偏移相邻 extent 连续度越高越好
length该 extent 覆盖的块数各段之和应接近文件总长度
flagsextent 标记last、unwritten 表示尾部或未写入区
碎片化对 SSD 的影响远小于机械盘:SSD 本身随机读取很快,整理收益有限还会增加写入量、消耗寿命,应先确认设备类型再决定是否整理。
判断碎片是否严重不能只数段数:一个百 GB 级文件被切成几十段仍属正常,而很小的文件被切成上千段才值得关注,要结合文件规模一起看比例。

易错点

  • 不看设备类型就做碎片整理,在 SSD 上白白增加写入量并拉高延迟
  • 在业务高峰执行 e4defrag,整理过程持续产生 IO,会拖慢在线请求
  • 把 extent 数量当成唯一指标,忽略文件系统类型与预分配策略带来的口径差异
  • 对正在写入的文件做整理,可能与写入争抢、反而让性能进一步下降

数据来源与参考

  • e2fsprogs 文档 filefrag(8)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌