赞
踩
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 同义。
问题至此得解。
延伸阅读coded by nessus
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。