initrd文件中没有磁盘阵列驱动导致系统无法启动的处理

来源:互联网 发布:mac系统用什么美图软件 编辑:程序博客网 时间:2024/05/16 19:12

 

initrd文件中没有磁盘阵列驱动导致系统无法启动的处理

Hansel He <hansel@163.com>
2010-3-5

一、问题现象:
今天公司的开发服务器(Redhat Enterprise Linux 5)突然启动不了,显示的下面的出错信息并不断重启。

Couldn't find all physical volumns for volum group VolGroup00.
Couldn't find device with uuid 'JNpxxxxxxxxxxxxxxxxxxxxxxxxx'.
Volumn group "VolGroup00" not found

二、分析:
该服务器已经稳定运行一年多,第一次出现无法启动的问题。回想这段时间对服务器没有做什么修改,只
是为了扩容增加了磁盘阵列,把磁盘阵列的空间划到了LVM的VolGroup00里面。而且该服务器使用VolGroup00
作为根文件系统,因此应该是Linux的Ramdisk镜像文件initrd中没有包含磁盘阵列的驱动导致系统启动的
时候不能识别新增加的物理卷。

三、解决方法
解决方法可以有2个:一是不把磁盘阵列并入VolGroup00卷组,重新创建卷组,在启动后挂载到一个目录上
使用;二是重新制作Ramdisk镜像文件,把磁盘阵列的驱动加进去。考虑到卸载磁盘阵列需要使用一个空闲
分区倒数据,会比较麻烦,因此采用了第二种方法,步骤如下。

1、使用Redhat Enterprise Linux 5安装光盘启动,按F5进行修复模式,输入linux rescue回车;
2、可选驱动网卡,这样可以远程操作或者通过网络复制文件;
3、选择搜索磁盘上的Linux系统,这样启动完成后会把磁盘上的Linux系统的根文件系统挂在/mnt/sysimage目录;
4、启动完成后,输入chroot /mnt/sysimage,切换根目录到原来的Linux系统的根目录;
5、可选启动sshd方便远程操作: #service sshd start
6、备份原来的initrd文件:
    #cd /boot
    #cp initrd-2.6.18-8.el5xen.img initrd-2.6.18-8.el5xen.img.bak
7、制作新的initrd文件,注意由于安装光盘的linux是2.6.18-92.el5,而原先的服务器是2.6.18-8.el5xen,因此
   使用mkinitrd命令制作时要用2.6.18-8.el5xen作为Linux版本号,否则提示“No modules available”:

