filefrag是唯一能显示文件物理块分布的工具;运行sudo filefrag /path/to/file查看extents数量及logical/physical列,extents越小越好,physical跳跃大说明磁盘离散;stat和du无法反映块是否相邻,且不同文件系统下filefrag输出含义差异大。

直接用 filefrag,别试 stat 或 ls -l —— 它们压根不告诉你块在磁盘上怎么排的。
filefrag 怎么看单个文件的物理块分布
filefrag 是唯一能直接显示文件被分成了几段(extents)以及每段起始物理块号的工具。运行 sudo filefrag /path/to/file 后,重点盯两行:
-
extents:后面的数字越小越好;1表示完全连续,≥5且文件 >100MB 就该警惕 -
logical和physical列:列出每个 extent 的逻辑偏移与实际物理块号;如果physical值跳跃过大(比如从123456突然跳到9876543),说明磁盘空间已高度离散
注意:filefrag 不需要卸载文件系统,但对正在被写入的文件(如数据库日志、转码中视频)结果可能瞬时失准;查之前先跑 lsof +D /path 确认无活跃写入进程。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
为什么 stat -c "%b %B" 和 du 都不能替代 filefrag
stat 只返回 Blocks 字段(已分配块总数),du 只算总占用空间,二者都不反映这些块是否相邻:
-
stat -c "%b %B" filename给你的是“用了多少块 × 块大小”,不是“这些块在哪” -
du --apparent-size甚至会绕过块对齐,返回纯逻辑字节数,跟物理布局完全无关 - 稀疏文件、hole、reflink、快照等机制会让
stat和du的值严重偏离真实块布局
不同文件系统下 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)不适用,也看不到 LVM 层下的实际映射。










