Linux文件系统检测

时间:2011-04-16 03:51:34

标签: linux filesystems linux-kernel

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

我无法真正理解的是,我无法理解Linux如何检测文件系统类型,linux中支持的文件系统非常多,并且具有特殊性。

有人能指点我内核中的一段代码,它应该区分let和fat和ext4吗?

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

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

3 个答案:

答案 0 :(得分:17)

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

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:5)

来自mount手册页:

  

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

另外,我的ubuntu框有这个mount man页面(提到volume_id库)

  

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