slo*_*loc 11 linux filesystems linux-kernel
我试图按照这本书来了解一下linux内核的工作原理.
我无法真正理解的是,我无法理解Linux如何检测文件系统类型,linux中支持的数据库系统各有特殊性.
有没有人能指出我内核中的一段代码应该区分让我们说胖子和ext4?
MBR不包含这些类型的信息,每种类型的超级块都不同.
发出时mount /dev/whatever /media不需要添加文件系统类型.
hob*_*bbs 17
你无法找到它的原因是因为,在大多数情况下,它不在内核中 - 它mount位于util-linux包中的用户空间实用程序中.如果你没有给它一个文件系统类型,或者你给它一个"any"类型,mount只需浏览内核知道的所有文件系统的列表,并按顺序尝试每个文件系统直到其中一个成功安装(如果没有,则返回错误).
它如何找出内核知道的文件系统类型?它读取/proc/filesystems文件,该文件遍历file_systems链表fs/filesystems.c.加载文件系统驱动程序时,它会调用register_filesystem该文件以将其自身添加到该列表中.例如,有一个电话register_filesystem在init_ext2_fs中fs/ext2/super.c- init_ext2_fs是ext2的模块,模块初始化函数.
当有人试图使用错误的文件系统挂载设备时,某些文件系统会出现噪音并且内核调试日志出现错误,这就是为什么在成功安装ext4文件系统时可能会看到有关"无效XFS文件系统"的错误,如果mount发生的话首先尝试xfs.
从mount man页面:
如果没有给出-t选项,或者指定了auto类型,mount将尝试猜测所需的类型.如果mount是使用blkid库编译的,那么猜测就是由这个库完成的.否则,mount通过探测超级块来猜测自己; 如果没有看到任何看起来熟悉的东西,mount将尝试读取文件/ etc/filesystems,或者,如果不存在,/ proc/filesystems.除了那些标记为"nodev"的文件系统类型(例如,devpts,proc,nfs和nfs4)之外,将尝试列出其中列出的所有文件系统类型.如果/ etc/filesystems以只有一个*的行结束,那么mount将在之后读取/ proc/filesystems.
另外,我的ubuntu框有这个mount man page(提到volume_id库)
如果没有给出-t选项,或者指定了auto类型,mount将尝试猜测所需的类型.Mount使用blkid或volume_id库来猜测文件系统类型; 如果没有看到任何看起来熟悉的东西,mount将尝试读取文件/ etc/filesystems,或者,如果不存在,/ proc/filesystems.除了那些标记为"nodev"的文件系统类型(例如,devpts,proc和nfs)之外,将尝试列出其中列出的所有文件系统类型.如果/ etc/filesystems以只有一个*的行结束,那么mount将在之后读取/ proc/filesystems.