dracut即将替代mkinitrd

1.前言:生成虚拟内存文件的initrd的利器(CentOS和RedHat版本)


历史:Fedora 11开始使用dracut,所以开机启动如果出现dracut warning

表示启动过程中,加载initrd之后出现异常。目前openSUSE并没有采用。

但是CentOS和RedHat版本(如果读者不了解Fedora和下面这两个发行版本

的渊源,请了解)已经正在使用dracut,从查找的文献来看。


2.实际应用:

系统环境:CentOS release 6.5 (Final)

内核版本:2.6.32-431.el6.x86_64


#dracut -v /boot/initrd.img 

将在/boot目录下创建一个名为initrd.img文件的通用initramfs.这包含了你当前运行内核当前加载的全部内核模块,目前生成的虚拟文件大小是45MB。


#dracut --hostonly

该命令生成的映像只能在本机使用,不能引导其他类型的机器


注意事项:

在使用mkinitrd的过程中,调用指令:

#mkinitrd -v --with=megaraid /boot/initrd.img 'uname -r'

生成的initrd.img文件,通过解压,没有发现/lib/modules/'uname -r'目录

意味着根本就没有任何的驱动模块可以加载,是否是CentOS系统上的一个bug?

与此同时,查看资料显示mkinitrd指令最终调用的也是dracut指令。

******************************************************************************************************

dracut出现问题在PXE安装
摘自:http://blog.sina.com.cn/s/blog_4ba5b45e0102e7nk.html

centos 6下自己编译linux内核,完了创建initrd文件,依据以前的的经验mkinitrd

#mkinitrd -v ../initramfs-3.0.32.img 3.0.32
但是输出的消息却与以前的版本不太一样,好像打包进去了很多模块,生成花费时间也很长,完成后,看initramfs文件有100多M,OMG,这么大的文件 /boot目录可放不下(/boot挂在单独的分区下,该分区只有100M大小)。

经过N久的折腾,才发现原来redhat/centos6不再使用原来的mkinitrd,而是使用dracut代替了,mkinitrd实际上只是调用dracut的功能。研究dracut才弄明白,如果只是生成用于grub引导本地硬盘上的linux,需要使用一个参数 --hostonly ,这样dracut就不会把过多不必要的模块加载到initramfs.img里,如下

dracut -f -v --hostonly -k '/lib/modules/3.0.32' ../initramfs-3.0.32.img 3.0.32
这是通过查阅kernel 编译安装的 make install 使用是执行的以下脚本实现的:
sh /path/to/kernel-source/linux-3.0.32/arch/x86/boot/install.sh 3.0.32 arch/x86/boot/bzImage System.map "/boot"

查阅arch/x86/boot/install.sh 文件, 它调用/sbin/installkernel ,然后是/sbin/new-kernel-pkg ,接着是/sbin/dracut

通过分析 /sbin/new-kernel-pkg ,其中290行有如下代码

  if [ -n "$dracut" ]; then     tool="/sbin/dracut $dracuthostonly -f $initrdfile $version"   else   tool="/sbin/mkinitrd --allow-missing -f $initrdfile $version"   fi
其中变量$dracuthostonly的值是 -H ,在dracut参数里与 --hostonly 同义。

问题至此得解。


你可能感兴趣的:(centos,redhat,mkinitrd,dracut)