昨天给内部一台服务器升级一个模块,但是新模块依赖的glibc版本比当前服务器的版本高,而服务器又无法通过yum去升级gblic,就想着手动升级服务。这一升级,就出了大问题,整个系统的基础命令全部无法运行,如
ls、grep、find等,全部都会报/lib64/libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference瞬间惊出了一身冷汗,重新使用ssh连接服务,发现也连接不上,索性经过一番搜索,还是找到了正确的解决办法,记录一下,以防忘记
服务器信息
操作系统:CentOS7.6
升级失败的glibc版本:glibc2.25
处理过程
切记,切记,在升级失败后,一定不要断开SSH连接,否则,你就无法通过ssh连接服务器了,除非你能接触到物理机,要不然就无法回救了
故障原因
在升级gblic2.25失败后,删除了glibc2.25, 而linux中glibc还是默认软链接到glibc2.25,而非正确的glibc版本
解决办法
- 重建libc.so.6的软链接
记住这里不能使用命令
ln,执行也会报错,庆幸还有sln# 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 # sln /usr/lib64/libm-2.17.so /usr/lib64/libm.so.6
这三个软链接更新后,ls等基础命令不再报错。总算是松了一口气。
- 修复/lib64下的错误软链接
基础命令修复后,后面的操作就没有啥大问题了,只要找到对应的错误的软链接,并更新到正确的版本后,系统就恢复正常了,下面直接给出我的操作
# cd /usr/lib64 # rm -f libanl.so.1 && ln -s /usr/lib64/libanl-2.17.so libanl.so.1 # rm -f libBrokenLocale.so.1 && ln -s /usr/lib64/libBrokenLocale-2.17.so libBrokenLocale.so.1 # rm -f libcidn.so.1 && ln -s /usr/lib64/libcidn-2.17.so libcidn.so.1 # rm -f libcrypt.so.1 && ln -s /usr/lib64/libcrypt-2.17.so libcrypt.so.1 # rm -f libdl.so.2 && ln -s /usr/lib64/libdl-2.17.so libdl.so.2 # rm -f libnsl.so.1 && ln -s /usr/lib64/libnsl-2.17.so libnsl.so.1 # rm -f libnss_compat.so.2 && ln -s /usr/lib64/libnss_compat-2.17.so libnss_compat.so.2 # rm -f libnss_db.so.2 && ln -s /usr/lib64/libnss_db-2.17.so libnss_db.so.2 # rm -f libnss_dns.so.2 && ln -s /usr/lib64/libnss_dns-2.17.so libnss_dns.so.2 # rm -f libnss_files.so.2 && ln -s /usr/lib64/libnss_files-2.17.so libnss_files.so.2 # rm -f libnss_hesiod.so.2 && ln -s /usr/lib64/libnss_hesiod-2.17.so libnss_hesiod.so.2 # rm -f libnss_nisplus.so.2 && ln -s /usr/lib64/libnss_nisplus-2.17.so libnss_nisplus.so.2 # rm -f libnss_nis.so.2 && ln -s /usr/lib64/libnss_nis-2.17.so libnss_nis.so.2 # rm -f libpthread.so.0 && ln -s /usr/lib64/libpthread-2.17.so libpthread.so.0 # rm -f libresolv.so.2 && ln -s /usr/lib64/libresolv-2.17.so libresolv.so.2 # rm -f librt.so.1 && ln -s /usr/lib64/librt-2.17.so librt.so.1 # rm -f libutil.so.1 && ln -s /usr/lib64/libutil-2.17.so libutil.so.1
