LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 849|回复: 11

对initrd.img有研究的请进来看看。

[复制链接]
发表于 2005-3-9 19:43:03 | 显示全部楼层 |阅读模式
最近在一台RH9上编译2.6.11内核,把EXT2打入内核,把EXT3和JBD编成模块,启动不能成功,
用论坛里6692975兄介绍的方法:
cat initrd.img |gzip -d >initrd
mount -o loop -t ext2 initrd tmp/
看了下initrd.img里linuxrc里的内容,没有insmod /lib/jbd.o 和insmod /lib/ext3.o这样的语句,也许是启动不能成功的原因,因为RH9自带的2.4.20-8的initrd.img里是有这两行语句的。

但我在LFS上编译2.6.11的内核,也是这样做的,把EXT2打入内核,把EXT3和JBD编成模块,看了看initrd.img里linuxrc的内容,也是没有insmod /lib/jbd.o 和insmod /lib/ext3.o这样的语句,试着重启,大概是initrd.img有些问题,不能成功,但如果把
/boot/grub/menu.lst里root那一行改成root=/dev/hda11这样的样子,并且去掉initrd /boot/initrd.img这一行语句,不用那个img,直接用内核vmlinuz启动,启动也能成功,那系统是什么时候自动挂载的jbd.ko和ext3.ko呢?

另外,那台RH9编译内核2.6.11,initrd.img就是不能挂载EXT3和JBD模块,不知什么原因,我以前在其它RH9机器上能做成的,不一定把EXT3打入内核,能行的啊,
郁闷。。。。。。。。。。。。
发表于 2005-3-9 21:16:38 | 显示全部楼层
嚴重關注! 頂!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-9 23:52:36 | 显示全部楼层
但我在LFS上编译2.6.11的内核,也是这样做的,把EXT2打入内核,把EXT3和JBD编成模块,看了看initrd.img里linuxrc的内容,也是没有insmod /lib/jbd.o 和insmod /lib/ext3.o这样的语句,试着重启,大概是initrd.img有些问题,不能成功,但如果把
/boot/grub/menu.lst里root那一行改成root=/dev/hda11这样的样子,并且去掉initrd /boot/initrd.img这一行语句,不用那个img,直接用内核vmlinuz启动,启动也能成功,那系统是什么时候自动挂载的jbd.ko和 ext3.ko呢?

看到dmesg里有这么一句:EXT2-fs warning (device hda11): ext2_fill_super: mounting ext3 filesystem as ext2
看来它挂载我的/是当作了ext2来挂载的。


那个RH9里为什么initrd.img就是不能挂载EXT3和JBD模块,还是找不到原因。
回复 支持 反对

使用道具 举报

发表于 2005-3-10 11:47:57 | 显示全部楼层
按照RH9默认的initrd.img重新修改下你的2.6.11的initrd.img
加上insmod /lib/ext3.ko 试试能不能加载。
看看你的/lib/modules/2.6.11/modules.dep这里有没有ext3.ko。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-11 18:33:02 | 显示全部楼层
/lib/modules/2.6.11/modules.dep这里有ext3.ko !!!
但是initrd.img里的linuxrc里就是没有ext3.ko和jbd.ko,
我把insmod /lib/ext3.ko
      insmod /lib/jbd.ko
      insmod /lib/ext3.o
      insmod /lib/jbd.o
都加进去了,开机时说找不到上面这些模块,又失败了。

我现在怀疑这个机器的硬件是不是有什么问题,谢谢老兄了,唉,不打算再费脑筋了。
回复 支持 反对

使用道具 举报

发表于 2005-3-11 21:46:44 | 显示全部楼层
initrd.img就是临时放modules的启动虚拟盘,要把ext3.ko和jbd.ko加到initrd.img里面才可以
2.4内核的我以前做过,man mkinitrd看看;难道2.6内核有改变?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-11 21:54:29 | 显示全部楼层
要把ext3.ko和jbd.ko加到initrd.img里面才可以

怎么手动加到里面?我的modules.dep里有这两个模块的,但mkinitrd做完后,initrd.img里就是没有。

我在家里的RHEL4上试了一下,编译2.6内核,完全是成功的,以前在其它RH9机器上编译initrd.img也能成功启动,就是在这一台RH9上,总是不行,一开始我以为编译内核选项不对,但检查之后,我的RAMdisk和initrd ramdisk都选成Y了,没错啊。。
郁闷。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2005-3-11 22:00:40 | 显示全部楼层
mkinitrd --preload=xxxxxx
mkinitrd --help:p
回复 支持 反对

使用道具 举报

发表于 2005-3-12 10:07:00 | 显示全部楼层
Post by Dragonsoar
/lib/modules/2.6.11/modules.dep这里有ext3.ko !!!
但是initrd.img里的linuxrc里就是没有ext3.ko和jbd.ko,
我把insmod /lib/ext3.ko
      insmod /lib/jbd.ko
      insmod /lib/ext3.o
      insmod /lib/jbd.o
都加进去了,开机时说找不到上面这些模块,又失败了。

我现在怀疑这个机器的硬件是不是有什么问题,谢谢老兄了,唉,不打算再费脑筋了。


修改了linuxrc加入insmod *
没有把这几个模块放在initrd.img的/lib下吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-13 08:21:05 | 显示全部楼层
多谢提醒,把jbd.ko和ext3.ko放入了initrd.img的/lib后,成功启动。
非常高兴!!!!!!!!!!!!!!!!!!!!!!!终于解决了!!!!!!

还有一个问题,我在cat initrd.img | gzip -d > initrd 这一步中把initrd.img解开成initrd,修改完后压缩initrd怎样把它压缩成initrd.img,我用gzip -9 initrd压缩成的是initrd.gz。虽说是一样的,但成不了.img的文件名,用mv改名行不?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表