我可以列出正在运行的内核可以支持的文件系统吗?


27

我正在尝试检测内核可以支持的文件系统。理想情况下,列出他们的名字,但我会拿走你所拥有的任何东西。

请注意,我并不是说当前使用的文件系统,而是当前内核可以在理论上直接支持的文件系统(显然,fuse 可以支持无限多个)。

Answers:


12

我可以列出正在运行的内核可以支持的文件系统吗?

好吧,答案 /proc/filesystems是错误的,它只反映那些已经投入使用的FS,但是通常还有更多的方法:

ls /lib/modules/$(uname -r)/kernel/fs

另一个来源是/proc/config.gz您的发行版中可能缺少的那个(我总是想知道“为什么?!”,以防万一)。


2
包括Ubuntu的内核配置,就在另一个地方:/boot/config-$(uname -r)
Oli

2
/proc/filesystems没有,它只是不完整的
scai

3
@poige按照这种逻辑,您的答案也非常不完整,而且是错误的。/lib/modules/$(uname -r)/kernel/fs只会对已启用为模块的文件系统有所帮助,而对内置于内核中的文件系统无效。此外,模块名称可能与它提供的文件系统名称不匹配,并且一个模块可以提供多个文件系统。
帕特里克

4
这个答案是误导性的,如果没有加载模块,内核将无法加载该文件系统类型。要声明内核可以加载它是不正确的-在成功加载模块之前,您不知道它是否可以加载。甚至无法保证您可以加载该模块。
克里斯·

3
@poige实际上我一点都没有忽略/proc/config.gz。1)不能保证存在; 2)模块名称可能与它提供的文件系统名称不匹配,并且一个模块可以提供多个文件系统。
Patrick

11

/proc/filesystems列出正在运行的内核支持的所有文件系统类型,以及文件系统属性,nodev以指示例如该文件系统不受块设备的支持。

man 5 filesystems 提供了一些更深入的信息。


1
nodev当您输出时是什么意思cat /proc/filesystems
slm

在我的Arch linux笔记本电脑上,cat /proc/filesystems列出了一堆“ nodev”(显然是专用文件系统)以及ext2,ext3,ext4。当我查看时/lib/modules/3.11.6-1-ARCH/kernel/fs,会看到许多其他内容,例如“ fats”,“ btrfs”,“ reiserfs”,它们也是常规的磁盘文件系统,但未出现在/proc/filesystem列表中。那是怎么回事?
Bruce Ediger

1
nodev表示所讨论的文件系统不是需要使用块设备的物理文件系统,而是由除块设备以外的内容支持的虚拟文件系统。
乔纳森·卡伦

5
@BruceEdiger:/proc/filesystems仅显示内核已加载的文件系统-除非您将这些模块插入内核(通常在需要它们时自动发生),否则内核将不支持这些文件系统。
乔纳森·卡伦

0

我相信这会给您您想要的:

(cat /proc/filesystems | awk '{print $NF}' | sed '/^$/d'; ls -1 /lib/modules/$(uname -r)/kernel/fs) | sort -u

说明

根据我的最佳理解:

  • cat /proc/filesystems | awk '{print $NF}' | sed '/^$/d' 为您提供内核本地支持的所有文件系统(例如sysfs)以及当前已加载内核模块的文件系统
  • ls -1 /lib/modules/$(uname -r)/kernel/fs 为您提供内核可用的可用文件系统模块的列表
  • sort -u 排序前两个命令的合并结果,并删除重复项(仅显示唯一结果-u)

我仍在学习linux,它可以在Arch linux上运行,但我相信至少对于ubuntu,您可能需要将路径更改为/lib/modules/$(uname -r)/kernel/fs适合您的发行版的其他目录。

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.