天天看点

initrd.img相关

initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, bootloader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。第一阶段启动的目的是为第二阶段的启动扫清一切障爱,最主要的是加载根文件系统存储介质的驱动模块。我们知道根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞大、臃肿。

  

  initrd.img是Linux启动过程中很重要的一个文件,(如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模,那么启动时如果没有指定INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其它设备)。如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告"kernel panic: VFS: Unable to mount root fs on 08:06"的错误。)

  

    它把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上。

   initrd.img不像通常的以.img为扩展名的ramdisk cramfs文件。它是经过用gzip -9进行压缩过的ramdisk文件。所以,需要先解压缩然后在mount,否则会出错。以下是操作过程。 

  首先将initrd.img拷贝到操作目录下:

  cp initrd.img /work/initrd.gz

  然后解压缩:

  gunzip initrd.gz

  解压后可以看到一个没有gz后缀的文件initrd

  直接mount该文件:

  mount -o loop initrd /mnt 

  mount成功后,/mnt目录中将能看到initrd.img中的所有文件及目录

  在work下建一个目录initrd

  将mnt下的文件都拷贝到initrd下

  cp /mnt

 cd /lib/modules/kernel_version

  mkinitrd /tmp/initrd-kernel_version.img kernel_version

  cp /tmp/initrd-kernel_version.img /boot

  

  这是一个grub.conf的内容,可以修改一下!

    default=1 

    timeout=10 

    splashimage=(hd0,6)/grub/splash.xpm.gz 

    title Psyche (2.4.18-14 standard)//在启动菜单里显示的名字 

    root (hd0,6) //在E盘

    kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8  

    initrd /initrd-2.4.18-14.standard.img //改成initrd-kernel_version.img

    title Windows xp 

    rootnoverify (hd0,0) 

    chainloader +1  

-----------------------------------------------------------------------------------------------------------------------------------------

我想做一个U盘启动的linux,照处面的步骤进行:

建立initrd.img文件

# mkdir -p /mnt/initrd 

# cd /tmp 

# mkinitrd /tmp/initrd.gz 2.6.18 

2.解压initrd.img文件,修改启动脚本linuxrc 

# gunzip initrd.gz 

# mount -o loop /tmp/initrd /mnt/initrd

到这步就出现:mount: you must specify the filesystem type

怎样指定文件系统都无法mount上去,

我也试过生成2.6.18.img文件,

再mv 2.6.18.img 2.6.18.gz

然后再用gunzip解压,也是不行。

到底要怎样才行呢?

你的文件是cpio文件 不是影像文件

你可以用 file initrd看下 文件类型就可以了

从 Fedora Core 3 开始,默认的 initrd 映像变成了一个经过压缩的 cpio 归档文件。我们不用再使用 loop 设备来将 initrd 作为压缩映像进行挂载,而是可以将其作为 cpio 归档文件来使用

------------------------------------------

cpio –idcmv < 文件名解压

制作cpio格式initrd

非常简单:

1. find . | cpio -c -o > initrd.img

2. gzip initrd.img

3. mv initrd.img.gz initrd.img

要注意,cpio 的-c选项别忘了,否则initrd不能正确挂载。

继续阅读