记一次错误卸载软件包导致Linux系统崩溃的修复解决过程

首先问题产生的缘由很简单,是我一同事在安装oracle一套软件时,按照要求需要binutils软件包的32位版本,然而在Oracle Linux已经装有64位,按理说是可以安装i686的,我猜应该是32位的版本低于这个已有的64位所以导致冲突而安装失败,因此同事就用yum remove binutils,这个命令也奇葩,由于是root权限导致依赖于它的200多个软件包也被卸载,最终导致网络断开,系统崩溃,在vSphere虚拟机上重新启动发现再也起不来。下面看问题:

1. Kernel panic - not syncing: Attempted to kill init!


这个错误时在重新启动Oracle Linux一开始就出现,查阅的相关资料得知Kernel panic问题一般是由驱动模块终端处理终端问题导致的(不懂。。。),一开始我以为是驱动程序依赖于binutils导致被卸载,因此第一反应是想办法把缺失的软件装回去。实际上,是由于安全访问控制模块selinux的问题,参考类似问题。于是检查vi /etc/selinux/config时发现SELINUX=disables,拼写错误,应为disabled
当再次启动没再出现该错误时,我高兴的认为原来这么简单就帮同事解决了,事实这根本还没到200多个软件包缺失而导致系统崩溃那一步。

2. 系统启动加载条完成后,一直hang住不动

这无疑要使用LiveCD修复系统了,参考Ultimate method to install package from linux rescue modeUsing Rescue Mode to Fix..Problems。因为知道出问题前做过什么操作,下面直接上解决问题的过程。

2.1 将系统DVD安装镜像加载到光驱

再次重启就自动进入安装界面,我们当然选择rescue mode

一路按照提示确定(可以不配置network,这里就不贴图了,很简单),最终会提供给用户一个shell终端,对应的是从DVD光驱加载进来的系统,执行chroot /mnt/sysimage才会进入到原损坏的Linux系统,还好yumrpm命令还可以使用,悲剧的是我并不知道yum remove命令卸载了哪些软件包。

2.2 安装缺失的软件包

这里得谢天谢地yum命令的安装卸载日志/var/log/yum.log,这个日志里清楚的记录了installederased的所有软件包,用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


显然,文件系统损坏。根据提示输入root密码后可以进入到shell中,网上有办法说执行fsck命令来修复分区,又说且不能是mounted状态,但无论我怎么去fsck.ext4 /dev/mapper/vg_fusion_lv_u1,提示

