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
继续
 

initrd是init ram disk,initramfs是init ram file system,前者把内存模拟成磁盘,后者直接把内存模拟成文件系统

欢迎纠正
 
继续浏览内容
知乎
发现更大的世界
打开
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就是简单打包,简单灵活。
【作者】张昺华
【大饼教你学系列】https://edu.csdn.net/course/detail/10393
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【微信公众号】 张昺华
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/sky-heaven/p/13737336.html