缘由
我们有个同事要安装一个软件,就用yum 安装,然后就悲剧。安装完成之后 发现无论执行任何命令都会报错,如下错误
psgrep: relocation error: : /usr/lib64/libpthread.so.0: relocation error: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference/usr/lib64/libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
吓尿了,遇到这种错误就懵逼了,以为系统坏了,这个坏了可不是重做系统就好了(这个服务器是在异地,真要出问题 都要飞过去了)。
此时最最重要一点是不要关闭当前窗口,不要重新启动机器! 一旦关闭窗口将无法重新连接(可以自己新建窗口试下),重启机器后也将无法进入系统 。比较幸运的是 我们当时开了两个窗口,要不然就麻烦了
原因
libc.so.6是C运行时库 glibc的软链接,程序启动和运行时,是根据libc.so.6软链接找到glibc库
lib64/libc.so.6是一个软链接,指向/lib64/libc.so-2.1x,2.1x表示其对应版本,去兼容相应CentOS版本
很多基本命命令依赖glibc,libc.so.6链接对应版本不一致将导致系统的几乎所有程序不能工作
解决过程
由于我们也是第一次遇到,没撒经验 那就搜索了,根据相关文章思路 以及通过少的可怜可以执行的命令试错 大致知道了原因:应该是有人升级了内核,但是升级失败了,导致服务器存在两个内核,在执行yum的过程中应该把错误的内核指向了 /lib64/libc.so.6 。我们通过 命令发现 /lib64/libc.so-2..xx.so 有两个版本(tab 命令补全还可以使用),我们参考了其他机器发现都使用2.17 版本 。
但是我们在 执行 “sln /usr/lib64/libc-2.17.so /usr/lib64/libc.so.6” 过程中 发现 一直提示 一个很奇怪的错误,最后我们发现 其实 /lib64/libc-2.17.so 文件其实也是有问题的,幸好我们查找整个服务器备份了一个 2.17 的 so 文件(喜极而泣),然后把 这个 so 替换了 /lib64/libc-2.17.so 。发现软链之后就解决了一些问题。
解决方法
主要指向如下命令,就可以解决。
sln /usr/lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2 sln /usr/lib64/libc-2.17.so /usr/lib64/libc.so.6