Chinaunix
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
[打印本页]
作者:
grub007
时间:
2003-08-26 13:28
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
grub007
2003年08月26日13:30分 北京
1、initrd img文件分析
Linux不能启动的很多原因都直接或者间接与initrd-x.x.x.img文件有关系,以我的系统为例(具有通用性):initrd-2.4.21-AS.2smp.img,为多CPU内核。
我不打算详细分析LINUX的具体启动过程,这样的文章网上很多,只是说说initrd-x.x.x.img文件的作用:initrd-x.x.x.img主要是加载文件系统及scsi设备的驱动。
等我们看完了initrd-x.x.x.img文件包含的具体的内容就知道了:
initrd-x.x.x.img首先是一个用gzip压缩的文件,因为内核里包含解压缩的代码,这主要是为了制作启动盘,因为启动盘只有1.44M,这个文件的原始大小
是2.9M左右,压缩后大概3、4百K。这个文件使用mkinitrd命令产生。
要看到initrd-x.x.x.img里面的内容,首先是解压该文件,由于gunzip解压的文件有扩展名要求,所以:
mv initrd-x.x.x.img initrd-x.x.x.img.gz
gunzip initrd-x.x.x.img.gz
这样得到一个解压过后的img文件:
[root@localhost root]# file initrd-2.4.21-AS.2smp.img
initrd-2.4.21-AS.2smp.img: Linux rev 1.0 ext2 filesystem data
然后可以mount该文件了:
mount -o loop initrd-2.4.21-AS.2smp.img /mnt/floppy/
到/mnt/floppy/看看:
[root@localhost root]# cd /mnt/floppy/
[root@localhost floppy]# ls
bin dev etc lib linuxrc loopfs proc sbin sysroot
这是大家熟悉的LINUX根目录的部分列表,其中主要目录的列表如下:
bin:
[root@localhost bin]# ls
insmod modprobe nash
这些文件是用来加载模块,nash用来执行脚本linuxrc ;
dev:
[root@localhost dev]# ls
console null ram systty tty1 tty2 tty3 tty4
是一些主要的设备;
lib:
[root@localhost lib]# ls
ips.o jbd.o scsi_mod.o sd_mod.o xfs.o
这是系统启动前必需要加载的模块,因机器不同而不同;
其他目录是空的
下面看看linuxrc这个脚本的内容:(行号是自己添加的)
1 #!/bin/nash
2 echo "Loading scsi_mod.o module"
3 insmod /lib/scsi_mod.o
4 echo "Loading sd_mod.o module"
5 insmod /lib/sd_mod.o
6 echo "Loading ips.o module"
7 insmod /lib/ips.o
8 echo "Loading jbd.o module"
9 insmod /lib/jbd.o
10 echo "Loading xfs.o module"
11 insmod /lib/xfs.o
12 echo Mounting /proc filesystem
13 mount -t proc /proc /proc
14 echo Creating block devices
15 mkdevices /dev
16 echo Creating root device
17 mkrootdev /dev/root
18 echo 0x0100 >; /proc/sys/kernel/real-root-dev
19 echo Mounting root filesystem
20 mount -o defaults --ro -t xfs /dev/root /sysroot
21 pivot_root /sysroot /sysroot/initrd
22 umount /initrd/proc
其中:
1-11行是加载模块
13行安装内核文件系统
15-18行创建设备
19行安装根文件系统,这是系统第一次安装根文件系统,这时候还处在内核态,还没有进入用户态,所以为只读模式;进入用户态后需要再次安装根文件系统为读写模式。
从这个脚本可以看出initrd-x.x.x.img文件的重要性,如果在这里安装根文件系统失败(比如驱动程序不正确,scsi设备没有驱动起来等),内核就无法读取磁盘的内容,便不能继续引导。
2、制作安装程序不支持的根文件系统
一般LINUX发行版的安装程序都不支持不常用的文件系统如Minix、xfs等,如果想要把根文件系统做成上述文件系统,可以按照如下步骤:(以xfs为例,原始的更文件系统为ext3):
第一步:
解压你的initrd-x.x.x.img文件,最好不要在原来的目录/boot下进行,可以先建立一个临时目录/root/initrd,把initrd-x.x.x.img拷贝过去,然后按照1中的方法解压并mount。(安装到/mnt/floppy)
第二步:
拷贝xfs.o模块到lib目录并删除原来的文件系统模块:
cp /lib/modules/2.4.21-AS.2smp/kernel/fs/xfs/xfs.o /mnt/floppy/lib/ 其中2.4.21-AS.2smp是你的内核版本目录
rm -rf ext3.o
第三步:
修改linuxrc脚本,仅把其中的所有的ext3.o替换成xfs.o
第四步:
卸载initrd-x.x.x.img,并压缩initrd-x.x.x.img文件
umount /mnt/floppy
gzip -9 initrd-x.x.x.img 得到initrd-x.x.x.img.gz文件,推荐使用-9参数取得较好的压缩效果。
mv initrd-x.x.x.img.gz initrd-x.x.x.img 重命名initrd-x.x.x.img.gz为initrd-x.x.x.img
第五步:
制作xfs分区
先用fdisk新建一个分区如sda8或者hda8(或者用其他的工具),然后格式化成xfs:
mkfs.xfs /dev/sda8 -f
或
mkfs.xfs /dev/hda8 -f
第六步:
mount xfs分区(比如mount到/sda
,并把当前根目录下除/proc下以外的东西拷贝到xfs分区里,
第七步:
把制作好的initrd-x.x.x.img文件拷贝到xfs分区上的boot目录下覆盖原有的initrd-x.x.x.img文件
第八步:
修改/sda8/etc/fstab文件,把其中的根设备改成sad8(或者hda
,相应的文件系统类型改成xfs
如果使用lilo,修改/sda8/etc/lilo.conf文件,把其中的根设备换成sad8(或者hda
,然后chroot到/sda8,重写lilo
使用grub的情况类似;
重启就好啦!
作者:
nuliyidian
时间:
2003-08-29 10:44
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
好 东东!
请教一下:我重新编译kernel后那个initrd***.img文件怎么生成!
用#mkinitrd initrd.2.4.10.img 2.4.10 后面这个2.4.10是指一个目录吗?是从哪里找?
提示:no module aicx7**** found in kernel 2.4.10是为什么?
作者:
marlborolj
时间:
2003-08-29 11:10
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
目录在/usr/src/
一般都是在/boot下看一下链接所对应的目录!!!
aic的scsi的驱动一般kernel都有,可能你把这个选项给去掉了
作者:
grub007
时间:
2003-09-01 14:41
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
2.4.10是对应的内核的版本号
作者:
marlborolj
时间:
2003-09-01 15:10
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
这个版本号不一定和uname -a显示是一样
作者:
love-centry
时间:
2003-09-06 16:41
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
好像在/lib/modules中有,但我编译了,没用!
作者:
love-centry
时间:
2003-09-07 08:14
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
sorry!有用的,但是要在grub.conf 中root=LABEL=/改成root=/dev/hdaX就可以了!
作者:
陶深
时间:
2003-09-30 13:05
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
请教 grub007 :
root filesystem是在 linuxrc时load上的,而且'/ ' 分区的disk是在安装linux时就格式化好的。那么格式化磁盘在什么地方(具体文件目录下)执行呢?
作者:
双眼皮的猪
时间:
2003-10-28 11:46
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
mkinitrd /boot/initrd-2.4.20.img 2.4.20
按照您的说法,2.4.20是版本号的话,我这里的错误提示是
/lib/modules/2.4.20 is not a directory
看来这里还要调用/lib/modules
请问之间的依赖性是怎么回事???
作者:
hello_unix
时间:
2004-02-09 10:09
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
顶
作者:
text2002
时间:
2004-03-25 12:49
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
up
作者:
Gerhalt
时间:
2004-04-13 14:10
标题:
initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统
看看你的uname -r
作者:
thinker2006
时间:
2006-06-24 13:36
令人回味的帖子!
作者:
cexoyq
时间:
2006-07-27 08:15
好贴留个名,好找些。呵呵。
作者:
wikingki
时间:
2006-07-27 23:38
好贴!
作者:
hunter_cao
时间:
2006-07-28 20:03
zhuang
作者:
asdfmaomao
时间:
2006-11-16 18:41
mkinitrd本来就是要根据/lib/module下的目录进行制作地!
不是/usr/src。错误的理解。编译完一个新内核之后会把新的需要的所有的模块放在/lib/module/下的相应新内核名的目录下地!
作者:
neilshi
时间:
2006-11-16 20:39
可是我在输入 mkinitrd /boot/initrd-2.6.17.13.img 2.6.17.13 时
得到的是 /sbin/mkinitrd: line 2812 : /boot/initrd-2.6.17.13/etc/fstab : No such file or directory
No '/' moutpoint specified in /boot/initrd-2.6.17.13/etc/fstab
请问这是怎么回事?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2