本文主要是介绍“/proc/filesystems“中的rootfs消失之谜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分析一个文件系统的问题的时候遇到一个很奇怪的现象,在tina中查看 /proc/filesystems节点时,可以发现系统中注册的文件系统类型是包括rootfs的.
但当我无意间在ubuntu中做同样测试时, 却找不到rootfs.
找了另一台ubuntu主机做测试,发现rootfs又出现了
本着刨根问底的精神,想找出这个诡异现象的原因,如果是文件系统设计逻辑上的改动引起的,那工作中肯定会遇到,找到原因,有备无患.
在控制台中 cat /proc/filesystems显示的逻辑在内核代码中是这样的,你会发现关键的变量是file_systems变量.
系统初始化阶段,所有支持的文件系统类型都要在file_systems对象中登记.
基于以上信息,我们查一下rootfs失而复得的原因, 首先我们看一下tina上的内核4.9.191
Linux 4.9.191
Linux5.3.4
所以,我们可以看到,v5.3.1版本的没有通过调用register_filesystem将rootfs_fs_type注册进 file_system链表,那是怎么使用的呢?原来是声明后,直接通过全局变量的方式引用进行挂载.
而v4.4则完全不同 ,它首先通过register_filesystem注册进系统,然后使用的时候再通过get_fs_type获取rootfs_fs_type的引用,最终完成rootfs挂载.
由于新的版本bypass掉了注册这个环节,所以当然无法从cat /prov/filesystems节点中得到rootfs信息.
这种变化是何时发生的呢?经过一番查找,找到了针对这个问题的变更提交fd3e007f6c6a0
另外,根据git describe的信息,这个变更发生在v5.2-rc1版本之后的第61个提交上.
至此,知道了整件事情的来龙去脉.
结束!
这篇关于“/proc/filesystems“中的rootfs消失之谜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!