我最近了解到您可以挂载两种不同类型的文件系统:逻辑文件系统和物理文件系统。
根据我的理解,物理文件系统是位于物理连接到机器的磁盘上的硬件。
而逻辑文件系统则远程存在于某处并通过网络安装。
一天前,我 ssh 到服务器并运行命令mount | wc -l
并得到答案 17。今天我执行相同的命令并得到 70。我猜测mount
列出了物理和逻辑安装的文件系统。
有没有一种方法可以计算仅安装的物理文件系统的数量?最好用一个简短的命令?
答案1
“逻辑”文件系统不一定通过网络安装;例如,在安装了 70 个文件系统的系统上,其中大部分可能是与内核功能相对应的文件系统,而不是网络文件系统。逻辑文件系统包括sysfs
、proc
、所有 cgroup 文件系统、tmpfs
、devtmpfs
等,它们都是“本地”文件系统。
“非物理”文件系统由内核在/proc/filesystems
using中识别nodev
,因此您可以使用它来仅列出“物理”文件系统,使用findmnt
:
findmnt -t $(grep -v nodev /proc/filesystems | paste -sd, - | tr -d \\t)
要对文件系统进行计数,请删除标头并将输出提供给wc -l
:
findmnt -n -t $(grep -v nodev /proc/filesystems | paste -sd, - | tr -d \\t) | wc -l
可以从映像文件和其他非设备文件甚至网络上的远程块设备挂载此类文件系统类型;然而,这种方法在大多数系统上都会给你带来良好的结果。
另一种方法是从磁盘设备本身开始,使用lsblk
;lsblk -f
将输出物理设备树,无论需要多少层才能到达实际安装的文件系统。你可以结合那使用上述有关物理文件系统的信息,仅列出与系统上的块设备匹配的文件系统:
lsblk -f | grep -F -f <(grep -v nodev /proc/filesystems | tr -d \\t)
计算得出所需的结果:
lsblk -f | grep -F -f <(grep -v nodev /proc/filesystems | tr -d \\t) | wc -l