#一次最难修复的运维事件#记录一次断电导致centos7.4系统不能正常进入的解决方案
  

zqm 1791

{{ttag.title}}
情况描述:
园区意外断电,导致服务器centos7.4系统不能正常进入,一直卡在进度条界面,按esc或者f5能够看到详细的错误,主要有三个服务报错,如下图:

chronyd、Postfix、polkit服务启动失败

分析情况:
这几个服务都是centos下常见的服务,chronyd是时间同步服务,Postfix是邮件服务,polkit是linux服务器上面的一种服务器方法进程,是不是最后一个服务失败导致系统进不去的呢?

解决步骤:
一、关闭错误服务解决方法
服务器的紧急模式不能进入,于是刻录了一张centos7.4的光盘,通过光盘的紧急模式进入,原来的系统文件都被挂载在/mnt/sysimage/目录下面:
记录一次断电导致centos7.4系统不能正常进入的解决方案
1.1、首先查看message日志
cat /mnt/sysimage/var/log/message (日志文件比较大)
检索发现了界面上面报的几个错误,于是我们想把这几个服务都停止掉:
于是在紧急模式下使用命令:
systemctl stop chronyd (不存在)
systemctl disable chronyd

systemctl disable polkit

systemctl disable postfix
后面正式这种方法错误,很有可能关闭了光盘系统里面的三个对应服务。

1.2、进入单用户模式

(在启动grub菜单,选择编辑选项启动
按键盘e键,来进入编辑界面
找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh
现在按下 Control+x ,使用单用户模式启动
现在,可以使用下面的命令访问系统
chroot /sysroot)

运行一下命令,停止服务:
systemctl disable chronyd
systemctl disable polkit
systemctl disable postfix
然后重启,这次不报这三个错误了,但是继续报其它服务错误,我们采用同样的方法,陆陆续续关闭了以下服务:
chronyd.service
firewalld
NetworkManager
postfix
tuned
docker
kdump
在关闭了这么多服务后,启动界面不报任何错误了,但还是进不去系统,一直卡在进度条,按esc也没有任何错误,进入死胡同了,这种方法不通了。

二、系统分区、文件系统、磁盘检测
检查修复
进入紧急模式:
2.1、文件系统修复
先umount 系统分区,在修复
xfs_repair -v -L /dev/dm-0 (可能会导致用户信息和日志丢失)
2.2、df -h 和fdisk -l /dev/sda1 检查分区是否正常
2.3、#检测坏道命令,结果输出到 /home/badblocks.log
badblock -s -v -o /home/badblocks.log /dev/sda1
结果:都没有错误

三、selinux原因导致
于是进去检查selinux的配置,发现SELINUX=disabled和SELINUXTYPE=targeted是正常的,排除这种可能。

四、查看原系统的操作日志
紧急模式进入,查看/mnt/sysimage/root/.bash_history,发现有删除/etc/rc.d/目录下的操作记录,仔细看发现是中了挖矿病毒,用clamav扫描,手动清除文件的操作,而且还有替换ps、lattr命令等操作,截图如下,在想会不会是因为误删除了系统文件导致的,后面证实了我的想法是正确的。
记录一次断电导致centos7.4系统不能正常进入的解决方案记录一次断电导致centos7.4系统不能正常进入的解决方案


4.1、于是重新进入紧急模式,查看message、boot.log、dmesg、secure日志,发现日志太大了,不好定位问题,于是先备份这些日志文件,然后全部清空,重新从硬盘启动系统,然后用光盘紧急模式进入查看日志具体错误,先后修复了以下文件。
centos7系统服务关联的三个路径:
/usr/lib/systemd/system/ | RPM包安装时分发的unit文件
/run/systemd/system/ | systemd运行时创建的文件
/etc/systemd/system/
修复了以下文件:
/usr/bin/tmux
zram.service
/sbin/rngd
/lib/systemd/rhel-dmraid-activation :no such file or directory 、
/usr/libexec/anaconda/anaconda-pre-log-gen
/usr/libexec/anaconda/zramswapon
anaconda-pre.service
libevent-2.0.so.5
anaconda-tmux0tty1.service
anaconda.service
/usr/bin/anaconda-disable-nm-ibft-plugin
/sys/module/pcc-cpufreg/initstate
/etc/rc.d/init.d/functions
采用方法:光盘文件考虑到原系统文件
cp /usr/lib64/libevent-2.0.so.5 /mnt/sysimage/usr/lib64/
cp -r /usr/libexec/anaconda /mnt/sysimage/usr/libexec/
cp /lib/systemd/rhel-dmraid-activation /mnt/sysimage/lib/systemd
cp /usr/bin/anaconda-disable-nm-ibft-plugin /mnt/sysimage/usr/bin/
修复了几十轮以后,发现message里面还报了以下错误:
Unknown username "polkitd"
Unknown username "dbus"
Failed bot register match for Disconnected message
Looping too fast Throottling execution a little
tuned.service
postfix.service failed
chronyd.service
polikit.service
dbus.service

有用户不存在和系统服务启动失败的现象,很奇怪,这些是系统服务用户,下意识的去找passwd文件,发现里面除了root,其它用户都被注释掉了,到这里感觉找到了问题所在,于是取消注释,重新在清楚日志重启,发现可以正常进入系统了,具体passwd文件被病毒注释还是程序或者人为设置的,无痕可查。后来我做过实验,如果把passwd里面的用户除了root,其它用户都停掉,确实会导致进不去系统。

总结:进不去系统原因是passwd用户被注释了,不然能进去系统,系统缺少库文件会影响系统服务启动。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

carl 发表于 2019-7-18 14:40
  
修复几十轮
楼主这个是什么服务器?

用aCloud虚拟服务器,做个镜像快照,是不是恢复一下就可以了
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
每日一问
技术笔记
干货满满
GIF动图学习
功能体验
通用技术
标准化排查
SDP百科
产品连连看
技术咨询
技术圆桌
社区新周刊
2023技术争霸赛专题
秒懂零信任
自助服务平台操作指引
信服课堂视频
畅聊IT
在线直播
新版本体验
技术晨报
安装部署配置
sangfor周刊
VPN 对接
专家问答
高手请过招
升级&主动服务
答题自测
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高频问题集锦

本版版主

461
247
13

发帖

粉丝

关注

本版达人

feeling

本周分享达人

新手29676...

本周提问达人