由于使用阿里云进行部署测试,因而会对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
等核心文件。 -
启用阿里云实例的自动快照功能,以便在出现故障时快速恢复(需要收钱)。
-
加强系统安全,防止未经授权的访问和恶意操作。
-
监控系统日志,及时发现和处理异常情况。