摘要:第个问题,是真真切切错误卸载重要软件包,导致系统崩溃,修复系统的方法自然也就是利用原镜像在下把该装的都装回去,前提是日志存在,万幸没有执行过。第个问,题实际文件系统并没有损坏,还是缺失,但是此处必须小心,免得,那么修复过程就没意义了。
首先问题产生的缘由很简单,是我一同事在安装oracle一套软件时,按照要求需要binutils软件包的32位版本,然而在Oracle Linux已经装有64位,按理说是可以安装i686的,我猜应该是32位的版本低于这个已有的64位所以导致冲突而安装失败,因此同事就用yum remove binutils,这个命令也奇葩,由于是root权限导致依赖于它的200多个软件包也被卸载,最终导致网络断开,系统崩溃,在vSphere虚拟机上重新启动发现再也起不来。下面看问题:
1. Kernel panic - not syncing: Attempted to kill init!
这无疑要使用LiveCD修复系统了,参考Ultimate method to install package from linux rescue mode或Using Rescue Mode to Fix..Problems。因为知道出问题前做过什么操作,下面直接上解决问题的过程。
2.1 将系统DVD安装镜像加载到光驱再次重启就自动进入安装界面,我们当然选择rescue mode:
一路按照提示确定(可以不配置network,这里就不贴图了,很简单),最终会提供给用户一个shell终端,对应的是从DVD光驱加载进来的系统,执行chroot /mnt/sysimage才会进入到原损坏的Linux系统,还好yum和rpm命令还可以使用,悲剧的是我并不知道yum remove命令卸载了哪些软件包。
2.2 安装缺失的软件包
这里得谢天谢地yum命令的安装卸载日志/var/log/yum.log,这个日志里清楚的记录了installed和erased的所有软件包,用rpm是不可能了,因为270多个包的依赖关系难以解决,只能通过yum方式,而由于rescue模式没有配置网络,因此只能使用本地镜像源。
在rescue系统下挂载光驱到待修复系统中的/media目录 bash-4.1# mount /dev/cdrom /mnt/sysimage/media chroot进入待修复系统 bash-4.1# chroot /mnt/sysimage 手动编辑一个仓库源(真实待修复的系统) sh-4.1# cd /etc/yum.repos.d/ && vi Oracle-Media.repo [DVD-media] name=oracle-$releasever - Media baseurl=file:///media gpgcheck=0 enabled=1
建议只留Oracle-Media.repo文件,其他的.repo文件都mv成.bak,以防连接不了这些源而报错,虽然报错关系不大。
获取被依赖erased掉的软件列表
你可以将yum.log中多余的部分去掉,筛选出应该重新安装的packages: sh-4.1# cp /var/log/yum.log{,.bak} sh-4.1# less /var/log/yum.log.bak Oct 29 20:17:34 Erased: gcc-c++ Oct 29 20:18:44 Erased: gcc Oct 29 20:22:59 Erased: xorg-x11-drivers ... Oct 29 20:24:46 Erased: iputils Oct 29 20:24:46 Erased: udev Oct 29 20:24:46 Erased: initscripts Oct 29 20:24:46 Erased: hwdata Oct 29 20:24:46 Erased: module-init-tools Oct 29 20:24:48 Erased: binutils 下面一条命令应该要彻底解决问题了 sh-4.1# awk "{print "yum install -y ",$5}" /var/log/yum.log.bak |sh > /root/yum_install.log
保险起见,可以查看一下产生的日志文件。此时重启(记得拿出光盘)应该是修复问题了。但我遇见的问题还没完。
3. An error occurred during the file system check