登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  linux

Linux ncdu怎样限制扫描在同一文件系统内

来源:17golang原创

时间:2026-10-13 21:15:30 164浏览 收藏

Linux 上用 ncdu 查看根目录时,最容易遇到的误判是把其他挂载点也算进来了。要把扫描限制在起点所在的文件系统,直接给 ncdu 加上 -x,长参数写法是 --one-file-system:

# 只统计与根目录属于同一文件系统的内容
sudo ncdu -x /

# 只扫描 /var 所在的文件系统,不跨入其他挂载点
ncdu --one-file-system /var

ncdu 官方手册对这个参数的定义是“不跨越文件系统边界”。它限制的是挂载边界,不是目录深度,也不是按文件名过滤。官方地址:https://dev.yorhel.nl/ncdu

要点速览
  • -x 与 --one-file-system 等价,边界由扫描起点所属文件系统决定。
  • --exclude 是排除匹配内容,两者解决的问题不同,可以组合使用。
  • 先用 findmnt -T 看挂载关系,再解释 ncdu 结果,避免把“没统计到”误认为数据不存在。

为什么普通 ncdu 会把其他挂载点带进来

ncdu 默认允许跨文件系统扫描。比如根目录下的 /home、/var/lib 或容器数据目录可能分别挂载了独立磁盘;从 / 开始扫描时,这些目录仍然在目录树里,但它们的设备号可能与根文件系统不同。于是结果看起来像“根分区占用很大”,实际是多个文件系统的总和。

使用 -x 后,ncdu 只计入与起点相同文件系统中的文件和目录。跨出去的目录仍可能显示在树中,但不会把其中内容计入统计。这个视觉上的“目录存在、大小却没有继续增加”并不矛盾。

Linux ncdu -x 从根目录扫描时区分同一文件系统与其他挂载点的边界说明图
图1:ncdu 文件系统边界说明图,展示 -x 的统计范围,不是终端截图。

用 -x 把扫描范围锁在起点文件系统

短参数适合日常排查,脚本或运维文档则建议写长参数,读者不必查缩写。两种写法效果相同:

# 短参数:适合快速检查根文件系统
sudo ncdu -x /

# 长参数:适合写进运行手册,语义更直观
sudo ncdu --one-file-system /

如果扫描起点改成 /var,边界也会随之改变:统计口径是“/var 所在的文件系统”,并不是永远固定为根文件系统。起点如果本身就是独立挂载点,-x 会让 ncdu 在这个挂载点内部工作。

参数或动作解决的问题不要混淆
-x不跨越文件系统边界不是目录深度限制
--exclude PATTERN排除匹配模式的内容不是挂载点判断
findmnt -T PATH查看路径对应的挂载关系不是 ncdu 统计命令

扫描前先确认挂载关系,结果才好解释

遇到“ncdu 少算了一块目录”的反馈,不要马上删除参数。先确认目录属于哪个挂载点:

# 用目标路径反查挂载点和文件系统类型
findmnt -T /var/lib/docker

# 再从该挂载点开始做单文件系统扫描
sudo ncdu --one-file-system /var/lib/docker

如果 findmnt 显示目标目录是单独挂载的,那么从 / 扫描时使用 -x 不纳入它是预期行为;需要查看它的占用,应把它作为新的扫描起点。相反,想得到整台主机各挂载点的总览,就应分别扫描每个文件系统,而不是简单去掉边界后把总数当作根分区使用量。

用 findmnt -T、ncdu -x 和挂载点关系复查 Linux 磁盘统计边界的说明图
图2:ncdu 边界复查关系图,帮助区分挂载、参数与统计结果,不是运行证据。

伪文件系统、排除规则与常见误区

/proc、/sys 等伪文件系统有自己的处理规则,不能把它们和普通数据盘等同。ncdu 目录项上的标记也可能提示读取错误、排除项或其他文件系统。排查时应该以挂载关系和参数为准,不要只凭树形缩进判断。

若还要跳过缓存目录,可以在文件系统边界之外再加排除模式:

# 先限制文件系统,再排除名称中包含 cache 的路径
sudo ncdu -x --exclude '*cache*' /

这里的 --exclude 会改变统计内容,但不会把目录从所有显示结果中彻底抹掉。它与 -x 叠加后,读者看到的是“同一文件系统内、且未被模式排除”的占用。

延伸问答

ncdu 的 -x 和 --cross-file-system 是什么关系

--cross-file-system 表示允许跨文件系统,是默认方向;它可用于覆盖配置中的 -x。需要边界清晰时,显式写出 -x 更稳妥。

从根目录加 -x 后为什么还能看到其他挂载目录

目录项可以显示,但其下内容不计入当前统计。要查看该挂载点的真实占用,应把挂载点单独作为扫描起点。

ncdu -x 能解决 df 和 du 数字不一致吗

它只能减少跨挂载点造成的口径混合,不能处理已删除但仍被进程打开的文件、权限不足或统计时刻不同等原因。这些问题要用对应的文件句柄和权限检查继续定位。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>