切换国内镜像源加速 CentOS Stream
适用:CentOS Stream 9 与 Stream 10(x86_64 / aarch64)· 核对日:2026-11-01 · 官方依据:mirror.stream.centos.org 与仓库文件本身(/etc/yum.repos.d/centos.repo)。
国内拉取 mirror.stream.centos.org 的速度取决于出口线路。本页把仓库指向国内镜像:一条 sed 完成,回滚只需要删掉加的行。命令在 Stream 9 容器实测(aarch64,dnf 4.14.0),Stream 10 的文件结构相同,仅 GPG key 文件名不同(见 CS-MIR-5)。
- 一台 Stream 9/10 系统,
sudo权限; - 回退点:
/etc/yum.repos.d/centos.repo与centos-addons.repo是系统自带的原始文件,切换前先各拷一份,回滚时还原即可:
$ sudo cp -a /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.bak.$(date +%s)$ sudo cp -a /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.bak.$(date +%s)先看清楚官方仓库文件长什么样
Section titled “先看清楚官方仓库文件长什么样”$ ls /etc/yum.repos.d/预期输出(Stream 9 实测):
centos-addons.repocentos.repo与 CentOS 7/8 时代「一个仓库一个文件」不同,Stream 收敛成两个文件:centos.repo 装着 baseos / appstream / crb 三条主线(各带 debug 与 source 变体),centos-addons.repo 装 highavailability、nfv、rt、resilientstorage、extras-common。默认启用的只有 baseos 与 appstream(enabled=1 各 2 条)。每一段的取址方式是 metalink=(一个会按速度挑镜像的重定向服务),这就是国内速度不稳的来源——切换国内镜像就是把这个重定向换成固定地址。
URL 里要用 $stream 而不是 $releasever:
$ cat /etc/dnf/vars/stream预期输出:
9-stream # Stream 10 上是 10-stream镜像目录路径是 …/centos-stream/9-stream/BaseOS/x86_64/os/ 这一层级,其中 9-stream 这一段必须来自 $stream;如果写成 $releasever,拼出来的是 …/centos-stream/9/…,这个路径不存在。
切换到国内镜像
Section titled “切换到国内镜像”三家镜像的目录结构一致(都以 centos-stream/ 为根)。任选一家:
| 镜像 | baseurl 根 |
|---|---|
| 清华 TUNA | https://mirrors.tuna.tsinghua.edu.cn/centos-stream/ |
| 中科大 USTC | https://mirrors.ustc.edu.cn/centos-stream/ |
| 阿里云 | https://mirrors.aliyun.com/centos-stream/ |
用 sed 把 centos.repo 里每一段的 metalink 注释掉、加一行 baseurl(以 TUNA 为例):
$ sudo sed -i -e 's|^metalink=|#metalink=|' \ -e '/^\[baseos\]/,/^\[appstream-debuginfo\]/ s|^#metalink=|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/$stream/BaseOS/$basearch/os/\n#metalink=|' \ /etc/yum.repos.d/centos.repo不想管分段边界的更朴素写法是逐段处理:对 [baseos]、[appstream]、[crb] 三段各做一次「注释 metalink + 在其后插入 baseurl」。AppStream 段的仓库目录是 AppStream/,CRB 段是 CRB/,把上面命令里的 BaseOS 换掉即可。
先不动 centos-addons.repo:addons 里是 highavailability、rt 这些默认未启用的附加仓库,等你真启用它们时再照同样办法换。
验证:清缓存重建元数据,确认走的是新地址:
$ sudo dnf clean all$ sudo dnf makecache预期输出(关键行):
CentOS Stream 9 - BaseOS kB/s | ... 00:00CentOS Stream 9 - AppStream kB/s | ... 00:00Metadata cache created.本站的容器实测用的是等价的单仓验证:dnf --disablerepo='*' --enablerepo=baseos --setopt=baseos.baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/os/ makecache 输出 Metadata cache created.(TUNA 9-stream BaseOS x86_64)。
GPG 注意:两代 Stream 的 key 文件名不同
Section titled “GPG 注意:两代 Stream 的 key 文件名不同”两个版本的仓库段都写 gpgcheck=1,校验靠 /etc/pki/rpm-gpg/ 里的 key 文件,而两代的文件名不一样:
| 版本 | centos.repo 里的 gpgkey |
|---|---|
| Stream 9 | RPM-GPG-KEY-centosofficial |
| Stream 10 | RPM-GPG-KEY-centosofficial-SHA256 |
切换镜像只改 baseurl,不改 gpgkey 行——签名校验仍然用本地 key 文件进行,与镜像无关,所以这条操作不引入「镜像被篡改」的新风险面。
不想改文件时的临时方案
Section titled “不想改文件时的临时方案”单次命令可以用 --setopt 覆盖 baseurl,不落盘,适合脚本里试一个镜像通不通:
$ sudo dnf --disablerepo='*' --enablerepo=baseos \ --setopt=baseos.baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/os/ \ makecache$ sudo cp -a /etc/yum.repos.d/centos.repo.bak.<时间戳> /etc/yum.repos.d/centos.repo$ sudo dnf clean all && sudo dnf makecache还原后 grep metalink /etc/yum.repos.d/centos.repo 应看到未注释的 metalink 行。
| 现象 | 原因 | 处理 |
|---|---|---|
makecache 报 Cannot find a valid baseurl | baseurl 路径拼错(如用了 $releasever) | 改回 $stream;cat /etc/dnf/vars/stream 核对值 |
| 某一段 404 | 段名与目录名不匹配(CRB 段要用 CRB/ 目录) | 逐段核对目录大小写 |
| GPG key 报错 | 误删了 gpgkey 行或改了 key 文件名 | 还原备份;两代 key 文件名见上表 |
| 速度没有提升 | 出口对该镜像不友好 | 换另一家(USTC / 阿里云)再试 |
- CentOS Stream 仓库与滚动内容 — 仓库结构与
$stream变量的完整说明 - EPEL 与 EPEL Next — 第三方仓库在 Stream 上的启用(同样吃镜像速度)
- 滚动更新排障 — 元数据与仓库类报错的排查顺序
- 装完 10 分钟 — 新装机建议一次做完的基础动作
- 官方:Downloading CentOS Stream、Mirror List