https://notes.z-dd.online/2025/11/12/initrd%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98%E5%8F%8Ainitramfs%E7%9B%B8%E5%85%B3/
https://notes.z-dd.online/2025/11/12/initrd%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98%E5%8F%8Ainitramfs%E7%9B%B8%E5%85%B3/
initrd遇到的问题及initramfs相关
问题背景
最新在升级新驱动时遇到了一个很奇葩的问题:在客户某个版本的系统下,不管是将核外驱动包以前的老版本卸载后再安装新版本,还是直接升级该核外驱动包的新版本,从加载的驱动中读出的驱动版本一直是老的,甚至将该驱动包卸载后驱动还会加载,且为老版本,查找了一圈发现连KO都已经不存在了,奇了怪了,最后就把目光怀疑到了 **initrd**,果然在initrd里面有这个wifi驱动。
那它是怎么进去的呢?默认的initrd是没有将该wifi驱动放在里面的,后来发现居然是其他驱动的dkms包hooks脚本暴力将整个updates/dkms目录拉进了initrd ~~
下面,我们来看看这个 initrd 与 initramfs, 以下主要以 Debian/Ubuntu 系的发行版为例。
initrd与initramfs
initramfs 和 initrd 都是 Linux 启动过程中用于临时根文件系统(initial root filesystem)的机制,目的是在挂载真正的根文件系统之前加载必要的驱动、模块和工具。虽然它们目标一致,但在实现方式、历史演进和现代使用上存在关键区别。
一、基本概念对比
特性 initrd(Initial RAM Disk) initramfs(Initial RAM File System)
出现时间 较早(Linux 2.4 时代) 较新(Linux 2.6 起成为主流)
技术基础 块设备镜像(模拟磁盘),需格式化为 ext2 等文件系统 cpio 归档 + tmpfs,直接作为内存中的文件系统
加载方式 内核将其当作一个 RAM disk 挂载 内核直接解压 cpio 到 tmpfs 中
内存效率 较低(固定大小,即使未用满也占用内存) 较高(按需分配,动态增长/收缩)
复杂度 需要文件系统驱动支持(如 ext2) 无需额外文件系统,内核原生支持 cpio
现代使用 ❌ 已基本被 initramfs 取代 ✅ 当前所有主流发行版默认使用
二、技术细节差异
1. initrd 的工作流程
Bootloader(如 GRUB)将 vmlinuz(内核)和 initrd.img 加载到内存。
内核创建一个 RAM disk 设备(如 /dev/ram0)。
将 initrd.img 解压并挂载为一个块设备上的文件系统(通常是 ext2)。
执行其中的 /linuxrc 脚本。
脚本完成后,卸载 initrd,挂载真正的根文件系统。
⚠️ 缺点: 需要内核内置对应文件系统的驱动(如 ext2),且内存浪费大。
2. initramfs 的工作流程
Bootloader 加载内核和 initramfs(通常也是叫 initrd.img,但内容是 cpio 格式)。
内核将 cpio 归档直接解压到 tmpfs(基于内存的临时文件系统)中。
执行 /init 脚本(不再是 /linuxrc)。
脚本完成必要操作(如加载加密/LVM/RAID 驱动)后,通过 switch_root 切换到真正的根文件系统。
✅ 优点:
不依赖特定文件系统;
内存使用更高效;
实现更简洁,集成度更高。
三、文件命名的“混淆”
........
作者: Shell
链接: https://notes.z-dd.online/2025/11/12/initrd%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98%E5%8F%8Ainitramfs%E7%9B%B8%E5%85%B3/
来源: DD'Notes
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
。。。 。。。
更多请关注我的公众号:
或我的博客:https://notes.z-dd.online/
2626

被折叠的 条评论
为什么被折叠?



