Linux 怎样用 findmnt 查看挂载来源和选项
Linux 上排查“这个路径到底挂在哪个文件系统上”时,findmnt 比直接阅读一长串 /proc/self/mountinfo 更适合人工查看。最实用的顺序是:先看挂载树,再用 --target 锁定路径,最后用 --output 明确列出来源、类型和选项。
本文只讨论挂载树和选项输出。示例命令都是只读查询,代码块用于说明如何组织查询,不把示例输出冒充成本机执行结果。
官方地址:https://www.kernel.org/pub/linux/utils/util-linux/
先建立基线:默认树形输出看什么
直接运行 findmnt,默认从当前进程可见的内核挂载信息中列出文件系统,并尽量以树形关系展示父挂载点与子挂载点。这里的“树”回答的是层级关系;它不是目录大小排行,也不是磁盘使用率报表。
# 先看当前挂载树,适合人工建立全局基线。 findmnt # 使用 ASCII 线条,适合复制到纯文本工单或日志。 findmnt --ascii # 只看真实文件系统,减少伪文件系统对观察的干扰。 findmnt --real
阅读时先找四类信息:TARGET 是挂载点,SOURCE 是来源,FSTYPE 是文件系统类型,OPTIONS 是当前输出中的选项集合。树形缩进表示挂载条目之间的父子关系,不能单独用来推断目录容量或应用是否能访问。
这一步相当于性能排查里的“基线”:先确认观察对象和层级,再决定是否需要针对某个路径缩小范围。默认布局可能随版本或列宽调整,因此基线适合人读,不适合直接作为脚本接口。
用 --target 找到一个路径的挂载来源
如果问题是“/data/logs/app.log 属于哪个挂载”,不要先用字符串搜索整棵树。使用 --target 让 findmnt 按路径解析当前挂载关系,输出最多一个对应条目。
# 查询目标路径所在的文件系统;路径可以是文件或目录。 findmnt --target /data/logs/app.log # 只指定严格的挂载点,不让命令继续检查父级路径元素。 findmnt --mountpoint /data # 明确要求只输出目标列,便于人工快速核对来源和类型。 findmnt --target /data/logs/app.log \ --output TARGET,SOURCE,FSTYPE,OPTIONS
--target 允许传入文件或目录;如果给的路径本身不是挂载点,命令会沿路径元素寻找所属挂载点。若你要检查的就是一个严格的挂载点,可以改用 --mountpoint,这样不会把父级路径当作候选。

要注意覆盖挂载:同一个目录可能先后被不同文件系统挂载。--target 关注当前可见的目标条目,默认会跳过同一挂载点上的被覆盖条目。若排查的是“为什么看不到旧挂载”,应把它当成挂载层级问题,而不是简单的路径不存在。
用明确列区分来源、类型和选项
仅仅看到一列很长的默认输出,容易把文件系统类型、通用 VFS 标志和文件系统自身选项混在一起。建议在需要判断选项时显式指定列。
# 只打印路径、来源、类型和合并后的选项视图。 findmnt --target /data --output TARGET,SOURCE,FSTYPE,OPTIONS # 将通用 VFS 标志与文件系统相关选项拆开观察。 findmnt --target /data \ --output TARGET,SOURCE,FSTYPE,VFS-OPTIONS,FS-OPTIONS # 不截断列内容,避免长来源或长选项被省略。 findmnt --target /data --output TARGET,SOURCE,FSTYPE,OPTIONS \ --notruncate
OPTIONS 适合快速阅读整体选项;VFS-OPTIONS 用于观察与具体文件系统无关的通用内核标志;FS-OPTIONS 用于观察文件系统相关选项。不同发行版和 util-linux 版本的可用列可能有差异,先用 findmnt --list-columns 查看本机支持的列名。

