在centos 6上自行编译linux内核,完成initrd文件的创建,并根据以前的经验创建mkinitrd
# mkinitrd-v ./init ramfs-3.0.32.img3.0. 32
但是,输出的消息与以前的版本不同,好像打包了很多模块,生成也很花时间,完成后,看到initramfs文件就有100多个OMG这样的大文件
不能放弃/boot目录。 /boot挂在另一个只有100M大小的分区下。
n经过长时间的辛苦,我们发现原来的redhat/centos6用的是dracut,而不是原来的mkinitrd。 mkinitrd实际上只是调用dracut的功能。 研究dracut后发现,如果只是生成在grub引导本地硬盘上使用的linux,要避免dracut将过多不必要的模块加载到initramfs.img中,这些参数包括
da cut-f-v-- host only-k '/lib/modules/3.0.32 ' ./init ramfs-3.0.32.img3.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 '
浏览到调用/sbin/installkernel的arch/x86/boot/install.sh文件
、/sbin/new-kernel-pkg、/sbin/dracut
通过分析/sbin/new-kernel-pkg,第290行包含以下代码
if [ -n '$dracut' ]; then
tool='/sbin/dracut $ dracuthostonly-f $ initrd file $ version '
else
tool='/sbin/mkinitrd-- allow-missing-f $ initrd file $ version '
fi
其中变量$dracuthostonly的值为-H,在dracut参数中等效于--hostonly。
问题必须解决到此为止。