由于使用阿里云進行部署測試,因而會對yum update進行操作,這兩天更新了systemd-239-82.0.3.4.al8.2.x86_64,但存在報錯,然后進行yum history?undo和清空yum cache,但出現操作Linux命令行無效。具體來說,幾個報錯如下:
Running transaction test Transaction test succeeded. Running transaction Preparing :
1/1 Running scriptlet: systemd-239-82.0.3.4.al8.3.x86_64
1/1 Running scriptlet: systemd-239-82.0.3.4.al8.3.x86_64
1/2 Upgrading : systemd-239-82.0.3.4.al8.3.x86_64
1/2 Error unpacking rpm package systemd-239-82.0.3.4.al8.3.x86_64
Verifying : systemd-239-82.0.3.4.al8.3.x86_64 1/2
Verifying : systemd-239-82.0.3.4.al8.2.x86_64 2/2
Failed: systemd-239-82.0.3.4.al8.2.x86_64 systemd-239-82.0.3.4.al8.3.x86_64
Error: Transaction failed?
經查初步判斷為RPM包中systemd-239.82.0.34.al8.2.x86_64、systemd-239-82.0.3.4.al8.3.x86_64的三個文件RPM都有問題。
于是采取yum history undo回復操作,但由于此前更新涉及systemd的更新,版本不對后的回復涉及了部分sysvinit的緩存清空,在操作過程不慎造成/sbin/init中的指令文件完全被刪除。
因此,在未重啟服務器時,在操作界面進行reboot、login、logout等指令均報錯:
reboot bash: reboot: command not found... Failed to search for file: Failed to download gpg key for repo 'docker-ce-stable': Curl error (35): SSL connect error for https://download.docker.com/linux/centos/gpg [OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to download.docker.com:443 ]
在阿里云平臺工具進行服務器重啟后,一直長時間等待后啟動服務器,但仍沒法進行SSH或遠程鏈接,哪怕進行停機,也等待很久。
由于測試服務為主,本實例并沒有安裝快照(因為需要收費的),所以這次整個測試服務器估計都涼了,需要重新部署操作系統。系統健康診斷亦已經檢測到嚴重的問題。
由此可見幾點教訓值得大家關注:
一、如果是正式或重要的部署快照的錢還是不能省的。
二、沒事少做yum update或yum install或者清空sysvinit相關的操作,涉及所有跟systemd有關的更新,盡量少做,所謂的開源免費的東西,其實也很不靠譜。
三、警惕阿里云本身的yum update陷阱,他們對rpm的安裝包都有自己的具體處理,鬼知道會否搞些小動作要你買他們這個那個服務(從陰謀論提出質疑)
四、對于在阿里云上的systemd-239-82.0.3.4這個版本的安裝,一定要十分謹慎。
重點來了,如何可以在無法通過Workbench遠程連接以及SSH連接的情況下,盡力修改/sbin/init的文件?
我們可以通過阿里云Alibaba Cloud Client的桌面工具。采用發送遠程命令的方式,進行鏈接操作,其具體界面如下:
在遠程命令的窗體,打上cd /sbin/init,看看目錄中有否存在,果斷有沒存在這個目錄文件
?
然后重新運行sudo yum install systemd -y,則可。
最后記得加上sudo reboot命令重啟服務器。
對于以后預防措施
為了防止類似問題再次發生,建議采取以下措施:
-
定期備份關鍵系統文件,特別是
/sbin/init
等核心文件。 -
啟用阿里云實例的自動快照功能,以便在出現故障時快速恢復(需要收錢)。
-
加強系統安全,防止未經授權的訪問和惡意操作。
-
監控系統日志,及時發現和處理異常情況。