操作系统

当前位置:金沙棋牌 > 操作系统 > centos系统误删libc金沙棋牌:,报错问题

centos系统误删libc金沙棋牌:,报错问题

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-22 11:06

五、原系统挂载路径/mnt/sysimage,如果想获得原系统root环境,执行行命令:chroot /mnt/sysimage 即可。

解决办法:

glibc版本.png

场景需求

默认的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版本:

金沙棋牌 1

另外, 执行$ ll /lib64/libc**可以看到此时的libc.so.6是libc-2.12.so的别名, 如下图所示:

金沙棋牌 2

glibc安装

首先, 点击此处下载glibc点击下载, 得到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文件

金沙棋牌 3

###复制到编译好的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配置文件

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

情况一:

如果还连着的ssh终端,没有断开,直接执行如下命令即可恢复:

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

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

金沙棋牌 4 :

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!

无法正常启动进入系统。

金沙棋牌 5

好吧确实比较低,那就升级版本吧!
先是考虑yum update glibc直接升级,失败

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

情况二:

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

出现报错:Kernel panic - not syncing: Attempted to kill init!

处理办法

插入系统光盘,进入rescue救援模式,将链接文件复制到被删除的文件系统。

操作步骤如下:

1、开机进入BIOS设置,修改BOOT启动顺序为光盘优先启动 CD-ROM Drive;

2、重启系统后由光盘引导,进入安装启动菜单,选择“Rescue install system”救援模式;

金沙棋牌 6

3、选择语言,保持默认English

金沙棋牌 7

4、选择键盘类型,保持默认us

金沙棋牌 8

5、是否启动网络,需要根据你实际情况进行选择,如果需要通过联网拷贝数据,选择YES,在这里我们选择NO;

金沙棋牌 9

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

金沙棋牌 10

7、系统挂载在/mnt/sysimage下 ,选择OK

(如果要到root环境下,运行 chroot /mnt/sysimage 命令,此处不需要)

金沙棋牌 11

金沙棋牌 12

8、选择进入模式:shell 进入命令行模式,fakd是诊断模式,reboot重启电脑,这里选择shell

金沙棋牌 13

9、进入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

金沙棋牌 16

简单的另一个方法:
那就远程连接还未关闭:
# 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就又存在了。

glibc新版本信息.png

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

安装nginx时候出现版本太低的问题:

单用户:

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

一、首先准备好系统安装盘,使用安装盘启动:

看看现在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

金沙棋牌 17

金沙棋牌 18

金沙棋牌 19

搞定,收工

 

然后到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

金沙棋牌 20

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

金沙棋牌 21

好吧,人家需要的是'GLIBC_2.14',先查看一下当前系统glibc的情况:

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

金沙棋牌 22

    无法远程登录,终端也无法登录,也无法单用户登录,如图:

六、这里可以执行fakd诊断,当然我们这里直接进入shell 命令行:

四、这里就是rescue选项了:

金沙棋牌 23

金沙棋牌 24

其实在执行误操作之后只要不断开远程连接还有挽回的余地,但远程异常断开连接之后很多人就没有辙了,准备抢救数据&文件,重装系统,其实这里咱们先不要着急重装系统,咱们来试试rescue !

金沙棋牌 25

二、选择语言和键盘(默认的就好):

 

终端登录:

金沙棋牌 26

金沙棋牌 27

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 就正常了:

九、退出shell & reboot  

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

八、不要害怕,执行:

金沙棋牌 28

三、稍等一会儿会出现要不要设置网络,一般来说网络没问题就不用设置了,我这里选择No:

  1. 选择Continue,则救援模式程序会自动查找系统中已有的文件系统,并把他们挂载到/mnt/sysimage目录下。

  2. 选择Read-Only,则会以只读的方式挂载已有的文件系统。

  3. 手动挂载则Skip。

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

咱们这儿选择Continue:

本文由金沙棋牌发布于操作系统,转载请注明出处:centos系统误删libc金沙棋牌:,报错问题

关键词:

上一篇:linux命令十条,Linux基础命令

下一篇:没有了