緣由
我們有個同事要安裝一個軟件,就用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
原文地址: /lib64/libc.so.6 錯誤導致的系統崩潰
標簽: centos yum