cndaqiang Web Linux DFT

Segmentation Fault when running commands

2019-09-05
cndaqiang
RSS

参考

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结束后的下一行中的rorw 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 协议 ,转载请注明出处!



评论


广告

目录

广告
访客数据