前段时间境遇开发人员更新glibc版本,把/usr/lib64/libc-2.12.so &
libc.so.6 -> libc-2.12.so 那几个软连接更改之后导致报错:

CentOS 6.x误删libc.so.6,导致重启Kernel panic – not syncing: Attempted to kill init!报错难点

CentOS 6.x x64
若是失误删除系统/lib64/libc.so.6软连接文件,会导致力不从心履行系统命令,不能够新建ssh也许直接登录系统终端。

重启系统后会提醒:

Kernel panic – not syncing: Attempted to kill init!

心中无数平常运营进入系统。

澳门金沙国际 1

设置nginx时候现身版本太低的难题:

此情此景须要

暗中认可的Centos6.5 glibc版本最高为2.12,
而在进展Nodejs开发时项目所依靠的包往往须要更高版本的glibc库帮忙,
由此在不升级系统的前提下, 须要主动立异系统glibc库.
一般蒙受错误libc.so.6: version GLIBC_2.14 not
found时表示必要对glibc举行进步了.

glibc版本

查看系统glibc库版本可应用如下命令:

$ strings/lib64/libc.so.6|grep GLIBC_

Centos6.5输出如下glibc版本列表,
从此图能够看到系统最高辅助glibc的2.12版本:

澳门金沙国际 2

另外, 执行$ ll
/lib64/libc**能够见见这儿的libc.so.6是libc-2.12.so的别称, 如下图所示:

澳门金沙国际 3

glibc安装

先是,
点击那里下载glibc点击下载Ali云服务器,导致重启Kernel。,
获得glibc-2.14.tar.gz使用如下命令解压glibc-2.14.tar.gz:

$ tar-xzvf glibc-2.14.tar.gz

当前目录下获得目录glibc-2.14, 执行$cd glibc-2.14命令进入目录,
依次执行如下命令编译安装glibc-2.14:

$ mkdir build// 在glibc-2.14目录下树立build文件夹

$ cd build// 进入build目录

$../configure–prefix=/opt/glibc-2.14//
配置glibc并设置当前glibc-2.14安装目录

$ make&&make install// 编写翻译安装glibc-2.14库

glibc软链

设置到位后, 建立软链指向glibc-2.14, 执行如下命令:

$ ln-sf/opt/glibc-2.14/lib/libc-2.14.so/lib64/libc.so.6

****本处并未删除先前的libc.so.6软链,而是精选直接覆盖,因为一贯删除libc.so.6大概会导致系统运转至极以及不可能起动

注意

去除libc.so.6之后或然导致系统命令不可用的地方, 可接纳如下方法化解:

$ LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so
ln-s/opt/glibc-2.14/lib/libc-2.14.so/lib64/libc.so.6

一经上述创新败北可利用如下命令还原:

$ LD_PRELOAD=/lib64/libc-2.12.so
ln-s/lib64/libc-2.12.so/lib64/libc.so.6// libc-2.12.so
此项是系统升级前的本子

实施成功之后可实施strings/lib64/libc.so.6|grep GLIBC_ 命令 和ll
/lib64/libc** 查看当前的GLIBC帮衬的版本和libc.so.6软链的应和情形

glibc升级引起locale警告

消除:设置语言相关的locale-archive文件

澳门金沙国际 4

###复制到编写翻译好的glibc 2.14的lib/locale中,记得先创建locale目录

# mkdir /opt/glibc-2.14/lib/locale

# cp /usr/lib/locale/locale-archive /opt/glibc-2.14/lib/locale/

# /usr/local/glibc-2.14/bin/localedef -i en_US -f UTF-8 en_US.UTF-8
##运作生成对应的locale配置文件

     ls: error while loading shared libraries: libc.so.6: cannot open
shared object file: No such file or directory

