1. 程式人生 > >記錄一次斷電導致centos7.4系統不能正常進入的解決方案

記錄一次斷電導致centos7.4系統不能正常進入的解決方案

sta lin gin isa postfix 文件 firewalld chroot ott

情況描述:
園區意外斷電,導致服務器centos7.4系統不能正常進入,一直卡在進度條界面,按esc或者f5能夠看到詳細的錯誤,主要有三個服務報錯,如下圖:

技術分享圖片
chronyd、Postfix、polkit服務啟動失敗

分析情況:
這幾個服務都是centos下常見的服務,chronyd是時間同步服務,Postfix是郵件服務,polkit是linux服務器上面的一種服務器方法進程,是不是最後一個服務失敗導致系統進不去的呢?

解決步驟:
一、關閉錯誤服務解決方法
服務器的緊急模式不能進入,於是刻錄了一張centos7.4的光盤,通過光盤的緊急模式進入,原來的系統文件都被掛載在/mnt/sysimage/目錄下面:

技術分享圖片
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命令等操作,截圖如下,在想會不會是因為誤刪除了系統文件導致的,後面證實了我的想法是正確的。
技術分享圖片技術分享圖片

技術分享圖片
技術分享圖片

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用戶被註釋了,不然能進去系統,系統缺少庫文件會影響系統服務啟動。

記錄一次斷電導致centos7.4系統不能正常進入的解決方案