qxyokok 发表于 2020-3-12 15:24

关于Linux使用yum update后系统崩溃的原因说明

本帖最后由 qxyokok 于 2020-3-19 11:25 编辑

如果你的linux版本与当前源的版本差距过大,或者你的软件建构在旧版本的软件包上,无法确认新版本能否同样支持的情况下,尤其是生产环境:

千万慎用yum update!!!


之前为了学习Linux,我安装了centos和rhel。在升级过程中,我有了一个很重要的发现。
一开始我的centos是7.0版本,下载的rhel也是7.0版本,内核均为3.10.0-123.el7。


用旧版本是因为,我centos7刚出时候下载了镜像,我懒得下直接安装的。升级到7.7的话,只需要下载945MB的升级就行了,不用重新下载。
rhel7.0是我在网上找到的版本,对应着教学参考书下载的。


centos我无脑升级7.7后,无法开机了,并且出现了很多的故障。我在不断的排除故障后,发现了这个故障可能真的无法修复。我以为毕竟是社区版,如果用rhel会不会稳定一些?
我的rhel7.0是连接的红帽官方源下载的,出现了同样的问题!具体情况如下。


在使用了YUM -Y UPDATE后,经过检查发现了1975个升级包。升级完成后系统版本会从7.0直接到7.7。这些升级包几乎包含了所有的软件同时也包含了内核(版本为3.10.0-1062.el7)。熟悉linux的同学可能知道,软件包之间的依赖关系是很复杂的。
YUM可以帮助我们处理这些复杂的软件包依赖关系,但是不能过分的相信YUM是多么的智能化。在版本差距过大的情况下,YUM也救不了你……


当时我的系统升级包在下载完成后,
(吐槽rhel的源是真的慢,慢到我整整下载了一天,centos的一小会儿就下载完了,有镜像源真是爽)
开始了自动安装的过程。YUM一开始还是做的挺不错的。到了后面当一个包关联好几个包,这好几个包又关联好几个包,有的包出现了分版本的情况等诸多情况之后,开始频繁的出现ERROR报错,报错的原因主要都是因为依赖安装的先后没有自动识别好,导致有的前置包没更新,后包为了另一些包已经更新,前后无法匹配,导致后续依赖前两个包的程序又无法安装。(有点绕,大意就是,YUM自己把自己绕晕了)


之后不断的提示安装的新包出现了重复。(有需要处理重复包问题的同学,可以参考这里的解决方法)


1、首先我通过yum install yum-utils -y安装了管理重复包的利器2、然后清除了YUM的缓存yum clean all3、列出所有重复的包package-cleanup --dupes看一下,重复的太多了……一屏幕都放不下,用more看了下有好几屏幕4、接下来解决他们!package-cleanup --cleandupes --removenewestdupes5、清除掉了那些不断提示重复的包,然后又把损坏的包剃掉package-cleanup --problems6、我以为万事大吉了(通常情况下,到了这一步就解决问题了),重新开始yum -y update
结果仍然提示有重复包(OMG……)我看了一下,用package-cleanup --cleandupes重新清理,提示无法清理在仔细阅读后,看明白了……大意说的是,包被依赖关系连起来了,装第一个必须升级第二个,升级第二个需要停止第三个,然而第三个正在使用中无法停止,重启后可停止……太麻烦了……敲入reboot!就此无法开机……开机的情况瘫痪的厉害,连报错都看不见,在GURB选择内核之后就黑屏,或者偶尔会显示一两行字。GURB显示当前内核仍然为3.0.10-123.el7,但是里面的各种软件包已经升级了95%。
到目前为止,仍然在尝试解决。
这是我在实验环境出现的问题,如果是生产环境无脑YUM UPDATE,很可能让你吃个大亏!切记升级前慎重!
Tips:这里提一个小技巧,我在gnome桌面升级的时候黑屏了(桌面自己升级肯定是没办法显示的)。这时候可以按下Ctrl+Alt+F2切换成命令行模式,接着用。
愿正在学习linux路上的你,我的经验可以让你省一些力气。一直查国内外的各种资料确实很累啊~

