filefrag是唯一能直接显示文件物理碎片数量(extents)的工具,extents值越小越好(1为完全连续),≥5且文件>100MB需警惕;logical与physical列反映块跳跃跨度,但对活跃写入文件结果可能失准,查前须用lsof +D确认无进程占用。

直接用 filefrag 查,别用 stat 或 ls -l ——它们只给逻辑大小和块数,不告诉你物理位置是否连续。
filefrag 输出里怎么看碎片程度
filefrag 是唯一能直接告诉你一个文件在磁盘上被分成了几段(extents)的工具。运行 sudo filefrag /path/to/file 后,重点盯两行:
-
extents:后面的数字越小越好;1表示完全连续,≥5且文件 >100MB 就该警惕 -
logical和physical列:列出每一段的逻辑偏移与实际物理块号,如果physical跳跃过大(比如从123456突然跳到9876543),说明磁盘空间已高度离散
注意:filefrag 不需要卸载文件系统,但对正在被写入的文件(如数据库日志、转码中的视频)结果可能瞬时失准;查之前先跑 lsof +D /path 确认无活跃写入进程。
为什么不能用 stat 或 du 推断块分布
stat 只返回 Blocks 字段(已分配块总数),du 只算总占用空间,二者都不反映这些块是否相邻:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
stat -c "%b %B" filename给你的是“用了多少块 × 块大小”,不是“这些块在哪” -
du --apparent-size甚至会绕过块对齐,返回纯逻辑字节数,跟物理布局完全无关 - 稀疏文件、hole、reflink、快照等机制会让
stat和du的值严重偏离真实块布局
e4defrag -c 的分数和 filefrag 的 extents 是什么关系
e4defrag -c /mount/point 返回的 fragmentation score(0–100)是全目录统计加权值,而 filefrag 是单文件精确快照:
-
filefrag是诊断起点:发现某个大文件extents: 12,才值得怀疑整体碎片化 -
e4defrag -c是评估依据:分数 ≥56 才建议整理,但它的结果依赖当前挂载点下所有可访问文件,不包含lsof | grep deleted那类已删未释放的句柄 - 二者不互斥——先
filefrag定位坏文件,再e4defrag -c判断整分区是否值得动刀
filefrag 对不同文件系统的兼容性
filefrag 在 ext2/3/4 上最可靠;XFS 和 Btrfs 也能跑,但输出含义不同:
- ext 系列:
extents是真实物理连续段数 - XFS:
filefrag实际调用的是xfs_db底层接口,extents值偏高属正常,别直接对标 ext4 的阈值 - Btrfs:
filefrag显示的是逻辑 extent,受 CoW 和 reflink 影响极大,extents: 8不代表真碎片,可能是多个 reflink 共享同一物理块 - 务必先用
df -T /path确认类型,别拿 ext4 经验套 XFS 结果
真正容易被忽略的是:filefrag 对加密文件系统(如 dm-crypt)、FUSE 类(如 sshfs、rclone mount)基本无效——它看到的是上层设备映射后的逻辑块,不是底层物理分布。










