使用其他机器上的硬盘启动Centos5系统panic问题解决方法

来源:互联网 发布:动力节点java视频下载 编辑:程序博客网 时间:2024/05/18 18:14



将一块包含有RHEL5.6系统的硬盘换到另外一台pc时,发生下面panic情况

panic信息:

Unable to access resume device (/dev/sda2)
mount : could not find filesystem '/dev/root'
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init !

思路:
1.无法访问/dev/sda2,sda2是swap分区,将/etc/fstab中swap分区注释掉,尝试一下,发现没有作用。
2.猜测是不是没有驱动,无法使用sda硬盘:用可以启动该pc的硬盘启动,检查硬盘控制器驱动,
通过sysfs文件系统,发现sda对应的控制器该驱动时ata_piix.ko,检查另一块RHEL5.6的initrd文件解压方法
见下面,解压后发现它lib目录下的模块中没有ata_piix.ko这个驱动。判断原因可能就是因为这个。
3.将该驱动加入RHEL5.6的initrd文件中,从RHEL5.6系统的/lib/modules/`uname -r`/目录中搜索ata_piix.ko驱动,
将其加入initrd解压后的lib目录中,在initrd解压出的init文件中加入insmod 该模块的操作。使用压缩命令,生成
新的initrd文件,替换/boot下的旧文件。压缩命令见下面。
4.重启后发现又报了这样的错误:
insmod : error inserting '/lib/ata_piix.ko': -1 Unknown symbol in module
原因分析:插入模块失败,可能由于依赖性,检查RHEL5.6的/lib/modules/`uname -r`/目录总的modules.dep文件
发现ata_piix.ko依赖libata.ko和scsi_mod.ko,在initrd解压后的lib目录中检查时否有这两个驱动模块,在init文件
中将插入ata_piix.ko的命令放在插入libata.ko和scsi_mod.ko命令之后。
5.重启,成功开机!!


initrd解压方法:
方法1:
mkdir /tmp/initrd
cd /tmp/initrd
gzip -cd /boot/initrd-xxxxxxxxx.img | cpio -imd --quiet

方法2:
zcat  /boot/initrd-xxxxxxxxx.img | cpio -id

initrd压缩方法:
cd /tmp/initrd
find . | cpio -co | gzip -9 > /boot/initrd-xxxxxxxxx.img



解压缩ISO自带的initrd.img时遇到不知道initrd.img格式无法解压的问题,按照如下方法解决
initrd.img使用lzma高压缩比的工具压缩了!言归正转,开始
 
#yum 安装lzma软件,也可以在安装盘中找相关的4个包,devel包是不需要的,二种方法任选其一。
yum install  xz-lzma-compat
 
xz-4.999.9-0.3.beta.20091007git.el6.i686.rpm
xz-devel-4.999.9-0.3.beta.20091007git.el6.i686.rpm
xz-lzma-compat-4.999.9-0.3.beta.20091007git.el6.i686.rpm
xz-libs-4.999.9-0.3.beta.20091007git.el6.i686.rpm
 
#修改文件名,不修改它还不认。郁闷
mv initrd.img initrd.lzma
#解压,解压出来是一个initrd文件
lzma -d initrd.lzma 
#cpio解压得到所有的文件
cpio -ivmd < initrd 
 
下面是模拟修改驱动,当然我不是修改CDROM驱动哈
cd ./modules/2.6.32-220.el6.i686/kernel/drivers/cdrom
#增加模块
gunzip  cdrom.ko.gz
 
gzip  cdrom.ko cdrom.ko.gz
 
显示模块CDROM的信息
modinfo cdrom.ko 
 
#修改相应的CDROM模块相关文件(根据自己的需要增加相应文件的信息)
cd /root/wj/modules/2.6.32-220.el6.i686 
ll  modules.*
-rw-r--r-- 1 root root 221143 Dec 13  2011 modules.alias
-rw-r--r-- 1 root root 207574 Dec 13  2011 modules.alias.bin
-rw-r--r-- 1 root root   1376 Dec  7  2011 modules.block
-rw-r--r-- 1 root root  39594 Dec 13  2011 modules.dep
-rw-r--r-- 1 root root  61932 Dec 13  2011 modules.dep.bin
-rw-r--r-- 1 root root     68 Dec  7  2011 modules.drm
-rw-r--r-- 1 root root     29 Dec  7  2011 modules.modesetting
-rw-r--r-- 1 root root   1887 Dec  7  2011 modules.networking
-rw-r--r-- 1 root root  74502 Dec  7  2011 modules.order
-rw-r--r-- 1 root root 131724 Dec 13  2011 modules.symbols
-rw-r--r-- 1 root root 164303 Dec 13  2011 modules.symbols.bin
 
#打包
find . |cpio -o   -H newc >initrd
lzma initrd  initrd.lzma
mv initrd.lzma initrd.img
 
希望光盘上安装就把文件复制到ISO中重新刻录,
也可以选用PXE,直接覆盖安装就可以了!
 
剩下的就是测试了!

0 0