如何获得Linux中已挂载文件系统的完整而准确的列表?


150

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

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


3
:你也应该阅读的接受这个问题的答案unix.stackexchange.com/questions/12040/...
nozimica

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

Answers:


140

挂载的文件系统的完整列表在中/proc/mounts

如果系统上有任何形式的容器,则/proc/mounts仅列出当前容器中的文件系统。例如,在chroot中/proc/mounts仅列出挂载点在chroot内的文件系统。(记住,有很多方法可以逃避chroot。

中也有已挂载文件系统的列表/etc/mtab。该列表由mountumount命令维护。这意味着,如果您不使用这些命令(这​​种情况很少见),则不会记录您的操作(装载或卸载)。实际上,通常会在chroot中找到/etc/mtab与系统状态完全不同的文件。另外,在chroot中执行的挂载将反映在chroot的目录中/etc/mtab,而不反映在main目录中/etc/mtab/etc/mtab在只读文件系统上执行的操作也不会记录在该文件系统上。

有时您希望/etc/mtab优先于或附加进行查询的原因/proc/mounts是,由于它可以访问mount命令行,因此有时可以以更易于理解的方式显示信息。例如,您会看到请求的挂载选项(同时/proc/mounts列出了mount和内核默认设置),而绑定挂载在中显示为/etc/mtab


1
如果不能依靠它,mount维护的目的/etc/mtab是什么?如果mount从中显示信息/proc/mounts不是更好吗?
Piotr Dobrogost

2
@PiotrDobrogost /etc/mtab可以记录内核无法跟踪的信息(例如最初请求的选项),并绑定出现的绑定装载,而不是显示为设备的重复条目。但是,许多发行版正朝着与/etc/mtab的符号链接迈进/proc/mounts
吉尔斯2015年

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

2
请注意,您需要取消转义/ proc / mounts的内容。如getmntent(3)页面中所述,空格(\ 040),制表符(\ 011),换行符(\ 012)和反斜杠(\ 134)都需要特别处理。尤其是在启用用户挂载的情况下,使用这些路径时需要格外小心。
埃里克

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

68

从2.18版开始(2010年7月), util-linux其中包含一个工具,可用于显示当前已安装文件系统的列表:

findmnt

您可以使用以下命令从默认树视图切换到列表视图-l,使用-o(类似于lsblk)定义输出列,使用-t等基于文件系统类型过滤结果。

findmnt -lo源,目标,fstype,标签,选项,已使用-t ext4
SOURCE    TARGET      FSTYPE LABEL OPTIONS                           USED
/dev/sda1 /           ext4   ARCH  rw,noatime,discard,data=ordered  17.6G
/dev/sdb2 /media/DATA ext4   DATA  rw,noatime,discard,data=ordered    44M

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


33

可能是因为距回答此问题已有5年了,所以情况发生了变化。在cat /proc/mounts创造了很多你不关心的信息的。今天,恕我直言,我发现这是最终的解决方案。

df -h --output=source,target

当您阅读手册页时,可以执行各种选择,但这就是您要做的。例如,要进一步清理结果,可以使用以下命令排除“ tmpfs”文件类型:

df -hx tmpfs --output=source,target

df 在文件系统级别而不是文件级别工作。

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

要查看更多信息,请使用此方法:

df -hT

注意如果网络安装缓慢,则可能需要几分钟!

如果您没有或不关心挂载的网络连接(并且您具有root权限),那么这样做会更好:

sudo lsblk -f

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

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

:-)我累了要给你的答案投票,但直到15
Rick

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

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

23

大多数时候,这mount是最方便的方法。要获取当前已挂载文件系统的完整且准确的列表,您应该阅读/proc/mounts(例如,使用cat /proc/mounts)的内容。

例如,如果装入/读写失败,然后以只读方式装入,作为后备/etc/mtab(该mount命令从中读取以告知您装入的内容,并在可能的情况下(更改时写入)写入该内容)将不会更新反映/(其中包含/etc/mtab)当前已以只读方式挂载。在这种情况下,运行mount通常会(错误地)告诉您/已以读写方式装入。

在正常情况下(即,包含该文件系统的文件系统可以被写入时),/etc/mtab包含当前已安装文件系统的列表。请勿将其与混淆/etc/fstab,后者包含应在系统启动时自动挂载的文件系统列表。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.