我通常使用mount检查已挂载的文件系统。我也知道mount/etc/mtab之间有些联系,但我不确定细节。在阅读了如何检查/ proc /是否挂载后,我感到更加困惑。

我的问题是:如何获取最精确的已挂载文件系统列表?我应该只使用mount还是阅读/etc/mtab的内容或/proc/mounts的内容?什么会带来最值得信赖的结果?

评论

您还应该阅读该问题的可接受答案:unix.stackexchange.com/questions/12040/…

我忍不住链接到Linux中的/ etc / mtab?因为它涵盖了此处未给出答案的非Linux详细信息。

#1 楼

已安装文件系统的确定列表在/proc/mounts中。

如果系统上有任何形式的容器,则/proc/mounts仅列出当前容器中的文件系统。例如,在chroot中,/proc/mounts仅列出安装点在chroot内的文件系统。 (请注意,有多种方法可以逃脱chroot。)

/etc/mtab中还列出了已挂载的文件系统。该列表由mountumount命令维护。这意味着,如果您不使用这些命令(这​​种情况很少见),则不会记录您的操作(装载或卸载)。实际上,通常会在chroot中找到与系统状态完全不同的/etc/mtab文件。另外,在chroot中执行的挂载将反映在chroot的/etc/mtab中,而不反映在主/etc/mtab中。 /etc/mtab在只读文件系统上时执行的操作也未记录在其中。到mount命令行,有时可以以更易于理解的方式显示信息;例如,您看到请求的挂载选项(而/etc/mtab列出了/proc/mounts和内核默认值),并且绑定挂载在/proc/mounts中显示为这样。

评论


如果不能依赖它,那么挂载维护/ etc / mtab有什么意义?如果从/ proc / mounts挂载显示的信息不是更好吗?

–彼得·多布罗格斯特(Piotr Dobrogost)
2015年2月12日在10:31



@PiotrDobrogost / etc / mtab可以记录内核不跟踪的信息(例如最初请求的选项),并像这样显示绑定装载,而不是显示为设备的重复条目。但是,许多发行版都在使/ etc / mtab成为/ proc / mounts的符号链接。

–吉尔斯'所以-不再是邪恶的'
15年2月12日在10:41

但是,许多发行版都在使/ etc / mtab成为/ proc / mounts的符号链接。很高兴听到-添加此信息来回答会更好。您认为由内核跟踪请求的选项是否可行且有益?

–彼得·多布罗格斯特(Piotr Dobrogost)
15年2月12日在11:13

请注意,您需要取消转义/ proc / mounts的内容。如getmntent(3)页中所述,空格(\ 040),制表符(\ 011),换行符(\ 012)和反斜杠(\ 134)都需要特别处理。特别是如果启用了用户挂载,则使用这些路径时需要非常小心。

–埃里克
2015年8月31日15:50



另请参见使用命令findmnt的其他答案,这是自2010年以来的首选方法,并且可能是不久的将来挂载名称空间普及的唯一安全方法。

– Marki555
16年5月18日在19:46

#2 楼

从2.18版开始(2010年7月),util-linux包含一个工具,可让您显示当前已安装的文件系统列表:使用-l查看列表视图,使用-o定义输出列(类似于lsblk),使用-t根据文件系统类型过滤结果等...

findmnt


findmnt -lo source,target,fstype,label,options,used -t ext4


有关更多详细信息,请阅读man页面(和findmnt --help获取可用列的列表)

评论


该答案提供了最全面的列表,包括/ sys / fs / bpf,/ sys / fs / cgroup,/ sys / firmware / efi / efivars等最晦涩的挂载。有很多事情要经过,但grep是您的朋友。

– AveryFreeman
20年1月31日在15:44

非常感谢你。当您只希望在单个列表中了解目标时,这可以解决问题,这样,我可以在脚本中使用它,只需将目标名称的一部分添加到脚本中即可调用正确的设备。

–Geppettvs D'Constanzo
20 May 23'0:38

#3 楼

可能是因为距回答此问题已有5年了,所以情况发生了变化。 cat /proc/mounts会创建许多您不关心的信息。今天,恕我直言,我认为这是最终的解决方案。什么。例如,要进一步清理结果,可以使用以下命令排除“ tmpfs”的文件类型:



上面的命令还将包括网络安装。

要了解更多信息,请使用: br />注意如果网络连接速度较慢,这可能要花几分钟! />
df -h --output=source,target


评论


您不必是root用户,但是某些字段/列(例如Label)将具有空数据,这可能仍然可以,因为问题想知道挂载了哪些文件系统。

–里克
16-2-18在23:55

Ubuntu的。但是,我刚刚发现了不使用root的“ findmnt”,它列出了网络安装的文件系统。我当时正在考虑编辑我的答案以包括该知识。

–里克
16 Feb 19'0:03

:-)我累了要给你的答案投票,但是直到我的代表15+

–里克
16年2月19日在0:07

顺便说一句,如果您尝试将--output与不接受这些选项的Ubuntu 12之类的东西一起使用,请在下面查看don_crissti的findmnt答案。

–马特·沙弗(Mat Schaffer)
16年6月8日在2:36

findmnt似乎需要更高的功能(已通过root测试; root具有所有功能)才能显示标签。

–ctrl-alt-delor
16年6月27日在16:11

#4 楼

大多数时候,mount是最方便的方法。有关当前已挂载文件系统的完整且准确的列表,您应该阅读/proc/mounts的内容(例如,使用cat /proc/mounts)。 ,//etc/mtab命令从中读取以告诉您已安装的内容,并在可能的情况下(更改时更改了写入内容)写入该内容)不会更新以反映当前mount(包含/)已以只读方式安装。在这种情况下,运行/etc/mtab通常会(错误地)告诉您mount已以可读写方式安装。当前挂载的文件系统。这不要与/混淆,/etc/mtab包含应该在系统启动时自动挂载的文件系统列表。

当然,如果/etc/fstab虚拟文件系统本身未挂载,则您无法读取其中的任何虚拟文件,其中包括/proc。这种情况很少发生。在这种情况下,/proc/mounts可能是查看已安装内容的最佳选择。