第一部分:测试(如果不是想测试效果,可以直接跳到第三部分)

鉴于不久前 glibc-2.29 升级失败导致一系列的工具无法正常使用,‘’

本着研究精神的我决定删除 glibc及其库文件 ,测试影响范围到底有多广:

# rpm -e glibc glibc-devel

提示: gcc 依赖 glibc-devel  (因为我的gcc是升级过的,正常不需要依赖它)

几万个包 依赖  glibc

# rpm -qf glibc      //预习一下glibc到底包括哪些文件,缺哪个你就知道是找它哦

# rpm -e glibc glibc-devel --nodeps  //好孩子不要输入这个哦!

warning: %postun(glibc-2.17-260.el7_6.3.x86_64) scriptlet failed, exit status 127

于是报错:

# rpm     // ls 、 cp、reboot、shutdown、init 等系统指令都是缺同一个文件,就不列明了

-bash:/bin/rpm: /lib64/ld-linux-86-64.so.2: bad ELF interpreter: No such file or directory

# yum

-bash:/bin/yum: /usr/bin/python: bad interpreter:No such file or directory   (yum本质上就是一个python脚本)

# ldd

-bash:/bin/ldd: /usr/bin/bash: bad interpreter:No such file or directory (ldd是shell脚本呢)

# cd   //居然是正常的!

简单来说,基本上字符界面(终端)下的所有指令均不可使用,你无法在系统登录状态下做任何的拯救。

但是有趣的是,已加载的gnome桌面所有左右键操作均为正常,所以桌面没退出的话还有一方法,就是当windows救吧(不过重启肯定是起不来的)

第二部分 土方法,缺哪个补哪个(可忽略):

1. 准备一个U盘启动盘(一个好的运维随时都有一个U盘启动盘)

2.按住电源键重启(你的指令都用不了)

BIOS选择U盘启动 (不同设备不同)

进入拯救模式 (Troubleshooting --> Rescue a CentOS system)

3.提示:

  Rescue

  The rescue environment will not attempt to find your Linux installation and

  mount it under the directory : /mnt/sysimage . You can then make any changes

  required to your system. Choice '1' to proceed with this step.

  You can choose to mount your file systems read-only instead of read-write by

  choosing '2' .

  If for some reason this process does not work choose '3' to skip directly to a

  shell.

  1)Continue

  2) Read-only mount

  3) Skip to shell

  4) Quit(Reboot)

Please make a selection from the above :

  选择1   回车

  chroot /mnt/sysimage

  会出现以下三种报错:

  chroot:failed to run command '/bin/bash': No such file or directory  //如果有留意上面测试步骤,会发现 /bin/bash 实际上缺的是  /lib64/ld-linux-86-64.so.2 这个文件

  sh-4.2# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysimage/

  /bin/bash:error while loading shared libraries: libdl.so.2 : cannot open shared object file: No such file or directory

  sh-4.2# cp /lib64/libdl.so.2 /mnt/sysimage/lib64/

  /bin/bash:error while loading shared libraries: libc.so.2 : cannot open shared object file: No such file or directory

  sh-4.2# cp /lib64/libc.so.6 /mnt/sysimage/lib64/

  chroot /mnt/sysimage //成功,但yum与rpm还是不能用:

  rpm需要这些包:

  sh-4.2# cp /lib64/libm.so.6 /mnt/sysimage/lib64/

  sh-4.2# cp /lib64/libpthread.so.0 /mnt/sysimage/lib64/

  sh-4.2# cp /lib64/librt.so.1 /mnt/sysimage/lib64/

  yum还需要:

  sh-4.2# cp /lib64/libutil.so.1 /mnt/sysimage/lib64/

  sh-4.2# cp /lib64/libresolv.so.2 /mnt/sysimage/lib64/

  sh-4.2# cp /lib64/libcrypt.so.1 /mnt/sysimage/lib64/

  netwok服务需要:

  sh-4.2# cp /lib64/libnsl.so.1 /mnt/sysimage/lib64/  

  sh-4.2#  cp /lib64/libcrypt.so.1  /mnt/sysimage/lib64/

  

第三部分:真正的拯救方法:

1. 准备一个U盘启动盘(一个好的运维随时都有一个U盘启动盘)

2.按住电源键重启(你的指令都用不了)

BIOS选择U盘启动 (不同设备不同)

进入拯救模式 (Troubleshooting --> Rescue a CentOS system)

3.提示:

  Rescue

  The rescue environment will not attempt to find your Linux installation and

  mount it under the directory : /mnt/sysimage . You can then make any changes

  required to your system. Choice '1' to proceed with this step.

  You can choose to mount your file systems read-only instead of read-write by

  choosing '2' .

  If for some reason this process does not work choose '3' to skip directly to a

  shell.

  1)Continue

  2) Read-only mount

  3) Skip to shell

  4) Quit(Reboot)

Please make a selection from the above :

  选择1   回车

4. 如果你像我一样知道自己干了什么坏事,而且镜像包里什么包都全的话,直接装就好了

