什么是 initrd.img

对我个人而言,学习一个系统的最好的方法就是随着其启动运行的过程一点一点跟进(就好象看一个程序的源码要从main函数或者说从入口函数开始步步跟进)。当然具体的学习过程重点不是找到入口点就OK的。中间还有很多技巧,比如什么时候这个应该跳过一个实现什么时候应该跟进等。这个具体方法就一言难尽了,我也不再多少说了。不多说的两个简单原因:1、正如我开始说的,这个方法也许只适合我。 2、并不是本篇文章的重点。

我前面那么多废话只是想带出我聊聊的的 initrd.img文件,因为它就是系统启动会加载的文件。说 initrd.img文件还会提到另外一个名角---vmlinuz 。vmlinuz 正式 linux的内核,当然这里不是要讨论它。

 

一般来讲大家很容易理解的是这样的:系统内核 vmlinuz被加载到内存后开始提供底层支持,在内核的支持下各种模块,服务等被加载运行。这样当然是大家最容易接受的方式,曾经的linux就是这样的运行的。假设你的硬盘是scsi 接口而你的内核又不支持这种接口时,你的内核就没有办法访问硬盘,当然也没法加载硬盘上的文件系统,怎么办?好办!把内核加入scsi驱动源码然后重新编译出一个新的内核文件替换原来vmlinuz。

需要改变标准内核默认提供支持的例子还有很多,如果每次都需要编译内核就太麻烦了。所以后来的linux就提供了一个灵活的方法来解决这些问题---initrd.img

ininrd.img是什么呢?initrd 的含义是initialized ram disk. ramdisk是用一部分内存模拟成磁盘,让操作系统访问。举个例子,不知道你用过没用过win pe他的衍生版比较有名的就是“深山红叶系统修复光盘”。当使用win pe 启动后会发现你的计算机就算没有硬盘也能在正常运行,其中有个文件系统B:/ 分区,这个分区就是内存模拟的磁盘。

initrd.img文件就是个ramdisk的映像文件(其实是压缩过的,后面会解释)。ram disk是标准内核文件认识的设备(/dev/ram0)文件系统也是标准内核认识的文件系统。内核加载这个ram disk作为根文件系统并开始执行其中的"某个文件"(2.6内核是 init文件)来加载各种模块(支持scsi的驱动就可以放在这里),服务等(这时然后系统就更强大了)。经过一些配置和运行后,就可以去物理磁盘加载真正的root分区了,然后又是一些配置等,最后启动成功。

也就是你只需要定制适合自己的 initrd.img 文件就可以了。这要比重编内核简单多了,省时省事低风险。内核启动过程中具体执行了initrd.img 内的哪些文件和顺序不在本文讨论,下面只讲讲你怎样才能看到 initrd.img的内容。

这个方法是对kernel-2.5之后的版本适用的。因为这之前的initrd.img和之后的格式是不同的。这之后的版本一般被称为cpio-initrd。 initrd.img 是个gz压缩文件,initrd.img改名为initrd.gz能用windows下的winrar或linux下的gunzip解压,解压后会得到一个initrd文件。这个文件就是cpio格式的文件,只能在linux下用cpio命令解压(我没找到在windows下能解药cpio格式的工具,如果你找到了告诉我一下,谢谢) ,执行cpio -i < initrd

这篇只是简单的说了说 initrd.img 的作用,也许有表述的不严谨的地方,还请大家多多指教。

你可能感兴趣的:(windows,linux,工具,disk,磁盘)