“/proc/filesystems“中的rootfs消失之谜

本文揭示了在不同内核版本中rootfs文件系统注册方式的变化,从v4.4的传统注册到v5.3.1的直接引用,导致/proc/filesystems中rootfs信息丢失。作者追踪了代码变更并发现其在v5.2-rc1后的第61个提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析一个文件系统的问题的时候遇到一个很奇怪的现象,在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个提交上.

至此,知道了整件事情的来龙去脉.


结束! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值