问题发生
最近在对一批老系统进行P2V,但天有不测风云,总是有这样的问题困扰着你和我,系统迁移后无法正常启动内核,并给出下面信息:
ERROR: /bin/insmod exited abnormally (pid 507)
No volume groups found
Volume group "VolGroup_ID_5090" not found
ERROR: /bin/lvm exited abnormally (pid 534)
mount: error 6 mounting ext3
mount: error 2 mounting none
switchroot: mount failed: 22
umount /initrd/dev failed: 2
kernel panic - not syncing: Attempted to kill init!
一时搞得我束手无策,经过反复测试从VMware社区找到了解决方法
解决方法
-
挂载系统镜像盘进入恢复模式
输入:linux rescue
后回车Enterboot: linux rescue
Choose a Language =>
English
Keyboard Type =>us
Setup Networking =>No
Recue =>Continue
-
切换根到目标系统目录
chroot /mnt/sysimage
-
修改
/etc/modprobe.conf
文件(确保它是空白的,如果需要,你可以先备份)
修改成下面内容alias scsi_hostadapter mptbase alias scsi_hostadapter1 mptscsih alias scsi_hostadapter2 mptscsih alias scsi_hostadapter3 mptscsih alias scsi_hostadapter4 mptscsih
-
确定GRUB所引导内存文件系统版本
cat /boot/grub/grub.conf
找到类似
initrd /initrd-<内核版本>.img
记下内核版本号下面要用 -
重新构建
initramfs
文件(如果需要,可以先备份)mkinitrd -v -f /boot/initrd-<内核版本>.img <内核版本>
-
重启你的系统进行验证
输入命令exit
两次,即可自动重启
经过我的验证,在第3步加到第二行就行了,我的情况可用!
新的解决方法
最近由遇到新的问题,initrd
也重新构建了,各个引导项中磁盘我也改成了常规的绝对路径(如:/dev/sda1
,不是使用UUID
或LABLE
),但内核还是报找不到/dev/root
文件系统,经过反复探索,发现是内核损坏,只能重新安装内核。
-
挂载系统镜像盘进入恢复模式
输入:linux rescue
后回车Enterboot: linux rescue
Choose a Language =>
English
Keyboard Type =>us
Setup Networking =>No
Recue =>Continue
-
切换根到目标系统目录
chroot /mnt/sysimage
确认各个文件分区能正确挂载
-
退回光盘修复系统(伪Linux)
exit
-
挂载系统安装光盘(必须与目标系统版本一致)
mount /dev/hda /mnt/soure
-
重新安装内核包,修复受损内核
rpm -ivh /mnt/soure/RPMS/Asianux/kernel-2.6.18-238.2.AXS3.x86_64.rpm --root=/mnt/sysimage --force
其他发行版的也适用,只要选择相应的安装包即可,命令可能会不同,但基本思路就这样
-
重新引导验证是否搞定
我这边遇见了很多这样的情况,就是内核和引导镜像都损坏,所有这时我会和上面的步骤一起做,这个没有先后循序。
如果问题依旧
- 检查自己的步骤是否正确
先使自己保持冷静,我常常因这些问题而感到焦虑,并自以为是的认定所做的每一步是正确的,但到最后发现往往就错在那些基本的操作上。 - 确定GRUB配置
先查看/boot/grub/grub.conf
默认引导版本,务必确保是第4
步构建的版本。这个路径是你使用chroot
命令后的路径,如果没事用这个命令,应该为<你磁盘的挂载点>/boot/grub/grub.conf
- 确定构建是否正确
因恢复模式使用的是sh
作为默认shell,默认环境变量又没有设置,导致你文件构建在其他目录,使得grub引导是还是用的原来的文件。 - 问题的确定
我总结了一下,大部分问题主要出现在GRUB
、内核
、initrd镜像
、文件系统
、fstab
等,如果一开机什么都没有,那么重装GRUB
就可以了,还有些就是grub.conf
没有正确的标识根文件系统所在分区或标识错误,如使用lable
标签方式,但P2V过来后标签信息丢失。还有就是使用了UUID
方式,转换过来后UUID
被改变,都是导致系统服务器正常启动;内核损坏这种概率虽小,但还是会发生;最多的就是initrd镜像
了,因为原来的是为了适应原有的硬件所构建相关的驱动模块,大多都是磁盘驱动模块出的问题,适合VMware SCSI接口驱动的推荐mptscsih
模块,可以把原有的模块禁用掉,因为磁盘驱动都没有,所有Linux肯定找不到文件系统,所以系统才会报错;还有就是文件系统的问题,这类主要发生使用了LVS
文件系统,新版本对块支持比较好,其他的就是fstab
的配置了,这个大多可以进修复模式进行确认和修改,主要的还是关于uuid
和lable
两种识别。