GliderHX PhD candidate

lib64/libc.so.6错误导致的系统崩溃

2020-04-08
GliderHX

问题

今天帮师弟在组里的小集群上用root权限yum安装一个库,然而安装完后悲剧开始了: 我发现连基本的ls命令都不能用了,并报如下错误

[root@managernode ~]# ls
ls: relocation error: /lib/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

此时最最重要一点是不要关闭当前窗口,不要重新启动机器! 一旦关闭窗口将无法重新连接(可以自己新建窗口试下),重启机器后也将无法进入系统(如果已经关机,可以参考Centos7 – glibc 升级失败、意外删除、故意删除后的处理方法),以下解决方法仅限当前保留窗口内操作。

原因

  • libc.so.6C运行时库 glibc的软链接,程序启动和运行时,是根据libc.so.6软链接找到glibc
  • lib64/libc.so.6是一个软链接,指向/lib64/libc.so-2.1x2.1x表示其对应版本,去兼容相应CentOS版本
  • 很多基本命命令依赖glibclibc.so.6链接对应版本不一致将导致系统的几乎所有程序不能工作

解决方案

先找到libc.so-2.1x所对应的具体版本
由于许多基础的命令不能使用,网上不少教程里的快捷方法也失效了。在这里我们可以用尚可使用的cd命令进入/lib64/文件夹。然后由于ls相关命令失效,我们可以输入

cat libc-2.

然后点Tab键利用Linux的自动补全功能,找出该目录下相应的文件

libc-2.17.so  libc-2.23.so 

此时发现有两个/lib64/libc.so-2.xx,应该是后面这个不兼容的覆盖了前面的

修改软连接
此时我们输入

sln /usr/lib64/libc-2.17.so /lib64/libc.so.6
sln /usr/lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2

然后大功告成!

反思:用root前要慎之又慎!现在因疫情不能回所,如果系统崩溃再搞不定就太麻烦了。

参考


Comments

Content