简记:
由于某种原因将glibc库从2.12更新到2.14,期间使用的是sudo,更新的最后提示失败,但是查看/lib64目录下相关库文件都已经更新。然后就没有在意错误提示。第二天上班的时候有同事反应无法登陆服务器。但我自己早晨开的几个crt窗口都已经正常登陆了,听同事反馈之后我重新打开crt发现果然不能继续登陆。有点奇怪,但没细考虑,然后心想是不是sshd服务有问题呢,直接用sudo重启一下ssh服务好了,结果悲剧的发现ssh服务重启不成功,由于没有root口令(root口令另一个同事也不记得记录在什么地方了),心想如果我的登录窗口要是也退出去的话服务器就肯定没法登录了。所以干脆reboot一下机器,ssh服务就应该可以正常启动了吧。
就这样,又执行了个reboot,几分钟之后机器可以ping通,但是谁也没法登录服务器了。机器就这样被我一步一步折腾的彻底启动不起来了。。。。
由于服务器是我们的开发环境,并且上面是我们的svn服务器,重装系统代价太高。。我自己也只是开发人员,对于系统不怎么熟悉,而我们对于服务器熟悉的同事出差了,最迟还得10好几天才能回来,没办法,只能自己动手。
到机房接入显示屏之后,发现系统停留在输入账号的地方,然后输入账号,不会切换到输入密码的窗口,会重新切换一下依然停留在输入账号的地方。
开发人员解决问题的思路必定是回退到旧版本。。。。。此为核心思想,下面简单介绍方法
1、下载UltraISO制作启动盘,还好我们另一台服务器与我们的这个故障机器系统完全一致,服务器上也有镜像文件,通过UltraISO工具很快制作了个u盘启动盘,当然如果使用光盘启动也可以。
2、启动更改bios设置,将机器设置为u盘启动(或者有光盘的话可以从光盘启动),然后进入救援模式:Rescue installed system(具体操作网上有介绍,只大体记录)
3、进入救援模式的shell命令行之后,可以通过命令:chroot /mnt/sysimage 切换到本地系统,后面有几次误操作,导致切换的时候直接core掉,此时本以为已经彻底没有办法解决了,后来一起在机房的同事无意间直接敲命令:cd /mnt/sysimage直接进入到了原系统的文件系统(也就是说比如原来的某个文件路径为/home/zhangsan/bug,在切换chroot失败的情况下可以直接cd /mnt/sysimage/home/zhangsan/bug就进入到了原系统的相关目录下)
4、恢复glibc相关库:通过rpm命令查找到glibc相关的库,然后再通过rpm2cpio命令提取glibc相关库和文件,然后进行全部还原(如果能正常chroot切换到原系统的话,直接进行相关文件和目录的拷贝就可以了,如果切换失败的话,就通过/mnt/sysimage/目录的方式进行替换)。替换/lib64目录之后,里面有好多是软连接,还需要将软连接从高版本回退到低版本库文件指向。
5、文件替换之后重启系统,发现依然进不去系统,还是停留在输入账号的地方,问题没有解决。然后发现连续输入不同账号的时候屏幕上会出现一些提示,但是瞬间就过去了,根本看不到是什么提示。最NB的地方来了。。。我跟我同事讨论了会之后我同事拿手机录了个像,然后在手机上以最慢的方式播放,找到提示的时候暂停,屏幕上的提示大概是/sbin/login没有访问某个文件的权限。。。有提示就好说,然后继续往上搜索,最终通过救援模式更高/etc/sysconfig/selinux文件,将selinux设置为disable,然后重启,搞定!
由于当初没有拍照,所以就不上图了,主要描述一下思路,万一有人遇到了可以参考一下。(在解决问题的时候发现网上有好多也是由于更新glibc库导致系统奔溃的,但是他们最终解决办法好像都是重装了系统,重装系统还是没有必要的)
————————————————————————
最后打个小广告:微信公众号,拯救韭菜,欢迎玩股票的朋友一起交流。
不喜广告请直接忽略,勿喷!