WARNING!!!  The filesystem is mounted.   if you continue you ***WILL***
cause ***SEVERE*** filesystem damage`

Do you really want to continue (y/n)? yes

fsck.ext4: No such file or directory while trying to open /dev/mapper/vg_fusion_lv_u1

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

听起来好像还挺严重的,我之前猜想的是不是反复的开关电源来重启导致lvm文件系统corrupt,但事实我发现/dev/mapper/vg_fusion_lv_u1不存在,但lv_fusion_lv_root却完好,执行lvdisplay发现这个命令根本不存在,这才发现原来lvm2软件没有安装(难道是第2部分安装少许出错?)。
这下容易多了,反正现在系统不借助rescue mode就可以起来,重新安装软件包,但是此时的整个文件系统是read only,有两个办法可以解决:

  1. mount -o remount,rw /
    重新挂载根分区为读写,vi /etc/fstab注释掉挂载/u1的那条记录,此时会正常启动,只是有一个文件系统没有挂载,但可以正常安装缺失的lvm2软件,不妨多执行几遍2.2的安装命令。然后手动挂载mount /dev/mapper/vg_fusion_lv_u1 /u1应该就没问题了。记得改回/etc/fstab。
  2. 2.2步骤类似,进入rescue modechroot,重新执行awk '{print "yum install -y ",$5}' /var/log/yum.log.bak |sh > /root/yum_install.log,确保没有报错且已安装lvm。

这下问题总是解决了,避免了删除系统的灾难(测试环境)。

4. 总结

回头去看这三个问题,其他它们是各自独立的

  • 第1个问题,是由于设置selinux有人拼写错误,哪怕没做后续的任何操作,重启系统就会启动不了,是早已存在到目前才发现。也有人说遇见过同样的Kernel panic错误但尝试各种办法都难以解决的,这就看具体问题具体分析了。
  • 第2个问题,是真真切切错误卸载重要软件包,导致系统崩溃,修复系统的方法自然也就是利用原镜像在rescue mode下把该装的都装回去,前提是yum.log日志存在,万幸没有执行过yum clean all
  • 第3个问,题实际文件系统并没有损坏,还是lvm2缺失,但是此处必须小心,免得SEVERE filesystem damage,那么修复过程就没意义了。

以后处理其他系统故障时也可使用类似的方法修复,Redhat、CentOS、OracleLinux、Ubuntu等都适用。

时间: 2024-12-19 08:50:25

记一次错误卸载软件包导致Linux系统崩溃的修复解决过程的相关文章

I.MX6 MAC Address 导致的系统崩溃

/**************************************************************************** * I.MX6 MAC Address 导致的系统崩溃 * 说明: * 修改了I.MX6的MAC地址之后,忘了提前设置好MAC地址,结果系统崩溃了,通过 * Logcat能看到更多的详细信息,这里就不贴出来了. * * 2016-7-26 深圳 南山平山村 曾剑锋 ***************************************

Linux系统无法使用访问MySQL解决方法

  Linux系统无法使用访问MySQL解决方法.MySQL是最为常见的关系型数据库管理系统,不过有不少用户在使用过程中也会遇到一些小问题,有Linux系统用户发现,在Linux系统无法访问MySQL,为什么会造成这样原因呢?又要怎么解决呢?让我们一起来寻找答案吧. Linux 1.问题及异常 ThreadPoolAsynchronousRunner - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@75d6

分辨率过高导致xp系统黑屏的解决方法

  分辨率过高导致xp系统黑屏的解决方法           首先在开机的时候按F8进入windows高级选项菜单,选择启用VGA模式进入系统. 然后在显示属性中调整适合自己的电脑的屏幕分辨率即可.

win7配置文件不正确导致系统崩溃无法使用的解决方法

  win7配置文件不正确导致系统崩溃无法使用的解决方法           解决方法如下: 1.当电脑出现系统崩溃的情况时,我们可以在重新启动电脑的时候,找到相关的修复方案. 2.在启动的过程中找到启动修复的功能按钮,然后对我们的电脑系统进行修复,来完成修复系统崩溃. 3.然后对我们的电脑进行系统的修复的相关方案,如下图所示对我们的电脑进行重镜像修复. 4.然后可以进入到启动设置的页面中,对电脑的系统启动进行设置,防止启动过多导致电脑系统崩溃. 5.如果以上操作还是不能够帮助我们修复电脑系统修

Linux系统下mysqlcheck修复数据库命令(详解)_Mysql

mysqlcheck客户端工具可以检查和修复MyISAM表,还可以优化和分析表. 实际上,它集成了mysql工具中check.repair.analyze.optimize的功能. 有3种方式来调用mysqlcheck: shell> mysqlcheck[options] db_name [tables] shell> mysqlcheck[options] ---database DB1 [DB2 DB3...] shell> mysqlcheck[options] --all--d

让Linux系统崩溃最快速的方法

现象:   在安装HP硬件监控(hpasmcli)提示需要依赖Glibc-2.7,而本机的是Glibc-2.5,看来得升级Glibc了,可惜在升级时又出现了更多的依赖问题,想到在其他服务器上安装hpasmcli时很顺利,就想到将其他服务器的glibc库文件直接拷贝到本机尝试,涉及的文件有:   /lib/libc-2.5.so  # 32位系统  /lib64/libc-2.5.so # 64位系统    因为我操作的服务器系统是64位的,故在覆盖/lib64/libc-2.5.so文件的瞬间,

linux系统崩溃 数据恢复问题

问题描述 linux系统(版本不详),PHP+mysql+apache(其他未知) 系统环境都不是我们搭建的早上发现网站不能打开,远程连不上,询问机房答复系统进不了,其他信息无....问题:如果shell进不去,硬盘分区全部破坏了,数据怎么备份?关键是此服务器不归我们管,so所有数据都没有备份过....现在也看不到错误信息,想听一下大家的意见!!!希望不是硬盘坏了!!!问题补充:谢谢qichunren的关注!现在的另一种可能性服务器本身出了问题,听机房描述就在开机的时候跳不过去.感觉dell的服

Linux系统“死机”时解决方法_unix linux

如果问题能够再现,那么问题已经解决 80% 了.对于操作系统核心而言,如果有问题的再现方法,那么可以说是已经解决 99% 了.经常遇到的问题是系统可以正常运行一段时间,然后死机.如果不好再现问题,那么只有根据死机现场遗留的东西来进行分析了.  如果系统没有死干净,比如磁盘中断和文件系统是好的,那么也许能有日志信息保留在文件中,不过这样的好运气我是从来没有遇到过的.如果键盘中断还能响应 (按下Num Lock,可以看见键盘小灯亮灭),那么运气就算是足够好了,这时可以祭出 sysrq 大法,同时按下

Linux系统无法使用访问MySQL解决教程

  1.问题及异常 ThreadPoolAsynchronousRunner - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@75d634ea -- APPARENT DEADLOCK!!! Complete Status: Managed Threads: 3 Active Threads: 3 Active Tasks: 2.查找原因 费劲周知,确定是MySQL权限的问题 3.解决过程 1> mysql