centos7.6 误改libc.so.6 ld-linux-x86-64.so.2软链接文件解决办法,以及部分猜测

起因:

        centos7.6默认的glibc版本过老,想要升级一下,照着网上的教程操作,make install之后,让我改名libc.so.6 ld-linux-x86-64.so.2,再重建软链接(很难想象作者是怎么成功的,确定给这两文件改完名系统还能用?有几个操作不报错的),执行之后,服务器执行命令报错如下。

过程:

        虽然是教程的问题,但是服务器归我,出问题了得解决。以下解决办法部分是猜测,部分是实际操作,猜测部分我会打上猜测标题。

一、服务器未重启

很悲剧的是,我的服务器被重启了,如果未重启服务器,以下操作默认在/usr/lib64目录下操作的(猜测)

        如果出现了以上报错,千万不要重启服务器,当前连接的ssh也不要断开,否则服务器是ssh不上去的。

        1、如果只是误改了libc.so.6(没有新建软链接的情况),通过sln命令(ln -s这个命令是报错的)新建一个对应的软链接, sln libc-2.17.so(so文件名根据实际情况操作,与当前操作系统对应的版本,tab补全是可以用的,下文不再解释) libc.so.6,理论上这个命令就能解决问题

sln libc-2.17.so  libc.so.6

        2、修改了libc.so.6 ld-linux-x86-64.so.2,使用如下命令

sln libc-2.17.so libc.so.6

sln ld-2.17.so ld-linux-x86-64.so.2 

        3、修改了libc.so.6 ld-linux-x86-64.so.2并且新建了对应的软链接到新的so文件,这时候sln命令再往上添加软链接就会出问题,unlink命令也是报错的,使用命令:

/usr/lib64/ld-2.17.so  --library-path /usr/lib64 /usr/bin/unlink 软链接名称

 取消对应的软链接,按照上面的步骤操作即可。

二、重启了服务器

        1、如果是实体机(猜测)

        是否可以通过插入centos操作系统u盘或者cd-ram抢救,bios中优先引导对应的介质,然后通过我下面的步骤抢救,注意不要将数据清理掉了。

        2、vmware虚拟机(实操)

        出问题的机器是vmware的虚拟机,机器关闭后,虚拟机设置勾选CD/DVD驱动器

        启动机器,在启动时没有出现预期的centos安装画面

        而是引导选择该虚拟机内已安装的系统,在页面任一选项中按e,这时候进入到的是编辑模式,ctrl+c进入了grub引导,esc+esc两次esc之后应该进入了centos的安装画面(如果还是退回了选择操作系统页面,重复一下操作,如果还是不行,按照上面的步骤探索,由于情况紧急,没有详细记录操作)

        之后进入的如下画面(网上找的图片,参考,操作内容都一样,好像中间还会有个trouble shooting的选项)

选择Rescue a Centos Linux system

输入:1

进入之后,服务器数据都在/mnt/sysimage中,进入目录/mnt/sysimage/usr/lib64重建被修改的软链接

注意!注意!注意!这时候你重建的软链接直接用:

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

别用绝对路径!!!!

改了什么就重建什么,如果不记得改了什么,拷贝当前系统的/usr/lib64(非常不推荐这种方式,仅仅用于急救启动服务器,这样可能会导致部分服务的链接库出问题)

cp -rf /usr/lib64 /mnt/sysimage/usr/lib64

操作完成后,重启机器。正常启动了服务器,ssh连接也正常。

后记:

正在处理其他问题时,服务器又出问题了。

第一反应就是服务器的so软链接又被修改了,进入/usr/lib64目录,所有命令都用不了,分成两种情况:

        1、如果只有libc.so.6被修改了,使用命令

 export LD_PRELOAD="/usr/lib64/libc-2.17.so"

之后命令应该都正常了

        2、但是我在执行之后依然有报错,说明我修改的ld-linux-x86-64.so.2软链接在作怪

使用如下命令:

/usr/lib64/ld-2.17.so  --library-path /usr/lib64 /usr/bin/(这里补全你想要用的命令)

查看/usr/lib64/ld-linux-x86-64.so.2软链接的链接对象,链接到了新编译的ld-2.31.so

删除软链接,重建ld-linux-x86-64.so.2指向ld-2.17.so,命令都可以正常执行,接下来我将/usr/lib64中高版本ld-2.31.so和libc-2.31.so都移出了/usr/lib64目录,问题不再出现,至此服务器问题解决。

现在的文章质量真的不好评价,某些升级glibc的文章居然能够在修改了动态链接库后正常使用服务器命令,只能感慨作者真强。

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值