如何找出有多少物理安装的文件系统?

Jea*_*ans 2 linux filesystems mount hard-disk

我最近了解到您可以挂载两种不同类型的文件系统:逻辑文件系统和物理文件系统。

根据我的理解,物理文件系统是位于物理连接到机器的磁盘上的硬件。

而逻辑文件系统存在于远程某处并通过网络安装。

一天前,我 ssh 进入服务器并运行命令mount | wc -l并得到答案 17。今天我做了相同的命令并得到了 70。我猜测mount列出了物理和逻辑安装的文件系统。

有没有一种方法可以计算安装的物理文件系统的数量?最好用一个简短的命令?

Ste*_*itt 6

“逻辑”文件系统不一定通过网络安装;例如,在您的系统上安装了 70 个文件系统,其中大部分可能是与内核功能相对应的文件系统,而不是网络文件系统。逻辑文件系统包括sysfs, proc, 所有 cgroup 文件系统, tmpfs,devtmpfs、 等,它们都是“本地”文件系统。

“非物理”文件系统由内核在/proc/filesystemsusing中标识nodev,因此您可以使用它来仅列出“物理”文件系统,使用findmnt

findmnt -t $(grep -v nodev /proc/filesystems | paste -sd, - | tr -d \\t)
Run Code Online (Sandbox Code Playgroud)

要计算文件系统,请删除标题并将输出提供给wc -l

findmnt -n -t $(grep -v nodev /proc/filesystems | paste -sd, - | tr -d \\t) | wc -l
Run Code Online (Sandbox Code Playgroud)

可以从图像文件和其他非设备文件,甚至是网络上的远程块设备挂载此类文件系统类型;但是这种方法在大多数系统上都会给你很好的结果。

另一种方法是从磁盘设备本身开始,使用lsblk; lsblk -f将输出物理设备树,但需要许多层才能到达实际安装的文件系统。您可以将与上述有关物理文件系统的信息结合起来以仅列出与系统上的块设备匹配的文件系统:

lsblk -f | grep -F -f <(grep -v nodev /proc/filesystems | tr -d \\t)
Run Code Online (Sandbox Code Playgroud)

计数给出所需的结果:

lsblk -f | grep -F -f <(grep -v nodev /proc/filesystems | tr -d \\t) | wc -l
Run Code Online (Sandbox Code Playgroud)