如果只想筛选某类文件系统,可以配合 --types;如果只想看指定来源,可以用 --source。这些过滤器改变的是观察范围,不会修改挂载本身。
# 只查看 ext4 条目,逗号分隔多个类型。 findmnt --types ext4 # 按来源查找;设备名、标签或 UUID 都应以目标机器实际值为准。 findmnt --source /dev/sdb1 # 显式列出支持的列名,避免凭记忆拼写列字段。 findmnt --list-columns
分清 --kernel、--mtab 和 --fstab
findmnt 可以查看不同信息源。排查“当前到底挂了什么”时,优先看内核挂载表;排查“用户空间记录记了什么”或“配置计划挂什么”时,再切换到对应来源。
| 模式 | 主要回答 | 使用场景 |
|---|---|---|
--kernel | 当前内核看到的挂载信息 | 确认目标路径当前落在哪个挂载条目 |
--mtab | /etc/mtab 中的用户空间记录 | 比较记录与当前挂载视图是否一致 |
--fstab | /etc/fstab 中的配置意图 | 查看开机或手工挂载配置,而非证明已经挂载 |
# 默认使用内核挂载信息,明确写出模式便于复盘。 findmnt --kernel --target /data # 查看 fstab 中与目标路径相关的配置记录。 findmnt --fstab --target /data # 查看 mtab 记录;它可能包含用户空间挂载信息。 findmnt --mtab --target /data
三种输出不能互相替代。/etc/fstab 是配置文件,里面写了某个目标并不代表当前已经挂载;/etc/mtab 是用户空间记录,也可能与内核当前状态产生差异。对实时排查,先使用内核视图,再把配置视图作为解释“应该怎样挂”的补充。
让脚本使用稳定输出,不依赖默认布局
如果结果要进入巡检脚本、工单或监控采集,不要解析默认树形文本。上游手册明确建议在脚本中显式指定期望列;需要机器读取时可以选择 JSON。
# 以固定列输出,避免默认列集合变化影响解析。 findmnt --kernel --output TARGET,SOURCE,FSTYPE,OPTIONS --list # 使用 JSON 输出,适合交给后续程序处理。 findmnt --kernel --json --output TARGET,SOURCE,FSTYPE,OPTIONS # 原始格式会转义可能影响解析的特殊字符。 findmnt --kernel --raw --output TARGET,SOURCE,FSTYPE,OPTIONS
--list 使用表格列表形式,不强调父子树;它更适合固定列的人工或程序读取。--json 适合后续程序消费,但脚本仍应处理字段缺失、空结果和发行版版本差异。不要把某个版本的默认树形列宽当成长期 API。
一个稳妥的判断顺序是:先检查命令退出状态,再判断是否有条目,最后按字段读取。没有匹配结果时,可能是路径不在当前挂载命名空间、过滤条件过窄、目标已卸载,或路径本身不存在;不要把空结果直接解释成“磁盘坏了”。
空结果、伪文件系统与权限边界
查看挂载关系是观察动作,不等于验证业务可用性。即使 findmnt 显示某个来源和选项,也不能由此证明远端服务可达、目录有写权限、应用没有阻塞,或所有历史挂载都仍然存在。
# 只看伪文件系统,帮助解释 /proc、/sys 等特殊挂载。 findmnt --pseudo # 只看内核视图中未被过滤的全部文件系统。 findmnt --all --kernel --output TARGET,SOURCE,FSTYPE,OPTIONS # 目标路径不存在时,先确认路径和命名空间,再解释空结果。 findmnt --target /data/logs/app.log
容器、chroot 或其他挂载命名空间中,同一路径可能对应不同挂载树。命令默认面向当前进程可见的视图;如果你在宿主机和容器内分别执行,不能把两份结果合并成一个“全局真相”。
另一个常见误区是把 --verify 当作“当前挂载是否健康”的万能检查。它主要用于检查挂载表内容,默认更偏向验证 /etc/fstab 的可解析性和可用性;它不能替代对业务读写、网络连通性或容量的专门检查。
三种常见误判怎么修正
| 误判 | 更准确的做法 |
|---|---|
| 看到 fstab 记录就认为已挂载 | 用 --kernel --target 查询当前内核视图 |
| 默认树形输出适合脚本解析 | 用 --output 固定列,并按需加 --json 或 --raw |
| 显示 ro 就能证明应用一定无法写入 | 把挂载选项作为线索,再结合权限、路径和应用行为检查 |
| 查不到旧条目就是挂载丢失 | 先排查覆盖挂载、当前命名空间和目标路径是否变化 |
如果文章开头的问题是“挂载来源和选项是什么”,最短答案可以收敛为:
# 先锁定目标路径,再固定输出需要的字段。 findmnt --kernel --target /data \ --output TARGET,SOURCE,FSTYPE,VFS-OPTIONS,FS-OPTIONS \ --notruncate
这条命令只负责把当前可见的挂载关系整理出来,不会修改挂载,也不会替你判断业务是否健康。看清信息源、目标路径和字段含义,才是 findmnt 在 Linux 排障中的价值。
findmnt 和 mount 的列表输出有什么区别?
mount 的列表模式主要是兼容性功能;对于更稳健、可定制的挂载信息查看,上游文档建议使用 findmnt。尤其是脚本场景,应使用明确输出列。
为什么 --target 查到的来源和 fstab 不一样?
因为两者回答的问题不同:--target 默认看当前内核挂载视图,--fstab 看配置文件中的计划。挂载可能尚未执行、已经被覆盖,或实际来源通过标签解析成了另一个设备。
OPTIONS、VFS-OPTIONS 和 FS-OPTIONS 应该看哪一个?
快速阅读看 OPTIONS;需要区分通用内核标志和文件系统自身设置时,分别读取 VFS-OPTIONS 与 FS-OPTIONS。脚本先用 --list-columns 确认本机列支持情况。
Linux ARP 邻居状态异常怎样读取和刷新
- 上一篇
- Linux ARP 邻居状态异常怎样读取和刷新
- 下一篇
- Linux 怎样为单个进程查看资源限制
-
- 文章 · linux | 1小时前 |
- Linux 怎样读取 cgroup v2 内存压力事件
- 144浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · 安全 · Linux systemd capability CapabilityBoundingSet
- Linux 服务怎样按 capability 缩小权限
- 121浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux pidfd 怎样减少 PID 重用误杀风险
- 272浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 lsblk JSON 输出设备层级
- 467浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样为单个进程查看资源限制
- 228浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux ARP 邻居状态异常怎样读取和刷新
- 442浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 ss 区分监听与已连接套接字
- 279浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · systemd EnvironmentFile Linux服务环境变量
- Linux 服务怎样安全加载环境文件
- 434浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · Linux journalctl 日志过滤 systemd日志 启动轮次 BOOT_ID
- Linux 怎样按启动轮次筛选 systemd 日志
- 465浏览 收藏
-
- 文章 · linux | 1小时前 | 服务管理 · Linux systemd systemd.socket ListenStream Accept socket activation systemd.service
- Linux socket 激活怎样把监听职责交给 systemd
- 376浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 systemd-analyze 找启动瓶颈
- 123浏览 收藏
-
- 文章 · linux | 19小时前 |
- Linux /proc 读取进程内存指标的方法
- 194浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 511次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 571次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 597次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 549次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 365次使用
-
- 详解golang执行Linuxshell命令完整场景下的使用方法
- 2023-01-07 426浏览
-
- go程序部署到linux上运行的实现方法
- 2023-01-02 387浏览
-
- Linux系统下Go语言开发环境搭建
- 2023-01-07 242浏览
-
- 使用golang获取linux上文件的访问/创建/修改时间
- 2022-12-31 238浏览
-
- 在Linux系统中安装Go语言的详细教程
- 2022-12-29 402浏览
