
换了阿里云源之后CentOS的软件安装速度真的能用“起飞”来形容。我之前在一台国内服务器上执行yum update默认官方源的时候经常卡在Connecting to mirror.centos.org半天没反应超时重试几次之后整个会话就像死掉一样气得我一度想直接换系统。后来把源切成阿里云镜像同样的命令几十秒就跑完依赖解析下载速度直接拉满带宽。这篇文章我就把从“为什么慢”到“怎么换干净”的完整流程拆开讲清楚包括CentOS 7、CentOS 8/8 Stream、CentOS Stream 9这几个常见版本的差异处理还有换源之后那些乱七八糟的报错怎么排查。不管是刚接触Linux的新手还是被各种yum报错折磨过一会儿的老手这篇都能帮你少走弯路。1. 为什么你的yum源又慢又容易超时1.1 官方源的“水土不服”问题CentOS默认配置的yum源指向的是mirror.centos.org这个域名背后是一套全球镜像调度机制。理论上它会根据你的IP地理位置自动分配一个就近镜像但实际体验是国内服务器访问官方源经常出现两种情况要么连接超时要么速度只有几十KB每秒。原因是多方面的。官方镜像节点大部分部署在海外国内访问要经过国际带宽出口高峰期拥塞严重。再加上CentOS自己的镜像调度策略未必能精准识别国内网络环境经常把一个延迟很高的欧洲节点分给你。我在一台位于华北的云主机上执行yum makecache日志里显示的镜像地址居然是德国法兰克福的节点延迟接近300毫秒能不慢吗还有一个更底层的问题。CentOS 7已经停止了维护EOL官方源里的软件包被整体迁移到了vault.centos.org这个归档仓库。这个归档仓库的设计目的是“保存历史版本”并不是为了给用户提供高速下载服务它的带宽和节点数量远不如正式源。这就是为什么现在很多还在用CentOS 7的服务器就算网络没问题执行yum update也经常报404错误因为yum配置文件里的baseurl还指向已经失效的旧路径。1.2 阿里云镜像源做了什么优化阿里云镜像站mirrors.aliyun.com做的事情本质上是把CentOS官方仓库的软件包同步一份到国内机房再通过CDN加速分发。你换成阿里云源之后yum下载软件包走的都是国内节点延迟低、带宽大体验差距非常明显。而且阿里云镜像站在CentOS 7进入EOL状态之后很贴心地提供了vault路径下的归档软件包同步。也就是说官方源里已经删掉的旧版本软件包在阿里云镜像站还能找到这解决了很多老系统的存量维护问题。不过我要提醒一句用阿里云vault源只能保证“还能装上历史版本软件”并不代表系统还能获得安全更新安全性问题依然要重视。我实测过一组对比数据同一台服务器、同一个软件包比如nginx官方源解析依赖加下载耗时约8分钟还经常中途断开换成阿里云源之后整个过程不到40秒下载速度稳定在30MB/s以上。这个差距不是一星半点基本是能用和不能用的区别。2. 动手前的准备工作2.1 确认系统版本不同版本的CentOSyum源的配置方式和路径差异很大。在动手之前第一步一定是确认当前系统的具体版本。我用的是这个命令cat /etc/redhat-release输出结果可能是CentOS Linux release 7.9.2009 (Core)也可能是CentOS Stream release 9看清楚这两个关键信息是什么大版本7、8、9是不是Stream版本。这会直接决定后面的配置写法。还要顺带看一眼系统架构uname -m绝大多数服务器是x86_64如果你用的是ARM架构的服务器比如华为鲲鹏、阿里云倚天实例输出会是aarch64部分配置路径里会有架构目录的差异需要稍微调整。2.2 备份原有的yum源配置这一步是很多人跳过然后后悔的地方。修改系统配置文件之前备份是必须的特别是/etc/yum.repos.d/目录下的所有仓库文件。换个源也就几条命令的事但万一改错了导致yum彻底不可用没有备份就只能手动把文件内容敲回去那才叫折磨。mkdir -p /etc/yum.repos.d/backup mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/把该目录下所有.repo后缀文件都移到backup文件夹里。注意后缀是.repo别把目录下其他文件也一起移走了。ls /etc/yum.repos.d/确认一下这里只剩backup目录就对了。2.3 确认能访问外网换源本身需要从阿里云镜像站下载repo配置文件所以你得确保服务器能访问外网。可以用这个命令快速测试连通性curl -I --connect-timeout 5 https://mirrors.aliyun.com能返回HTTP/2 200之类的响应码就说明网络没问题。如果卡住不动先把网络通了再来做换源操作。3. 各版本CentOS更换阿里云源实操3.1 CentOS 7走vault归档路径CentOS 7是存量最大的版本也是麻烦最多的一个。因为官方已经把它从正式源挪到了vault归档区所以它的阿里云repo配置需要使用vault路径。我直接给你能用的配置。创建/etc/yum.repos.d/CentOS-Base.repo文件vi /etc/yum.repos.d/CentOS-Base.repo写入以下内容[base] nameCentOS-7 - Base - mirrors.aliyun.com baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7 [updates] nameCentOS-7 - Updates - mirrors.aliyun.com baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/x86_64/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7 [extras] nameCentOS-7 - Extras - mirrors.aliyun.com baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/extras/x86_64/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7这里有个关键点路径里写的是centos-vault/7.9.2009而不是直接的centos/7。因为CentOS 7 EOL之后阿里云镜像站把7.x版本的软件包包移到了centos-vault目录下。如果你还是用老的https://mirrors.aliyun.com/centos/7/...路径就会碰到404。然后清理缓存并重建yum clean all yum makecache执行完yum makecache看到Metadata Cache Created就说明源已经生效。之后再执行yum update试试速度应该会有质的提升。如果因为之前改错过源导致系统里缺基础工具或者依赖损坏建议先把epel-release这类扩展仓库也配上。EPEL源在CentOS 7下的配置路径同样要注意用https://mirrors.aliyun.com/epel/7/x86_64/。3.2 CentOS 8 / 8 Stream注意AppStream仓库CentOS 8和8 Stream的情况比CentOS 7好一点官方源还没完全移入vault但官方对CentOS 8的支持也已经终止所以阿里云源同样推荐使用vault路径。CentOS 8的yum源配置比7复杂因为多了一个AppStream仓库这个仓库里装的是用户态应用程序PHP、Nginx、Redis等也是通过模块化流module stream机制管理软件版本的来源。创建/etc/yum.repos.d/CentOS-Base.repovi /etc/yum.repos.d/CentOS-Base.repo写入以下内容这里以CentOS 8.5.2111为例请根据你的实际小版本调整路径[base] nameCentOS-8 - Base - mirrors.aliyun.com baseurlhttps://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/RPM-GPG-KEY-CentOS-8 [AppStream] nameCentOS-8 - AppStream - mirrors.aliyun.com baseurlhttps://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/x86_64/os/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/RPM-GPG-KEY-CentOS-8 [extras] nameCentOS-8 - Extras - mirrors.aliyun.com baseurlhttps://mirrors.aliyun.com/centos-vault/8.5.2111/extras/x86_64/os/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/RPM-GPG-KEY-CentOS-8如果你是CentOS Stream 8路径会有一点变化用的是/centos/8-stream/或者/centos-vault/8-stream/注意根据镜像站的实际目录结构来调整。一定不要照抄一刀切自己先打开https://mirrors.aliyun.com/centos-vault/看一眼目录名再写路径。3.3 CentOS Stream 9新一代Stream版本配置CentOS Stream 9是目前还在积极维护中的版本它和RHEL 9保持同步滚动更新所以它的源路径没有vault归档这个问题直接使用阿里云镜像站里的/centos-stream/目录即可。创建repo文件vi /etc/yum.repos.d/centos.repo写入以下内容[baseos] nameCentOS Stream $releasever - BaseOS baseurlhttps://mirrors.aliyun.com/centos-stream/$stream/BaseOS/$basearch/os/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official [appstream] nameCentOS Stream $releasever - AppStream baseurlhttps://mirrors.aliyun.com/centos-stream/$stream/AppStream/$basearch/os/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official [extras] nameCentOS Stream $releasever - Extras baseurlhttps://mirrors.aliyun.com/centos-stream/$stream/extras/$basearch/os/ gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/centos-stream/RPM-GPG-KEY-CentOS-Official在这个配置里$releasever和$basearch是yum内置的变量会自动替换为系统版本号和架构。$stream变量可能需要你手动设置或者在源配置里直接写死为9-stream。我在实际配置时习惯直接写死减少变量解析出错的概率。gpgkey这里要注意Stream 9官方签名密钥文件名和7/8不同是RPM-GPG-KEY-CentOS-Official不是RPM-GPG-KEY-CentOS-9写错了会报GPG校验失败。3.4 用官方脚本一键配置省事但要看清楚阿里云镜像站提供一个自动化更换脚本可以省去手动写repo文件的步骤wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo这是常见的CentOS 7写法。但这里有个隐藏的大坑脚本生成的文件里baseurl是https://mirrors.aliyun.com/centos/7/...这个路径而刚才说了CentOS 7 EOL之后阿里云把7.x的包挪到了centos-vault目录。所以这个脚本准确说是这个通用repo文件在2024年之后执行yum makecache基本会报404必须手动把路径里的centos改成centos-vault。我建议你即使用了这个脚本也一定要打开文件确认一下路径是否正确。别完全信任第三方生成文件里的路径以mirrors.aliyun.com实际目录结构为准。4. 换源之后必做的验证和常见报错排查换了源不代表万事大吉我见过太多人配置完源之后一执行yum install就报错然后就慌了。其实大多数报错原因都很简单按下面的顺序排查基本都能解决。4.1 缓存清理与重建换源之后第一件事永远都是yum clean all yum makecache如果你不执行这两步yum会沿用之前缓存的metadata信息那就等于还是在用旧源的索引去匹配新的软件包地址各种奇怪的404和依赖解析错误都会冒出来。yum clean all清理的是/var/cache/yum下的数据这个目录里存着源地址、软件包列表、gpgkey信息等。我在刚接触Linux那会儿吃过没清理缓存的亏。当时把源都换成阿里的了结果执行yum install nginx一直报Could not resolve host: mirror.centos.org我一度以为源没更换成功折腾了半天才发现是缓存没清理。这个顺序问题搞定了一半的排障问题都解决了。4.2 Failed to download metadata for repo这是换源之后最常见的报错完整提示一般是Errors during downloading metadata for repo base: - Status code: 404 for http://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml这个报错用大白话翻译就是yum根据源配置跑到指定URL下去找软件包元数据文件repomd.xml结果服务器返回404。意思就是路径不对。针对CentOS 7把baseurl里的centos/7替换成centos-vault/7.9.2009基本就能解决。针对CentOS 8把centos/8替换成centos-vault/8.5.2111。改完之后重新执行yum clean all yum makecache。还有一种情况是你配置的源路径里版本的目录名和你系统的版本不一致。比如系统是8.5.2111但阿里云镜像站上已经把8.5目录删了只剩8.4、8.7之类的目录。这时你需要去镜像站确认一下到底有哪些可用目录然后选择一个对应的小版本号。在CentOS 8的vault目录里小版本很多选个和系统原来一样的就行。4.3 GPG密钥校验失败的两种情况Public key for xxx.rpm is not installed这个报错意味着yum在下载了软件包之后无法用本地已有的GPG密钥验证这个软件包的签名。处理方式有两种第一种是针对单个软件包临时跳过校验不推荐但应急可用yum install xxx.rpm --nogpgcheck第二种是安装对应的GPG公钥。比如CentOS 7rpm --import https://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7安装完再执行yum makecache然后重新yum install。还有一种是GPG key retrieval failed意思是无法从配置的gpgkey地址下载公钥。这种情况一般是gpgkey的URL写错了比如用了/centos/7/...的路径但实际密钥文件在/centos-vault/7.9.2009/...下面。对照一下路径就能解决。4.4 换源后网络还是慢或超时如果你确认源已经换成阿里云了但yum下载依然慢吞吞问题不一定出在源上有可能出在DNS解析上。mirrors.aliyun.com这个域名在国内DNS解析结果应该是几十毫秒延迟的节点但如果你的服务器配置的DNS是某个响应很慢的公共DNS可能会有解析超时的情况。检查DNS配置cat /etc/resolv.conf如果DNS看起来有问题可以临时改成223.5.5.5阿里公共DNS和114.114.114.114然后重试。另外还有可能是你服务器所在网络环境对HTTP/HTTPS的连接有特殊策略比如必须在代理环境下才能访问外网。这种情况就得在yum配置文件里加proxyhttp://你的代理地址:端口这属于公司内网环境常见问题不展开说了。4.5 “Could not resolve host”报错排查还有一位朋友碰到过这样的问题Could not resolve host: mirrors.aliyun.com这个报错说明yum客户端在尝试解析mirrors.aliyun.com域名时失败了。排查路径如下先ping一下域名ping mirrors.aliyun.com如果返回ping: unknown host说明DNS解析确实有问题。检查/etc/resolv.conf是否配置了可用的DNS服务器。如果ping也通但yum依然报这个错那就要检查yum配置文件里是否写错了域名比如手滑写成了mirros.aliyun.com。还有网络环境的问题比如有些云厂商的安全组规则禁用了出方向53端口DNS查询端口这也会导致域名解析失败。检查安全组规则和防火墙设置。4.6 CentOS Stream 9的basearch路径不对CentOS Stream 9的源配置中经常出现的报错是Error: Failed to download metadata for repo baseos: Cannot prepare internal mirrorlist: No URLs in mirrorlist这个报错的原因通常是baseurl里的$basearch变量没有被正确解析或者是镜像站目录结构跟你写的不匹配。Stream 9的路径是/centos-stream/9-stream/BaseOS/x86_64/os/如果你把版本号写成了9而不是9-stream路径就错了。我建议调试期间直接用完整路径不要用变量等一切工作正常了再考虑精简成变量形式。这样报错时你能直观地看出路径哪里写错了。5. 换源之后的几个额外建议5.1 把EPEL仓库也换成阿里云源EPELExtra Packages for Enterprise Linux是Red Hat系Linux最常用的第三方软件源它的软件包数量远超默认源里面有很多常用工具htop、jq、iftop等。EPEL默认配置指向download.fedoraproject.org国内访问一样慢建议顺手也换成阿里云源。CentOS 7下安装并换源yum install -y epel-release sed -i s|^#baseurl|baseurl|; s|^mirrorlist|#mirrorlist| /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo sed -i s|https://download.fedoraproject.org/pub|https://mirrors.aliyun.com|g /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo如果你已经安装了EPEL并且配置文件在但不确定路径可以直接打开文件检查baseurl那行是否已经指向mirrors.aliyun.com。对于CentOS Stream 9EPEL配置文件名是epel.repo和epel-next.repo用同样的seds替换思路处理即可。5.2 定期执行更新但别盲目update很多人换完源之后第一件事就是yum update。对于生产环境我不建议源一换完就直接无脑yum update。把内核、关键系统组件全部升级到最新版本一旦不兼容比你换源前的卡顿严重得多直接可能起不来系统。稳妥做法是先执行yum check-update看看有哪些软件包有更新版本然后只更新你需要的软件包或者分批次更新。yum update适合明确知道自己要升级的场景不适合“换了新源试着玩玩”的场景。5.3 留意CentOS 7 EOL带来的长期影响诚心建议是CentOS 7已经EOL不管用什么源都无法再获得官方安全更新和错误修复。阿里云vault源里能拉到的软件包版本永远停留在2020年8月7.9发布时和之后的维护期版本内核漏洞、软件安全漏洞都不会再补。如果你还在跑CentOS 7的生产环境我的建议是尽早规划迁移到CentOS Stream、Rocky Linux或者AlmaLinux这类活跃维护的发行版。换源只是权宜之计不是长久方案。做运维的人都知道有些债迟早要还拖到系统出安全问题再动成本要高得多。5.4 配置固定的yum源地址避免“被镜像”默认的mirrorlist机制会根据IP自动挑选镜像站点听起来不错但它的实际体验并不稳定。换源之后我建议直接把repo文件里的mirrorlist注释掉或者删掉只保留baseurl指向阿里云地址这样yum每次请求都走固定路径结果可预期速度也稳定。检查一下/etc/yum.repos.d/里的文件如果baseurl和mirrorlist同时存在优先用baseurl最好把mirrorlist那行注释掉或者删掉。不然yum可能依然去访问mirrorlist指定的动态列表绕了一圈还是回到慢源上。6. 一个通用排查思路从报错倒推配置问题很多人一看到yum报错就懵了其实yum的特点就是报错信息给得很明确绝大多数时候只要把报错里的URL地址复制出来放到浏览器里打开看一眼问题就清楚了一半。以repodata/repomd.xml的404为例你把这个完整的URL复制出来在浏览器打开如果显示404页面说明路径不对去镜像站上看真实的目录结构把路径修正。如果浏览器能打开并下载一个文件说明路径是对的问题出在yum本地的缓存或密钥上执行yum clean all再试即可。这是我在排障过程中最常用也最有效的方法。永远不要让yum在那儿反复试错手动去验证你的配置URL是唯一正确的排障路径。另外一个小建议是修改repo文件时尽量保持一次只改一个变量。比如你先只改baseurl路径gpgkey先不管如果通了再改gpgkey这样出问题能精准定位。一次改三个地方报错了你根本不知道是哪个环节出了问题。还有一个容易踩的坑是gpgcheck设为1时gpgkey地址必须是可达且密钥内容正确。如果你不想折腾GPG校验临时把gpgcheck0也能让yum工作但这会放弃软件包签名验证安全性大打折扣生产环境不建议长期这么做。最后说说我为啥坚持用阿里云源而不是其他镜像源。一个原因是阿里云镜像站的同步频率比较高软件版本更新比较及时另一个原因是它的链接稳定性和域名解析质量在国内都算是第一梯队。对于大部分国内服务器没有比它更省心的选择。我自己在实际操作中的体会是yum换源这事真的不算难难点全在“对版本”和“对路径”这两件事上。只要你花30秒去阿里云镜像站的目录结构里瞄一眼搞清楚自己的系统和镜像站目录的对应关系基本一次就能成功。如果照着帖子教程操作还是报错优先怀疑版本号和路径而不是急着查什么复杂的网络问题。