sh-4.2# mkdir /mnt/cdrom         //千万不要挂载到 /mnt 下 你还挂着个系统呢!

sh-4.2# blkid   //查看U盘是哪个

sh-4.2# mount  /dev/sda1 /mnt/cdrom     //挂载U盘,我的U盘是/dev/sda1

 sh-4.2# rpm -ivh /mnt/cdrom/Packages/glibc* --nodeps --root /mnt/sysimage --force     //一定要指定root,因为你目前的根目录是U盘的

 sh-4.2# reboot   //第一次重启时间会比较久,耐心点

Centos7 -- glibc 升级失败、意外删除、故意删除后的处理方法的更多相关文章

  1. SUSE glibc升级为2.18过程记录

    先验知识:1.运行时,动态库的装载依赖于ld-linux.so.6的实现,它查找共享库的顺序如下:(1)ld-linux.so.6在可执行的目标文件中被指定,可用readelf命令查看(2)ld-li ...

  2. centos7.6 升级openssh openssl

    centos7.3和centos7.6升级完毕测试登录ssh以及重启后登录ssh均无问题. 前期请自行配置好yum源(如果不会请百度) 整个过程不需要卸载原先的openssl包和openssh的rpm ...

  3. centos7 docker升级到最新稳定版本

    原文:centos7 docker升级到最新稳定版本 一.前言 docker的版本分为社区版docker-ce和企业版dokcer-ee社,区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外 ...

  4. centos7.5升级openssh7.4到7.9

    漏洞扫描工具扫描出openssh用户枚举漏洞,搜索资料得知无补丁和升级包,解决这个漏洞得安装漏洞修复之后的版本version>7.8. 环境 linux版本: CentOS Linux rele ...

  5. 删除LINUX更新后多余的内核

    删除LINUX更新后多余的内核 本人使用的时fredoa 21 之前为了搞网卡驱动不知不觉升级了几次系统,每次启动后都有好几个内核让我选,真的非常头疼阿,尤其像博主这样的有点强迫的人,看着就心烦,所以 ...

  6. entity framework 删除数据库出现错误的解决方法--最土但是很有效的方法

    无法删除数据库,因为该数据库当前正在使用. public ChinaerContext() : base("name=ContextConn") { // Database.Set ...

  7. oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)

    oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...

  8. 修复直接删除linux系统后grub丢失错误

    如果删除了系统后,grub丢失,开机出现“grub>”的话,可以用如下代码进入目标linux系统:grub>ls (hd0,X)/boot             //x为目标系统所在分区 ...

  9. MYSQL 删除二进制日志的 3 个方法

    方法 1: reset master; ------------------ 删除前: 删除日志: 删除后: ----------------------------------------    可 ...

随机推荐

  1. 《Inside C#》笔记(二) 初识C#

    一 程序的编译.构成 a) 编写C#代码一般用VS,但作者在这儿介绍了使用记事本编写C#代码并编译运行的过程,以便对VS有更深入的认识. 用记事本编写C#代码后,修改文本文件的后缀为.cs,然后用cs ...

  2. Kotlin入门(11)江湖绝技之特殊函数

    上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数.内联函数.扩展函数.尾递归函数.高阶函数等等,因此本篇文章就 ...

  3. mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci

    1.utf8与utf8mb4(utf8 most bytes 4) MySQL 5.5.3之后增加了utfmb4字符编码 支持BMP(Basic Multilingual Plane,基本多文种平面) ...

  4. persist与checkpoint

    1.当反复使用某些RDD时建议使用persist(缓存级别)(采用默认缓存级别时为cache())来对数据进行缓存. 2.如果某个步骤的RDD计算特别耗时或经历很多步骤的计算,当重新计算时代价特别大, ...

  5. 基于 node 搭建博客系统(一)

    系统分为两端,分别实现. 管理员端: 功能 :个人信息,设置,发布随笔,随笔列表,删除随笔,查找,文章 等. 技术点:Boostrap + AdminLTE; 基于nodejs 实现的express ...

  6. windows10不能获取有效IP的问题

    最近我的windows10系统一直不能有效获取IP地址(无论有线还是无线),但手工设置IP后又能正常上网,所以怀疑是某个服务未启动的原因. 查了一下百度,发现还真是,现将解决方案记录如下: 1.打开系 ...

  7. 对haproxy文件进行增删改查

    1.文件内容 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global ...

  8. Django框架的简介

    Django框架的背景 Django是一款基于Python开发的全栈式一体化Web 应用框架.2003 年问世之初,它只是 美国一家报社的内部工具,2005 年 7 月使用 BSD 许可证完成了开源. ...

  9. 控件_SeekBar与RatingBar

    这两种进度条都是ProgressBar的子类 SeekBar:是一种可以拖动的进度条,比如播放音乐的进度 import android.app.Activity; import android.os. ...

  10. python六十二课——高阶函数之filter

    高阶函数之:filter函数:过滤数据的,最终返回一个惰性序列对象(filter对象,迭代器对象)解释:filter的意思:在计算机领域中我们都称为过滤器格式:filter(fn,lsd):参数和ma ...