initrd和initramfs的区别是什么?【转】
转自:https://www.zhihu.com/question/22045825
不要被文件名迷惑,kernel 2.6 以来都是 initramfs 了,只是很多还沿袭传统使用 initrd 的名字
initramfs 的工作方式更加简单直接一些,启动的时候加载内核和 initramfs 到内存执行,内核初始化之后,切换到用户态执行 initramfs 的程序/脚本,加载需要的驱动模块、必要配置等,然后加载 rootfs 切换到真正的 rootfs 上去执行后续的 init 过程。
initrd 是2.4 及更早的用法(现在你能见到的 initrd 文件实际差不多都是 initramfs 了),运行过程大概是内核启动,执行一些 initrd 的内容,加载模块啥的,然后交回控制权给内核,最后再切到用户态去运行用户态的启动流程。
从格式看,老的 initrd 是一个压缩的内存文件系统,具体是啥忘了,年月太久了。现在的 initramfs 是一个 gzip 压缩的 cpio 文件系统打包,如果遇到什么紧急情况需要处理的时候,你可以建立一个临时目录,把 initramfs 解压之后,直接 cpio -idv 解压出来,改之后再用 cpio 和 gzip 封上即可。虽然大家都喜欢用 tar 打包,但掌握点 cpio 在关键时刻还是可以救命的,呵呵继续浏览内容

知乎
发现更大的世界
打开

Chrome
继续
继续浏览内容

知乎
发现更大的世界
打开

Chrome
继续
首先要介绍kernel启动init的两种方案。
第一种是,ramdisk,就是把一块内存(ram)当做磁盘(disk)去挂载,然后找到ram里的init进行执行。
第二种是,ramfs,直接在ram上挂载文件系统,执行文件系统中的init。
initrd(init ramdisk)就是ramdisk的实现,initramfs就是ramfs的实现。
Note:
tmpfs,是ramfs的增强版方案。
rootfs,是ramfs/tmpfs的一个特殊实例。
所以initramfs也可以是tmpfs/rootfs的实现。
继续浏览内容

知乎
发现更大的世界
打开

Chrome
继续
区别如下:
1.制作方式
initrd制作时需要关联loop back device,把它格式化为一个文件系统例如ext2,然后mount到你的host系统,再把需要的文件复制进去,而initramfs直接就是file system,一个cpio搞定。
2.空间占用
initrd在内核启动引导完就释放空间的,而initramfs的空间在内核解压完毕是一直占用的。
3.灵活性
initrd是基于某个文件系统固定大小,扩充空间需要重新走1的流程;而initramfs就是简单打包,简单灵活。
1.制作方式
initrd制作时需要关联loop back device,把它格式化为一个文件系统例如ext2,然后mount到你的host系统,再把需要的文件复制进去,而initramfs直接就是file system,一个cpio搞定。
2.空间占用
initrd在内核启动引导完就释放空间的,而initramfs的空间在内核解压完毕是一直占用的。
3.灵活性
initrd是基于某个文件系统固定大小,扩充空间需要重新走1的流程;而initramfs就是简单打包,简单灵活。
【作者】sky
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
分类:
【linux内核】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架