Linux系统-根文件系统 基于内核6.10版本讲解。1. 根文件系统从何而来Linux用户接触到的根文件系统只是挂载在根目录“/”下的一个真实的文件系统 我们习惯上把它称为真实根文件系统。内核初始化时会挂载一个rootfs文件系统伪文件系统只存在内存中rootfs是Linux内核启动后第一个挂载的文件系统所以它才是Linux的根文件系统。真实根文件系统启动流程分为三步1挂载rootfs伪文件系统创建 根目录 解决文件系统从0到1的问题2解析initramfs并将initramfs中的文件保存至rootfs文件系统3执行initramfs中的init脚本init脚本将完成真实根文件系统如ext4挂载。2. 根文件系统挂载流程2.1 挂载rootfs伪文件系统rootfs文件系统定义structfile_system_typerootfs_fs_type{.namerootfs,.init_fs_contextrootfs_init_fs_context,.kill_sbkill_litter_super,};rootfs_init_fs_context函数staticintrootfs_init_fs_context(structfs_context*fc){if(IS_ENABLED(CONFIG_TMPFS)is_tmpfs)returnshmem_init_fs_context(fc);returnramfs_init_fs_context(fc);}rootfs实际上是一个tmpfs或ramfs文件系统实例。ramfs和tmpfs都是Linux系统中基于内存的文件系统。它们将数据直接存储在RAM物理内存中因此读写速度极快但数据在系统重启后会丢失。文件系统挂载可以阅读这篇文章从ext4文件系统到Linux文件树2.2 解析initramfs至rootfsinitramfs详解initramfs是Linux启动过程中使用的临时文件系统其本质上是一个cpio归档文件包含了挂载真实根文件系统需要用到的所有文件。initramfs是压缩如lz4、gzip、zstd等压缩格式了的cpio归档文件。cpioCopy In and Out是一种在Unix和Linux系统中广泛使用的归档工具用于将多个文件和目录打包成一个单独的归档文件同时保留文件的元数据如权限、所有者、 时间戳 等cpio中的文件记录将一条条被解析并存储 在rootfs文件系统中。cpio支持多种归档格式bin、odc、newc、crc、tar等。initramfs采用的是newc格式。initramfs由一条条文件记录构成每条文件记录格式为文件头110字节文件名0-3字节填充文件数据0-3字节填充文件头包含文件的元数据固定大小为110字节测试脚本(demo.sh)#!/bin/bash #创建文件树 mkdir bin conf etc lib touch etc/test.txt #创建init脚本 echo#!/bin/shinit #打包为newc格式 find bin conf etc lib init-depth|cpio-o-H newcinitramfs.cpio执行./demo.sh cpio-tinitramfs.cpio #文件清单 hexdump-C initramfs.cpio #查看归档文件记录/init脚本/init脚本是initramfs的核心它将完成以下关键任务挂载/proc、/sys、/dev等虚拟文件系统并创建必要的设备节点。加载访问存储设备和文件系统所需的内核模块。挂载真实根文件系统。将系统根目录切换到真实根文件系统并启动/sbin/init进程1号进程。实际的/init脚本一般都比较复杂为了便于讲解我们只关注根文件系统挂载相关的内容如图3所示内核调用run_init_process(/init)函数将会执行init脚本run_init_process函数主要任务是执行用户空间的第一个进程从而完成从内核态到用户态的切换。真实根文件系统如ext4未挂载之前系统执行文件相关的操作都是在rootfs文件系统中进行。1/init脚本会挂载伪文件系统proc、sysfs、devtmpfs等至rootfs。2内核会读取块设备并挂载块设备中的真实根文件系统挂载至rootfs挂载点由用户自行定义。3将已挂载的伪文件系统移动至真实根文件系统以及执行initramfs中的switch_root命令将运行环境切换至真实根文件系统。switch_root命令的核心功能包括将新根目录设置为系统的根文件系统。执行新根文件系统中的init程序通常是 /sbin/init。清理并释放initramfs占用的内存空间。switch_root语法格式如下switch_root[-c /dev/console]NEW_ROOT NEW_INIT[ARGUMENTS_TO_INIT]NEW_ROOT已经挂载好的真正根文件系统挂载点例如 /newroot。NEW_INIT真正根文件系统中的init程序路径通常是/sbin/init软链接指向init或systemd。-c可选重定向新系统的控制台设备。2.3 挂载真实根文件系统initramfs解析完毕后rootfs根目录下会有一个init脚本init脚本将会完成真实文件系统挂载并将系统运行环境也 切换 至真实文件系统。对应的初始化路径为start_kernel() - vfs_caches_init() - rest_init() - kernel_init() - run_init_process(“/init”)。run_init_process函数将会执行init脚本。

相关新闻

最新新闻

Minecraft存档修复怎么操作?10分钟用免费工具救回损坏的 .mca 区块

Minecraft存档修复怎么操作?10分钟用免费工具救回损坏的 .mca 区块

Minecraft存档修复怎么操作?10分钟用免费工具救回损坏的 .mca 区块 【免费下载链接】Minecraft-Region-Fixer Python script to fix some of the problems of the Minecraft save files (region files, *.mca). 项目地址: https://gitcode.com/gh_mirrors/mi/Mine…

2026/8/19 23:45:27
AC/DC通用软启动器设计:从PCB布局到控制算法的硬件工程实践

AC/DC通用软启动器设计:从PCB布局到控制算法的硬件工程实践

1. 项目概述:什么是软启动器? 如果你拆开过家里的空调、大功率风扇或者工业上的电机控制柜,可能会注意到一个现象:这些设备在通电的瞬间,并不会“嗡”的一声直接全速运转,而是会有一个缓慢加速的过程。这个…

2026/8/19 23:45:27
修 RTL Bug 不再靠运气:Clover 如何把大模型的随机性变成可靠搜索

修 RTL Bug 不再靠运气:Clover 如何把大模型的随机性变成可靠搜索

北大团队提出神经符号智能体框架,RTL 自动修复率达 96.8%,平均单次修复成功率 87.5%一块芯片从设计到流片,验证和调试要吃掉大半研发周期。硬件工程师的日常是这样的:写好测试平台,跑仿真,盯着成百上千条信…

2026/8/19 23:45:27
基于ESP32-P4的M5Stack Tab5 Synth:实时音频合成与硬件开发实战

基于ESP32-P4的M5Stack Tab5 Synth:实时音频合成与硬件开发实战

1. 项目概述:当一块平板电脑决定“开口唱歌”如果你玩过M5Stack的产品,大概会和我有同样的感觉:这玩意儿总能整出点新花样。从最初的Core系列到后来的Stick、Atom,再到现在的Tab系列,他们似乎总能在巴掌大的空间里&…

2026/8/19 23:45:27
汽车市场数据分析:从乘联会与中汽协数据看懂市场真实冷暖

汽车市场数据分析:从乘联会与中汽协数据看懂市场真实冷暖

1. 从数据表象到市场肌理:一次从业者的深度拆解 最近,汽车圈里讨论得挺热闹,因为两份关键数据报告出来了,不少媒体和同行都在说“市场回暖了”。作为一个在汽车行业摸爬滚打了十几年的老兵,看到这些标题,我…

2026/8/19 23:45:27
380 种格式打底,Subtitle Edit 如何把字幕从“打不开“变成“多语言成品“?

380 种格式打底,Subtitle Edit 如何把字幕从“打不开“变成“多语言成品“?

380 种格式打底,Subtitle Edit 如何把字幕从"打不开"变成"多语言成品"? 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 字幕编辑器 Subtitle Edit 是一款…

2026/8/19 23:40:27