[root@localhost boot]# mkinitrd -v -f initrd-2.6.18-8.el5xen.img $(uname -r)
No modules available for kernel "2.6.18-92.el5".
[root@localhost boot]# mkinitrd -v -f initrd-2.6.18-8.el5xen.img 2.6.18-8.el5xen
Creating initramfs
Looking for deps of module uhci-hcd
Looking for deps of module ohci-hcd
Looking for deps of module ehci-hcd
Looking for deps of module ext3: jbd
Looking for deps of module jbd
Looking for driver for device cciss/c0d0p2
Looking for driver for device cciss/c0d1p1
Looking for driver for device sdb
Looking for deps of module pci:v00001077d00002432sv0000103Csd00007040bc0Csc04i00: scsi_mod scsi_transport_fc qla2xxx
Looking for deps of module scsi_mod
Looking for deps of module sd_mod: scsi_mod
Looking for deps of module scsi_transport_fc: scsi_mod
Looking for deps of module qla2xxx: scsi_mod scsi_transport_fc
Looking for deps of module cciss: scsi_mod
Looking for deps of module ide-disk
Looking for deps of module dm-mod
Looking for deps of module dm-mirror: dm-mod
Looking for deps of module dm-zero: dm-mod
Looking for deps of module dm-snapshot: dm-mod
Using modules:  /lib/modules/2.6.18-8.el5xen/kernel/drivers/usb/host/uhci-hcd.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/usb/host/ohci-hcd.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/usb/host/ehci-hcd.ko /lib/modules/2.6.18-8.el5xen/kernel/fs/jbd/jbd.ko /lib/modules/2.6.18-8.el5xen/kernel/fs/ext3/ext3.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/scsi_mod.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/sd_mod.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/scsi_transport_fc.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/qla2xxx/qla2xxx.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/block/cciss.ko  /lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-mod.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-mirror.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-zero.ko /lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-snapshot.ko
/sbin/nash -> /tmp/initrd.Nj1935/bin/nash
/sbin/insmod.static -> /tmp/initrd.Nj1935/bin/insmod
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/usb/host/uhci-hcd.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/uhci-hcd.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/usb/host/ohci-hcd.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/ohci-hcd.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/usb/host/ehci-hcd.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/ehci-hcd.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/fs/jbd/jbd.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/jbd.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/fs/ext3/ext3.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/ext3.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/scsi_mod.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/scsi_mod.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/sd_mod.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/sd_mod.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/scsi_transport_fc.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/scsi_transport_fc.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/scsi/qla2xxx/qla2xxx.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/qla2xxx.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/block/cciss.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/cciss.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-mod.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/dm-mod.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-mirror.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/dm-mirror.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-zero.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/dm-zero.ko' [elf32-i386]
copy from `/lib/modules/2.6.18-8.el5xen/kernel/drivers/md/dm-snapshot.ko' [elf32-i386] to `/tmp/initrd.Nj1935/lib/dm-snapshot.ko' [elf32-i386]
/sbin/lvm.static -> /tmp/initrd.Nj1935/bin/lvm
/etc/lvm -> /tmp/initrd.Nj1935/etc/lvm
`/etc/lvm/lvm.conf' -> `/tmp/initrd.Nj1935/etc/lvm/lvm.conf'
Adding module uhci-hcd
Adding module ohci-hcd
Adding module ehci-hcd
Adding module jbd
Adding module ext3
Adding module scsi_mod
Adding module sd_mod
Adding module scsi_transport_fc
Adding module qla2xxx
Adding module cciss
Adding module dm-mod
Adding module dm-mirror
Adding module dm-zero
Adding module dm-snapshot
[root@localhost boot]#

其中最重要的就是磁盘阵列的驱动模块:scsi_transport_fc和qla2xxx,可以看到已经打包到initrd文件了。

8、可选增加grub菜单,方便以后切换到不用磁盘阵列的initrd文件:

[root@localhost boot]#vi grub/grub.conf

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/cciss/c0d0
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-8.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.el5 
        module /vmlinuz-2.6.18-8.el5xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
        module /initrd-2.6.18-8.el5xen.img


title Red Hat Enterprise Linux Server (2.6.18-8.el5xen) (no iscsi)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.el5 
        module /vmlinuz-2.6.18-8.el5xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
        module /initrd-2.6.18-8.el5xen.img.bak

9、重启,系统OK

10、比较新旧initrd文件的差异:
    initrd文件使用了gzip压缩,通过gzip命令和cpio命令可以展开initrd文件,不过需要先改名。
    # cd ~/temp
    # cp /boot/initrd-2.6.18-8.el5xen.img     initrd.gz
    # cp /boot/initrd-2.6.18-8.el5xen.img.bak initrd.bak.gz
    # mkdir img img.bak
    # gzip -d initrd.gz
    # gzip -d initrd.bak.gz
    # cd img
    # cpio -i < ../initrd
    # cd ../img.bak
    # cpio -i < ../initrd.bak

    通过比较img文件夹内容和img.bak文件内容发现差异有2点:
    a) lib目录下多了2个文件:scsi_transport_fc.ko 和 qla2xxx.ko   
    b) init文件增加了加载这2个模块的命令:
        echo "Loading scsi_transport_fc.ko module"
 insmod /lib/scsi_transport_fc.ko
 echo "Loading qla2xxx.ko module"
 insmod /lib/qla2xxx.ko

 

  
11、参考资料
    a)如何重建系统的启动ramdisk镜像-initrd.img?  http://kbase.redhat.com/faq/docs/DOC-11839 

 

原创粉丝点击