【问题标题】:Linux filesystem detectionLinux文件系统检测
【发布时间】:2011-04-16 03:51:34
【问题描述】:

我正在尝试关注this book,以了解 Linux 内核的工作原理。

我无法真正理解的是,我无法理解 Linux 如何检测文件系统类型,Linux 支持的文件系统数不胜数,每个文件系统都有其特殊性。

谁能给我指出内核中的一段代码,该代码应该区分比如说 fat 和 ext4?

MBR不包含这类信息,每种类型的超级块都不一样。

发出mount /dev/whatever /media 时,无需添加文件系统类型。

【问题讨论】:

  • 顺便说一句,喜欢这本书,我认为这是对内核结构的非常好的介绍。

标签: linux filesystems linux-kernel


【解决方案1】:

您找不到它的原因是,在大多数情况下,它不在内核中——它在用户空间mount 实用程序中,它位于util-linux 包中。如果你不给它一个文件系统类型,或者如果你给它一个“任何”类型,mount 只会遍历内核知道的所有文件系统的列表,并按顺序尝试每个文件系统,直到其中一个它们安装成功(如果没有安装则返回错误)。

它如何找出内核知道的文件系统类型?它读取/proc/filesystems 文件,该文件遍历fs/filesystems.c 中的file_systems 链表。加载文件系统驱动程序时,它会在同一文件中调用register_filesystem 以将自身添加到该列表中。例如,在 fs/ext2/super.c 中的 init_ext2_fs 中有一个对 register_filesystem 的调用——init_ext2_fs 是 ext2 模块的模块初始化函数。

当有人尝试使用错误的文件系统挂载设备时,某些文件系统会产生噪音并在内核调试日志中打印错误,这就是为什么,例如,当成功时,您可能会看到有关“无效 XFS 文件系统”的错误/em> 挂载一个 ext4 文件系统,如果 mount 碰巧先尝试了 xfs。

【讨论】:

  • 驱动程序知道它是否有效的方式是大多数文件系统在它寻找的分区的开头附近都有一个“幻数”。
【解决方案2】:

blkid -o value -s TYPE /dev/path/to/device

【讨论】:

  • 不回答 OP 的问题,但仍然是一个方便的单行字
【解决方案3】:

来自mount 手册页:

如果没有给出 -t 选项,或者如果指定了自动类型,mount 将尝试猜测所需的类型。如果 mount 是用 blkid 库编译的,猜测是由这个库完成的。否则,mount 通过探测超级块来猜测自己;如果这没有出现任何看起来熟悉的内容,mount 将尝试读取文件 /etc/filesystems,或者,如果不存在,则 /proc/filesystems。除了标记为“nodev”的文件系统类型(例如,devpts、proc、nfs 和 nfs4)之外,所有列出的文件系统类型都将被尝试。如果 /etc/filesystems 在一行中只有一个 * 结束,mount 之后会读取 /proc/filesystems。

另外,我的 ubuntu 盒子有这个是 mount 手册页(提到 volume_id 库)

如果没有给出 -t 选项,或者如果指定了自动类型,mount 将尝试猜测所需的类型。安装用途 用于猜测文件系统类型的 blkid 或 volume_id 库;如果那没有出现任何看起来 熟悉,mount 将尝试读取文件 /etc/filesystems,或者,如果不存在,则 /proc/filesystems。全部 除了那些标记为“nodev”的文件系统类型(例如,devpts、proc 和 nfs)。如果 /etc/filesystems 在一行中只有一个 * 结束,mount 之后会读取 /proc/filesystems。

【讨论】:

  • 感谢您指出这一点,遗憾的是我没有 15 名声望给您一个“竖起大拇指”
猜你喜欢
  • 2015-08-07
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多