参考
Segmentation Fault when running commands
Centos7 – glibc 升级失败、意外删除、故意删除后的处理方法
How to re-install a package in rescue mode, when chroot fails?
问题
yum安装完curl后,输出常用命令如top, yum, ping
等常用命令,后提示
Segmentation fault
此时已经无法远程ssh登陆
重启后,各种服务无法启动,如Failed to start Login Service
(这直接导致开机后,输入用户名,回车后,不会进入正常的输入密码,又跳到了输用户名的界面),MongDB等进程也无法启动
重启进入单用户模式后,top, yum, ping
等这些常用命令依然提示Segmentation fault
原因
glibc
出了问题,很多基本命命令依赖glibc
解决方案
插入刻录了centos7 DVD的U盘,最好是Everything的,因为我们之后要本地安装glibc,Everything的镜像里面含有所有的rpm安装包
按照附录的方式进入rescue模式
按照附录的rescue模式下rpm安装包的方法, 使用rpm安装所需的libgc的包
安装顺序
glibc-headers
glibc
glibc-devel
我安装完这三个就ok了,如果其他的也损坏了,也安装上吧
exit
退出救援模式系统自动重启
附录
Centos进入单用户模式
grub引导界面,按e
修改fi结束后的下一行中的ro
为rw init=/sysroot/bin/bash
,其他教程里的init=/sysroot/bin/sh
一样可行
ctrl+x
进入系统
chroot /sysroot
就进去了之前系统的操作环境
有些命令执行前还需要mount proc /proc -t proc
Centos7 进入rescue模式
U盘启动,选择Troubleshooting
->Rescue a CentOS system
->然后按1
进入continue
这篇文章How to Recover or Rescue Corrupted Grub Boot Loader in CentOS 7的截图就很好了,直接转发了过来
此时/mnt/sysimage
是检测到的本地已经安装的Centos系统根目录
之后如果chroot /mnt/sysimage
则“进入原来的系统环境”,使用的命令都是原来系统的命令
用exit
可以退出原来系统的环境,回到救援模式环境
原来的系统如果出现命令都不能用问题,就不要chroot /mnt/sysimage
了
/mnt/install/repo/Packages
是安装光盘中的rpm仓库目录,可以用来安装缺失损坏的程序
如glibc
rescue模式下rpm安装包的方法
测试安装abc.rpm是否缺少其他依赖,如果缺少,要先安装依赖
cd /mnt/install/repo/Packages
rpm -ivh --test --force --noscripts --root=/mnt/sysimage abc.rpm
去掉--test
则可以安装
cd /mnt/install/repo/Packages
rpm -ivh --force --noscripts --root=/mnt/sysimage abc.rpm
删除glibc后系统命令失效,重新安装示例:
本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!