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

xan*_*eng 204 linux filesystems mount

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

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

Gil*_*il' 181

已安装文件系统的最终列表在/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.

  • *尽管如此,许多发行版正朝着让 `/etc/mtab` 成为 `/proc/mounts` 的符号链接的方向发展。* 很高兴听到 - 添加此信息来回答会使其更好。您认为跟踪内核请求的选项是否可行且有益? (3认同)
  • 另请参阅有关使用命令 `findmnt` 的其他答案,这是自 2010 年以来的首选方式,并且可能是在不久的将来当挂载命名空间变得普遍时唯一安全的方式。 (3认同)
  • @PiotrDobrogost `/etc/mtab` 可以记录内核未跟踪的信息,例如最初请求的选项,并绑定挂载显示为此类,而不是显示为设备的重复条目。尽管如此,许多发行版正朝着让`/etc/mtab` 成为`/proc/mounts` 的符号链接的方向发展。 (2认同)
  • 请注意,您需要取消转义 /proc/mounts 的内容。如getmntent(3)页面所述,空格(\040)、制表符(\011)、换行符(\012)和反斜杠(\134)需要特殊处理。特别是如果启用了用户挂载,则在使用这些路径时需要非常小心。 (2认同)

don*_*sti 113

从 v. 2.18(2010 年 7 月)开始, util-linux包含一个工具,允许您显示当前安装的文件系统列表:

findmnt
Run Code Online (Sandbox Code Playgroud)

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

findmnt -lo source,target,fstype,label,options,used -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
Run Code Online (Sandbox Code Playgroud)

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


小智 49

也许是因为这个问题已经有 5 年了,事情已经发生了变化。这cat /proc/mounts会产生很多您不关心的信息。今天,恕我直言,我发现这是最终的解决方案。

df -h --output=source,target
Run Code Online (Sandbox Code Playgroud)

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

df -hx tmpfs --output=source,target
Run Code Online (Sandbox Code Playgroud)

df 适用于文件系统级别而不是文件级别。

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

要查看更多信息,请使用以下命令:

df -hT
Run Code Online (Sandbox Code Playgroud)

注意对于慢速安装的网络连接,这可能需要几分钟时间!

如果您没有或不关心已安装的网络连接(并且您有 root 权限),那么这会更好:

sudo lsblk -f
Run Code Online (Sandbox Code Playgroud)


Eli*_*gan 23

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

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

在正常情况下(即,当包含它的文件系统可以写入时),/etc/mtab包含当前挂载的文件系统的列表。不要与 混淆/etc/fstab,它包含应该在系统启动时自动挂载的文件系统列表。

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