当前位置:首页 > 文章列表 > 文章 > linux > Linux du 怎样排除挂载点统计目录空间

Linux du 怎样排除挂载点统计目录空间

来源:17golang原创 2026-10-27 00:32:25 0浏览 收藏

我在排查目录空间时最容易踩的坑,不是 du 不会用,而是统计口径被挂载目录悄悄改变了:从父目录开始递归时,结果可能把另一个文件系统里的内容也算进来。要按文件系统边界停止遍历,直接使用 du -x,长选项写法是 du --one-file-system。

官方地址:https://www.gnu.org/software/coreutils/du

常用起点是 du -xh --max-depth=1 /srv:-x 只遍历与 /srv 相同文件系统的目录,-h 让大小易读,--max-depth=1 让结果停在第一层。若只要总计,再换成 du -xsh /srv。

先明确 du 的统计边界

du 的默认任务是递归汇总文件或目录的设备使用量。这里的“排除挂载点”要先说清楚:-x 判断的是文件系统边界,等价于“不要进入不同文件系统的目录”,并不是按目录名字寻找所有 mountpoint。若一个挂载位置和起始目录仍落在同一个文件系统上,不能仅凭“它是挂载点”就保证 -x 会把它排除。

Linux du 起始目录、同一文件系统和挂载文件系统之间的静态边界说明图
图1:说明图。/srv 下的 data 被标成另一文件系统时,du -x 只保留同一文件系统范围;这不是终端截图或运行结果。

因此,先把需要保护的统计资产定义为“起始目录所在文件系统的空间”,再把跨文件系统内容视为会污染口径的路径。这样排查出来的数字才适合和同一主机上的文件系统容量、配额或历史记录比较。

用 du -x 限制文件系统范围

最小命令如下:

# 只统计 /srv 所在文件系统,不进入其他文件系统的目录
du -x /srv

# 长选项写法与 -x 等价,适合写进运维说明
du --one-file-system /srv

GNU du 手册把 -x 定义为 --one-file-system,作用是跳过位于不同文件系统上的目录。命令返回的每一行仍然是目录空间统计,不会额外告诉你“哪些挂载点被跳过”;如果要留下可复查记录,应该把起始路径和完整参数一起保存。

人工查看时通常需要可读单位和一层汇总:

# 在 /srv 第一层查看同一文件系统内的目录空间
du -xh --max-depth=1 /srv

# 只保留 /srv 的总计,避免子目录列表干扰判断
du -xsh /srv

-h 只改变显示单位,--max-depth=1 只限制输出深度,二者都不会替代 -x。我一般先看第一条,确认哪个一级目录占用明显,再用第二条记录一个不会被子目录列表分散注意力的总数。

叠加深度、总计与排除模式

当目标是“同一文件系统内,找出第一层的大户”,可以组合边界和深度:

# -x 负责文件系统边界,-d 负责显示层级,-h 负责单位
du -xhd 1 /var

# 需要所有参数写全时,避免读者把数字误认为目录名
du --one-file-system --human-readable --max-depth=1 /var

如果目标只是排除名字匹配的文件或子目录,使用 --exclude,不要把它误写成 -x:

# 只排除名称匹配 cache 的条目;这是名称模式,不是挂载边界
du -xh --exclude='cache' --max-depth=1 /var

# 排除所有以 .tmp 结尾的文件或目录
du -xh --exclude='*.tmp' /var

--exclude 使用 shell 模式而不是正则表达式,模式边界要按路径树实际名称来设计。它和 -x 可以同时使用,但两者的风险控制点不同:前者改变名称集合,后者改变可遍历的文件系统范围。

du 的文件系统边界、名称排除、显示深度和总计选项关系图
图2:结构图。-x、--exclude、-d 和 -s 解决的是不同统计口径;连线表示适用关系,不表示执行时序。

识别 -x 的边界与替代需求

下面几种需求看起来都像“少统计一点”,实际控制对象并不一样:

真实目标选项控制对象注意点
不跨到别的文件系统-x文件系统边界不是按挂载点名称排除
忽略某些名称--exclude=PATTERNshell 名称模式不是正则表达式
只看固定层级-d N显示深度不改变递归边界
只输出总计-s输出粒度不等于只统计同一文件系统

尤其要注意 -d 的误导性:它只决定打印多少层,不代表更深层目录没有被考虑。想限制“能不能进入另一个文件系统”,仍然要显式写 -x。

建立一次可复查的统计清单

为了避免不同人用不同口径复查,我会把下面四项和命令一起记录:

  1. 起始路径:例如 /srv,不要只记录“数据目录”。
  2. 边界参数:是否使用 -x 或 --one-file-system。
  3. 输出范围:是否使用 --max-depth、-s 和 -h。
  4. 排除规则:若有 --exclude,保存完整的 shell 模式。

如果结果需要用于容量告警或迁移前估算,还要单独说明它统计的是设备使用量还是表观大小。GNU du 默认汇总设备使用量;--apparent-size 是另一种口径,不能和“排除不同文件系统”混为一个开关。

常见问题

为什么 du -x 仍然看到了挂载目录名?

-x 约束的是遍历和统计的文件系统范围,不承诺从输出中删除父目录名。若挂载目录本身仍出现在列表里,重点看它是否被计入了另一个文件系统里的内容,而不是只看名称是否出现。

du -x 和 du --exclude 哪个更适合排除挂载点?

若问题是跨文件系统污染,优先使用 -x。--exclude 只按名称模式匹配,目录改名或路径层级变化就可能改变结果,不能替代文件系统边界控制。

--max-depth=1 能不能达到 du -x 的效果?

不能。--max-depth 限制显示层级,-x 限制不同文件系统的遍历边界;一个控制输出粒度,一个控制统计范围。

什么时候需要 du -s?

只需要给出一个目录总数,或要把结果交给脚本继续处理时,可以使用 du -xsh /path。如果还需要定位哪个一级目录占用空间,先用 --max-depth=1 保留分项。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
journalctl 怎样输出 JSON 格式日志journalctl 怎样输出 JSON 格式日志
上一篇
journalctl 怎样输出 JSON 格式日志
Linux xargs 怎样安全处理带空格的文件名
下一篇
Linux xargs 怎样安全处理带空格的文件名
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    720次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    728次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    804次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    765次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    602次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码