1. initramfs基础概念解析
initramfs(Initial RAM File System)是现代Linux系统启动过程中一个至关重要的临时文件系统。它本质上是一个经过压缩的cpio归档文件,由内核在启动早期阶段加载到内存中并解压成临时根文件系统。这个机制最早出现在Linux 2.6内核中,用于解决传统initrd(Initial RAM Disk)的诸多局限性。
与initrd相比,initramfs有几个显著优势:它直接集成到内核镜像中(也可作为独立文件加载),采用更高效的cpio格式而非镜像文件,并且直接挂载为tmpfs而无需额外的块设备模拟。在实际使用中,你会发现典型的initramfs镜像大小通常在几MB到几十MB之间,比如Ubuntu 20.04的initramfs大约在30MB左右,而嵌入式系统可能只有2-3MB。
关键区别:initrd是模拟块设备需要驱动支持,而initramfs直接作为内存文件系统,减少了硬件依赖和启动环节。
2. initramfs的核心作用与工作原理
2.1 启动过程中的关键角色
当Linux内核启动时,它首先会解压并加载initramfs到内存中,然后执行其中的/init程序(或通过内核参数指定其他初始化程序)。这个临时文件系统的主要使命是:
- 加载关键硬件驱动(如磁盘控制器、文件系统驱动)
- 挂载真正的根文件系统
- 执行必要的初始化脚本
- 最终切换到真实根文件系统并启动init进程
在系统启动日志中(通过dmesg查看),你会看到类似这样的关键节点记录:
code复制[ 0.327476] Unpacking initramfs...
[ 0.851693] Freeing initrd memory: 32716K
[ 1.024587] Run /init as init process
2.2 典型应用场景实例
- 加密根文件系统:当使用LUKS加密根分区时,initramfs会包含cryptsetup工具和必要的密码输入界面
- RAID/LVM配置:需要加载dm-mod等内核模块才能访问存储设备
- 网络根文件系统(NFS):需要提前加载网卡驱动和网络配置
- 特殊文件系统:如b
