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 覆盖的块数 | 各段之和应接近文件总长度 |
| flags | extent 标记 | last、unwritten 表示尾部或未写入区 |
碎片化对 SSD 的影响远小于机械盘:SSD 本身随机读取很快,整理收益有限还会增加写入量、消耗寿命,应先确认设备类型再决定是否整理。
判断碎片是否严重不能只数段数:一个百 GB 级文件被切成几十段仍属正常,而很小的文件被切成上千段才值得关注,要结合文件规模一起看比例。