更新:已经修好啦~~哈哈~


经过一系列的研究后发现,系统确实拆的七零八落无法独自修复,靠系统自己是肯定靠不住了。正在惆怅之时,电脑“叮”的一声,我的rhel8.1下载好了。这个镜像一直断,我可是折腾下载了一个星期啊!!!我在网上只找到了RHEL8.0的镜像,各种渠道里都没有RHEL8.1的镜像,我估计我要成为全网首发了哈哈~~


下载地址在我传到云上后分享给大家。


言归正传,我在安装rhel8.1的时候忽然看到了修复模式。


我怎么把这么重要的功能忘却了??!!


打开修复模式,挂载root,配置临时网络,然后按照我上面的流程再次操作一遍。


不就是系统里的包因为正在运行的原因,导致依赖包乱了么。在我大救援模式下,我不用你的系统好不好嘞~


果然,非常顺利的清除掉重复包和故障损坏包,然后yum -y update,全部重新下载,依次配对依赖包,修复完成~~~


这里我要更正一下上面我写的有误的内容。不是YUM本身太蠢,蠢的地方是在YUM分不清哪些先装,哪些后装,哪些包在什么时候重启,重启后接着怎么装。这些情况目前似乎也没有什么好的解决方法。如果您有什么好的方法,欢迎留言,我也学习一下。


发生这次崩溃事故的本质原因,是YUM无法正常处理正在使用且不重启没有办法停止的系统关键服务包。


对于这种包,多半还是因为系统版本跨度太大,才会出现这种情况。应用包+底层包+内核一起更新,无脑用YUM肯定还是要完蛋的。

最终结论还是和开头一样:


如果你的linux版本与当前源的版本差距过大,或者你的软件建构在旧版本的软件包上,无法确认新版本能否同样支持的情况下,尤其是生产环境:

千万慎用yum update!!!更新:最新红帽系统镜像我上传完了,下面是下载链接,里面包含RHEL7.07.78.1三个版本。想尝试8.1的,下载就好~链接:https点//pan点baidu点com/s/1dNlL6FMp_w7H0VoTG4d0yw
提取码:27fk


SHA-256 Checksum:          2323ad44d75df1a1e83048a34e196ddfedcd6c0f6c49ea59bf08095e3bb9ef65

红帽8.1 RHEL8.1下载 rhel8.1下载 Download Red Hat Enterprise Linux 8.1 RHEL8.1.ISO rhel8.1.iso RHEL8.1 rhel8.1
欢迎评分~~


那一夜谁懂22 发表于 2020-3-12 15:30

学习了,{:301_998:}

灬时光向来熬人 发表于 2020-3-12 15:49

学习了,感谢分享!

wxb519774317 发表于 2020-3-12 16:12

适用新手自学教程

其实很多细节 读书的时候老师会说

Mr.[先知] 发表于 2020-3-12 16:17

已经入坑过 所以 现在不敢用了

By阿清 发表于 2020-3-12 16:38

使用yumupgrade

m-10306 发表于 2020-3-12 17:03

谢谢提醒{:1_893:}

JDK007 发表于 2020-3-12 20:57

楼主在CentOS 7之后版本有没有遇到pip无法更新的问题?

qxyokok 发表于 2020-3-13 09:58

JDK007 发表于 2020-3-12 20:57
楼主在CentOS 7之后版本有没有遇到pip无法更新的问题?

没有。pip无法更新的话,那得看你机器的具体情况才能知道为什么。多留意反馈的信息,就能找到原因了。我一直用pip没有出现过无法更新的问题

qxyokok 发表于 2020-3-16 21:04

By阿清 发表于 2020-3-12 16:38
使用yumupgrade

一样会升级内核,不信你试试。我自己亲自试验过
页: [1] 2
查看完整版本: 关于Linux使用yum update后系统崩溃的原因说明