消除办法:

  /lib64/libc.so.6: version `GLIBC_2.14' not found

    无法远程登录,终端也不能够登录,也不知道该如何是好单用户登录,如图:

情况一:

假定还连接的ssh终端,没有断开,直接执行如下命令即可复苏:

# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so
/lib64/libc.so.6

好呢,人家要求的是’GLIBC_2.14’,先查看一下当下系统glibc的景况:

澳门金沙国际 5

情况二:

ssh已经断开,无法新建新的ssh连接,重启系统,报错不能进入系统。

并发报错:Kernel panic – not syncing: Attempted to kill init!

处理办法

陈设系统光盘,进入rescue救援格局,将链接文件复制到被删除的文件系统。

操作步骤如下:

① 、开机进入BIOS设置,修改BOOT运维顺序为光盘优先运行 CD-ROM Drive;

贰 、重启系统后由光盘指导,进入安装运行菜单,选择“Rescue install
system”救援情势;

澳门金沙国际 6

③ 、采纳语言,保持默许English

澳门金沙国际 7

④ 、选择键盘类型,保持暗中同意us

澳门金沙国际 8

五 、是不是运行网络,须要基于你实际情状进行分选,若是急需经过联网拷贝数据,选用YES,在此地大家选择NO;

澳门金沙国际 9

6、进入到Rescue界面,选择Continue

澳门金沙国际 10

⑦ 、系统挂载在/mnt/sysimage下 ,选用OK

(倘诺要到root环境下,运转 chroot /mnt/sysimage 命令,此处不供给)

澳门金沙国际 11

澳门金沙国际 12

⑧ 、采取进入情势:shell
进入命令行方式,fakd是确诊格局,reboot重启电脑,那里选择shell

澳门金沙国际 13

⑨ 、进入shell命令行,提醒符为

bash-4.1#

澳门金沙国际 14

10、不要执行chroot
/mnt/sysimage,因为硬盘文件系统就在该目录下,从/lib64下复制软连接即可,操作如下:

bash-4.1# cd /lib64

bash-4.1# cp -d libc.so.6 /mnt/sysimage/lib64/libc.so.6

bash-4.1# reboot

然后即可复苏正常

澳门金沙国际 15

strings /lib64/libc.so.6 |grep GLIBC

极限登录:

澳门金沙国际 16

澳门金沙国际 17

glibc版本.png

单用户:

好啊确实比较低,那就升级版本吧!
第贰考虑yum update glibc直接进步,战败

澳门金沙国际 18

然后到http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.xz
tar glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure –prefix=/usr/local/glibc-2.14
make -j4 (时间稍长,请耐心等待)
make install

实质上在推行误操作之后如果不断开长途连接还有挽回的退路,但中距离至极断开连接之后很几个人就从未辙了,准备营救数据&文件,重装系统,其实那里大家先不要焦躁重装系统,我们来试试看rescue

探望未来libc.so.6在哪些岗位,然后修改软链接
ln -s /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
创办链接时出了难点,不可能创立,说是已存在
下一场笔者就手欠把libc.so.6删了!
rm libc.so.6
下一场就傻逼了,种种指令都无法用了,报错音讯
/bin/ls: error while loading shared libraries: libc.so.6: cannot open
shared object file: No such file or directory
网上找办法
先删除连接 :
第一步
cd /lib64
第二步
LD_PRELOAD=/lib64/libc-2.3.6.so rm libc.so.6
–>作者可以平常删除,这一步省略,不可能健康删除的,先实施该步,**libc-2.3.6.so文件与最近服务器文件保持一致
树立新连接 :
LD_PRELOAD=/usr/local/glibc-2.14/lib/libc-2.14.so ln -s
/usr/local/glibc-2.14/lib/libc-2.14.so libc.so.6

① 、首先准备好系统安装盘,使用安装盘运维:

strings /lib64/libc.so.6 |grep GLIBC

澳门金沙国际 19 :

澳门金沙国际 20

 

glibc新本子信息.png

贰 、采用语言和键盘(暗中认可的就好):

搞定,收工

澳门金沙国际 21

叁 、稍等说话相会世要不要安装网络,一般的话互联网没难点就毫无安装了,笔者那里选取No:

澳门金沙国际 22

四 、这里就是rescue选项了:

  1. 选择Continue,则救援格局先后会自动寻找系统中已有些文件系统,并把他们挂载到/mnt/sysimage目录下。

  2. 选取Read-Only,则会以只读的艺术挂载已有的文件系统。

  3. 手动挂载则Skip。

  4. Advanced ,高级选项就不作表明了。

我们那儿选拔Continue:

澳门金沙国际 23

⑤ 、原系统挂载路径/mnt/sysimage,借使想取得原系统root环境,执行行命令:chroot
/mnt/sysimage 即可。

澳门金沙国际 24

6、那里能够执行fakd诊断,当然大家那边一向进去shell 命令行:

澳门金沙国际 25

柒 、本次重头戏来了,因为/usr/lib64/libc-2.12.so & libc.so.6 ->
libc-2.12.so 难点,执行chroot /mnt/sysinage会报错:

澳门金沙国际 26

八 、不要害怕,执行:

cp /lib64/libc-2.12.so /mnt/sysimage/lib64/libc-2.12.so
cp /lib64/libc.so.6 /mnt/sysimage/lib64/libc.so.6

将光盘文件拷贝到系统文件去,再履行chroot /mnt/sysinage 就不荒谬了:

澳门金沙国际 27

其实到那里小编本次rescue
已经完成了,因为系统缺点和失误/usr/lib64/libc-2.12.so文件和 libc.so.6 ->
libc-2.12.so软连接 ,复制过去就好了 。

九、退出shell & reboot  

澳门金沙国际 28

粗略的另1个方法:
那就远程连接还未关门:
# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so
/lib64/libc.so.6
该命令的意思是:
linux调用so库文件时,先找找当前路线,然后是系统库目录,提供LD_PRELOAD系统变量能够改变那个顺序,改变后的探寻顺序为
LD_PRELOAD, 当前路线, 系统库目录。
于是,使用LD_澳门金沙国际,PRELOAD指向寻常的glibc库文件,然后实施ln等一声令下,就能够平常履行,执行成功之后,
libc.so.6 -> libc-2.12.so就又存在了。

其它系统文件损坏也足以参考同样步骤进行,就不在此赘述了 。

迎接我们多多指教

 

相关文章