filefrag查单个文件extents数,e4defrag -c查ext4挂载点加权分(0–100,≥56需整理),xfs_db -c "frag" -r查XFS fragmentation factor百分比(≥45%建议整理),均需人工解读关键字段且不可跨文件系统混用。

直接用 filefrag 查单个文件,用 e4defrag -c 或 xfs_db -c "frag" -r 查挂载点整体——没有“一键生成报告”的命令,所有结果都要人工解读关键字段。
filefrag 输出怎么看连续性
filefrag 是唯一能告诉你一个文件物理上被切成几段(extents)的工具,但输出信息密集,容易看错重点:
- 盯住
extents:后面的数字:1 表示完全连续;≥5 且文件 >100MB 就该警惕 -
logical和physical列不是一一对应行号,而是每段的起始偏移与起始物理块号;如果physical值跳跃极大(比如从 2048 跳到 983040),说明磁盘空间已离散 - 对正在写入的文件(如数据库日志、ffmpeg 正在转码的视频),结果可能失准;查前务必运行
lsof +D /path/to/file确认无进程占用 - 稀疏文件、reflink 克隆、加密卷(如 dm-crypt)会让
filefrag的extents值虚高,不能直接等同于真实碎片
e4defrag -c 的分数怎么读(ext4 专用)
e4defrag -c 不是百分比,而是一个加权综合分(0–100),含义明确但常被误读:
- 0–30:基本连续,不用干预
- 31–55:轻度碎片,整理收益小;优先清空间(
journalctl --vacuum-size=500M、apt clean) - ≥56:明显碎片化,尤其当目录含大量大文件(如
/var/lib/docker/aufs、/home/user/Videos)时,整理可能改善顺序读性能 - 注意:它只统计当前挂载点下“可访问”文件,不包含
lsof | grep deleted找到的已删未释放句柄
xfs_db -c "frag" -r 输出怎么用(XFS 专用)
XFS 没有类似 e4defrag 的分数体系,xfs_db -c "frag" -r /dev/sdXN 返回的是 fragmentation factor 百分比:
- 输出里找
fragmentation factor XX.XX%这一行,例如fragmentation factor 91.14% - ≥45% 是官方建议整理的阈值;低于这个值,整理几乎没收益
- 末尾若带
Note, this number is largely meaningless是 xfs_db 默认提示,不影响该数值的实际参考价值 - 必须加
-r参数(只读模式),否则报错;且路径必须是设备节点(如/dev/sdb1),不是挂载点
为什么别信 stat / du / fibmap / pvs --segments
这些命令看起来都跟“块”有关,但全都不反映物理连续性:
-
stat -c "%b %B"只返回已分配块总数和块大小,不告诉你这些块是否相邻 -
du --apparent-size绕过块对齐,返回纯逻辑字节数,和物理布局无关 -
fibmap只输出逻辑块号(从 0 开始的索引),不提供物理扇区地址;且仅 ext2/3/4 支持,XFS/Btrfs 直接报Operation not supported -
pvs --segments显示的是 LVM 逻辑段(PE)占用关系,PE 编号连续 ≠ 物理磁盘地址连续;对 SSD/NVMe 几乎无意义,对 HDD 也由文件系统而非 LVM 控制
真正容易被忽略的是:文件系统类型决定工具选择,跳过 df -T /path 直接跑 e4defrag 或 xfs_db,大概率报错或返回无效值。连续性评估不是比谁输出的数字大,而是看哪个字段在什么上下文里有意义。


















