首页 > 其他 > 详细

initrd和initramfs的区别是什么?【转】

时间:2020-09-27 00:04:31      阅读:37      评论:0      收藏:0      [点我收藏+]

转自: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就是简单打包,简单灵活。

initrd和initramfs的区别是什么?【转】

原文:https://www.cnblogs.com/sky-heaven/p/13737336.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!