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

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

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

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

答案1

已安装文件系统的最终列表位于/proc/mounts.

如果您的系统上有任何形式的容器,/proc/mounts则仅列出当前容器中的文件系统。例如,在一个chroot/proc/mounts仅列出挂载点位于 chroot 内的文件系统。 (请注意,有一些方法可以逃避 chroot。

中还有一个已安装文件系统的列表/etc/mtab。该列表由mount和命令维护umount。这意味着如果您不使用这些命令(这​​种情况很少见),您的操作(安装或卸载)将不会被记录。实际上,您通常会在 chroot 中发现/etc/mtab与系统状态有很大不同的文件。此外,在 chroot 中执行的挂载将反映在 chroot 中,/etc/mtab但不会反映在 main 中/etc/mtab。在/etc/mtab只读文件系统上执行的操作也不会记录在那里。

/etc/mtab您有时想要优先或额外进行咨询的原因/proc/mounts是,因为它可以访问 mount 命令行,所以有时能够以更容易理解的方式呈现信息;例如,您会看到所请求的挂载选项(同时也/proc/mounts列出了mount和内核默认值),并且绑定挂载在/etc/mtab.

答案2

自第 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

作为2.27版还支持JSON通过-J--json开关输出:

findmnt -Jo 源、目标、标签、uuid -t ext4
{
   "filesystems": [
      {
         "source": "/dev/nvme0n1p5",
         "target": "/",
         "label": "ARCH",
         "uuid": "f21a53194-b02a-4e92-ad96-fdf9b8bc1db9",
         "children": [
            {
               "source": "/dev/nvme0n1p6",
               "target": "/run/media/data",
               "label": "DATA",
               "uuid": "321e288a-e67c-4b68-8d0b-89720210921f"
            }
         ]
      }
   ]
}

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

答案3

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

df -h --output=source,target

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

df -hx tmpfs --output=source,target

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

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

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

df -hT

笔记如果网络连接速度较慢,这可能需要几分钟!

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

sudo lsblk -f

答案4

如果由于某种原因无法再访问已安装的源(在我的情况下,我的域密码已过期),则安装点目录为空,并且(至少对我来说)安装不再显示在/proc/mount.

我拼命地搜索任何此类安装,因为我怀疑有一些安装经常尝试使用旧凭据(每隔几秒)访问我的域帐户,从而频繁锁定该帐户。这就是为什么我首先发现这个问题。但这/proc/mounts对我来说不是解决方案。

我知道我可能已经使用如下命令从 Ubuntu 服务器完成了一些安装,但不确定mount_point_dir我可以使用什么,因为我的常规安装点似乎都没有安装。

$ mount.cifs <remotetarget> <mount_point_dir>

我终于从 syslog 中找到了一个验证,确实存在一些安装授权问题/var/log/syslog。我在这个日志中看到了很多行,其中包含以下语句:

CIFS VFS: Free previous auth_key.response
Status code returned 0xc0000234 STATUS_ACCOUNT_LOCKED_OUT

这证实了我的怀疑,然后我可以通过查看/proc/fs/cifs文件夹下的统计信息和调试数据来得到进一步的确认。

查看更多信息这里

虽然我从未真正看到有关目标的信息mount_point_dir,只看到了安装的源,但这足以让我解决我的问题,因为这促使我重新启动服务器,之后安装消失了,帐户锁定问题也消失了。

相关内容